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

HttpClient isn't using Client Certificate for Mutual TLS Auth

问题

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

背景

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

我机器上没有安装证书我已经成功加载到handler中,调试时可以看到(密码也正确)

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

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

代码

    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)。我能够让您的代码使用该证书。