HttpClient未使用客户端证书进行双向TLS身份验证

时间:2018-12-10 22:26:12

标签: c# authentication dotnet-httpclient mutual-authentication

问题

为什么我的HttpClient实例不使用我提供的客户端证书进行相互身份验证?

背景

我正在使用HttpClient进行双向TLS。作为客户端,我将客户端证书添加到WebRequestHandler中,然后在新的HttpClient中使用该处理程序。

证书未安装在我的计算机上。我已成功将其加载到处理程序中,并且在调试时可以看到它(密码也正确)。

我正在针对几个不同的测试域进行测试

两个测试应用程序均未显示任何证书正在发送。

代码

    var clientCert = new X509Certificate2("badssl.pem", "badssl.com");

    var webHandler = new WebRequestHandler();
    webHandler.ClientCertificates.Add(clientCert);
    var httpClient = new HttpClient(webHandler);

    var result = await (await httpClient.GetAsync(uri)).Content.ReadAsStringAsync();

1 个答案:

答案 0 :(得分:3)

X509Certificate2类似乎没有从PEM证书中读取私钥。

    var clientCert = new X509Certificate2("badssl.com-client.pem", "badssl.com");
    if(!clientCert.HasPrivateKey)
        throw new ApplicationException("Cert doesn't contain private key");

抛出错误。

对于badssl.com,他们确实有可用的PKCS#12证书(又名PFX)。我能够使您的代码与该证书一起使用。