2016-04-18 14 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というメソッドは、クライアント証明書に対して2回、サーバー証明書に対して2回呼び出されています。 –

関連する問題