c#-HttpClient未将客户端证书用于相互TLS身份验证
作者:互联网
题
为什么我的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).我能够使您的代码与该证书一起使用.
标签:authentication,dotnet-httpclient,mutual-authentication,c 来源: https://codeday.me/bug/20191108/2007468.html