2015-03-17 5 views
6

У меня проблема с проверкой сертификата в единстве. Im использует .Net класс HttpWebResponse, чтобы делать запросы и предоставлял функцию обратного вызова ServicePointManager.ServerCertificateValidationCallback.Проверка сертификата SSL TLS в Unity

Сертификат подписан уполномоченным органом и отлично работает в веб-браузере.

Проверка завершается с статусами: X509ChainStatusFlags.PartialChain X509ChainStatusFlags.RevocationStatusUnknown X509ChainStatusFlags.OfflineRevocation

Проблема, как я это вижу, пустое хранилище корневой сертификат и пустой список CRL. Я открыл исходный код Mono и обнаружил, что эти данные должны быть получены из X509Store, но каким-то образом он не содержит никаких сертификатов Root или CRL.

Мне нужно выполнить правильную проверку сертификата, а не просто пропустить его, вернув true в ServerCertificateValidationCallback или hardcode отпечаток сертификатов, и для этого мне нужно предоставить все необходимые данные.

Предположим, что я знаю авторитет Root, я могу добавить его в хранилище при запуске приложения. Но это не работает с CRL. Платформа - Android \ IOS.

Вопрос: Как я могу заставить единство установить Roots и CRL?

ответ

0

Вы можете установить сертификат через X509Store. Установка сохраняется, поэтому нужно только один раз позвонить. Согласно X509Certificate2 создайте сертификат из байт Base64 или DER. Он может быть экспортирован openssl: openssl x509 -inform DER -in YOUR_ROOT_CER.cer -out YOUR_BASE64_PEM.pem.

private static void InstallCertificate(byte[] cert) 
{ 
    X509Certificate2 certificate = new X509Certificate2(cert); 
    X509Store store = new X509Store(StoreName.Root, StoreLocation.CurrentUser); 
    store.Open(OpenFlags.ReadWrite); 
    store.Add(certificate); 
    store.Close(); 
} 

Сделать внимания StoreLocation.CurrentUser указали на /data/data/<your.package.name>/.mono/ в то время как StoreLocation.LocalMachine является /usr/xxx/.mono на андроиде.

Смежные вопросы