编程语言
首页 > 编程语言> > c#-HttpClient未将客户端证书用于相互TLS身份验证

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