客户端证书验证与证书固定相结合

时间:2016-04-18 14:10:04

标签: ssl xamarin.ios pinning

在使用客户端证书进行身份验证后,是否需要执行证书锁定?有人可以向我解释一下吗?

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 :(得分:1)

客户端证书用于针对服务器对客户端进行身份验证,而不是其他任何内容。相反,服务器证书用于确保您与正确的服务器通信。

通过发送客户端证书无法替换正确的服务器证书。否则,中间攻击者可以简单地向客户端询问客户端证书,希望客户端接受攻击者伪造的服务器证书作为交换。