C# HttpClient是';t使用客户端证书进行相互TLS身份验证 问题:
为什么我的HttpClient实例不使用我提供的客户端证书进行相互身份验证 背景 我正在使用HttpClient来执行相互TLS。作为客户端,我将向WebRequestHandler添加客户端证书,然后在新的HttpClient中使用该处理程序 证书未安装在我的计算机上。我已成功将其加载到处理程序中,调试时可以看到它(密码也正确) 我正在测试几个不同的测试域C# HttpClient是';t使用客户端证书进行相互TLS身份验证 问题:,c#,authentication,dotnet-httpclient,mutual-authentication,C#,Authentication,Dotnet Httpclient,Mutual Authentication,为什么我的HttpClient实例不使用我提供的客户端证书进行相互身份验证 背景 我正在使用HttpClient来执行相互TLS。作为客户端,我将向WebRequestHandler添加客户端证书,然后在新的HttpClient中使用该处理程序 证书未安装在我的计算机上。我已成功将其加载到处理程序中,调试时可以看到它(密码也正确) 我正在测试几个不同的测试域 -这将使用找到的证书查找客户端身份验证。这是我目前使用的证书 -此证书只会将提供的任何客户端证书吐出 两个测试应用均显示未发送证书 代
- -这将使用找到的证书查找客户端身份验证。这是我目前使用的证书
- -此证书只会将提供的任何客户端证书吐出
X509Certificate2类看起来没有从PEM证书读取私钥
var clientCert = new X509Certificate2("badssl.com-client.pem", "badssl.com");
if(!clientCert.HasPrivateKey)
throw new ApplicationException("Cert doesn't contain private key");
抛出一个错误
就Badsl.com而言,他们确实有一个PKCS#12证书(又名PFX)。我可以让您的代码使用该证书。除非证书与服务器在握手过程中发送的CA列表匹配,否则不会发送该证书。因此,请确保它拥有正确的根权限。还要确保您使用的副本实际上包含私钥。谢谢,@JohnW。问题是私钥,但基于我对双方TLS的(有限的)理解,我不认为根权限需要匹配客户端证书。我的轶事经验表明,安装自签名证书时会发送证书。这取决于服务器的配置。在握手过程中,它可以发回CA的列表,客户端应该只使用属于它们的证书进行响应。但它也可以发回一个空列表,客户端可以发送任何内容。正是这些细节使得故障排除变得如此困难。
var clientCert = new X509Certificate2("badssl.com-client.pem", "badssl.com");
if(!clientCert.HasPrivateKey)
throw new ApplicationException("Cert doesn't contain private key");