2016-04-18 6 views
1

Нужно ли мне выполнять выдачу сертификата после того, как я аутентифицирован с помощью сертификата клиента? Может кто-то объяснить это мне?Проверка сертификата клиента в сочетании с фиксацией сертификата

if (challenge.ProtectionSpace.AuthenticationMethod == NSUrlProtectionSpace.AuthenticationMethodClientCertificate) 
{ 
    Console.WriteLine("Client Cert!"); 

    var options = NSDictionary.FromObjectAndKey(NSObject.FromObject(This._passphrase), SecImportExport.Passphrase); 

    NSDictionary[] importResult; 

    if (This?._certificate == null) return; 
    if (This?._passphrase == null) return; 

    var x509Certificate = new X509Certificate(This._certificate, This._passphrase); 

    SecStatusCode statusCode = SecImportExport.ImportPkcs12(This._certificate, options, out importResult); 
    var identityHandle = importResult[0][SecImportExport.Identity]; 
    var identity = new SecIdentity(identityHandle.Handle); 
    var certificate = new SecCertificate(x509Certificate.GetRawCertData()); 

    SecCertificate[] certificates = { certificate }; 
    NSUrlCredential credential = NSUrlCredential.FromIdentityCertificatesPersistance(identity, certificates, NSUrlCredentialPersistence.ForSession); 
       completionHandler(NSUrlSessionAuthChallengeDisposition.UseCredential, credential); 

    return; 
} 

*Logic for SSL Pinning* 

Поскольку возврат Постулаты после «ClientCertificate запроса и клиента аутентификации» частей, логика для сертификатов пиннинга никогда не будет выполнена, так я спрашивал себя, если эта часть obsolet после выполнения аутентификации с клиентом сертификат.

ответ

1

Сертификаты клиентов используются для аутентификации клиента на сервере и ничего другого. Вместо этого серверные сертификаты используются, чтобы убедиться, что вы разговариваете с правильным сервером.

Правильная проверка правильного сертификата сервера не может быть заменена отправкой сертификата клиента. В противном случае человек из среднего злоумышленника может просто попросить клиента получить сертификат клиента в надежде, что клиент примет взамен поддельный сертификат сервера.

+0

Спасибо за объяснение. Я решил проблему через 2-3 часа поиска, не имея возможности отлаживать ... метод, называемый DidReciveResponse, дважды вызывается дважды для сертификата клиента и второй раз для сертификата сервера. –