问题
为什么我的 HttpClient 实例不使用我提供的客户端证书进行相互验证?
背景
我正在使用 HttpClient 进行双向 TLS。作为客户端,我将客户端证书添加到 WebRequestHandler,然后在新的 HttpClient 中使用该处理程序。
证书没有安装在我的机器上。我已经成功将它加载到处理程序中,并且在调试时可以看到它(密码也是正确的)。
我正在针对几个不同的测试域进行测试
- https://client.badssl.com/ - 这会使用找到的证书查找客户端身份验证 here .这是我目前正在使用的证书
- https://prod.idrix.eu/secure/ - 这个简单地吐出任何提供的客户证书。
两个测试应用均显示未发送证书。
代码
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();
最佳答案
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)。我能够让您的代码使用该证书。
关于c# - HttpClient 没有使用客户端证书进行相互 TLS 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53714614/