c# - HttpClient 没有使用客户端证书进行相互 TLS 身份验证

标签 c# authentication dotnet-httpclient mutual-authentication

问题

为什么我的 HttpClient 实例不使用我提供的客户端证书进行相互验证?

背景

我正在使用 HttpClient 进行双向 TLS。作为客户端,我将客户端证书添加到 WebRequestHandler,然后在新的 HttpClient 中使用该处理程序。

证书没有安装在我的机器上。我已经成功将它加载到处理程序中,并且在调试时可以看到它(密码也是正确的)。

我正在针对几个不同的测试域进行测试

两个测试应用均显示未发送证书。

代码

    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/

相关文章:

java - 如何在 SSL 配置的 tomcat 中缓存和更新 CRL(证书撤销列表)/OCSP 响应?

asp.net - HttpClient 可以有多个 HTTP 消息处理程序吗?

c# - 让 HttpClient 使用 app.config defaultProxy

c# - 使用异步存储库模式 - 无法访问已处置的对象

c# - 更新 Lucene 索引时出现异常

c# - 发送内联 MHTML

c# - 使用 HttpClient 的随机 401 未授权错误

c# - MvcHttpHandler 似乎没有实现 IHttpHandler

python - 用于用户身份验证的 CherryPy 自定义工具

go - 如何处理基于时间的一次性密码的 26 字节 secret ?