HttpClient 没有使用客户端证书进行相互 TLS 身份验证
HttpClient isn't using Client Certificate for Mutual TLS Auth
问题
为什么我的 HttpClient 实例不使用我提供的客户端证书进行相互验证?
背景
我正在使用 HttpClient 进行双向 TLS。作为客户端,我将客户端证书添加到 WebRequestHandler,然后在新的 HttpClient 中使用该处理程序。
我机器上没有安装证书我已经成功加载到handler中,调试时可以看到(密码也正确)
我正在针对几个不同的测试域进行测试
- https://client.badssl.com/ - this looks for client auth using the cert found 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 class 看起来没有从 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)。我能够让您的代码使用该证书。
问题
为什么我的 HttpClient 实例不使用我提供的客户端证书进行相互验证?
背景
我正在使用 HttpClient 进行双向 TLS。作为客户端,我将客户端证书添加到 WebRequestHandler,然后在新的 HttpClient 中使用该处理程序。
我机器上没有安装证书我已经成功加载到handler中,调试时可以看到(密码也正确)
我正在针对几个不同的测试域进行测试
- https://client.badssl.com/ - this looks for client auth using the cert found 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 class 看起来没有从 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)。我能够让您的代码使用该证书。