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 request and client authentication」部分の後にreturn文があるため、証明書ピンニングのロジックが実行されることはないので、クライアント証明書による認証を行った後、この部分は廃止されているのではないかと自問自答していました。

4

1 に答える 1

1

クライアント証明書は、サーバーに対してクライアントを認証するために使用され、それ以外には何も使用されません。代わりに、正しいサーバーと通信していることを確認するためにサーバー証明書が使用されます。

正しいサーバー証明書の適切なチェックは、クライアント証明書の送信によって置き換えることはできません。そうしないと、中間者の攻撃者は、クライアントが攻撃者の偽造したサーバー証明書を代わりに受け入れることを期待して、クライアント証明書をクライアントに要求することができます。

于 2016-04-18T16:30:44.700 に答える