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

Jus*_*elf 5 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();
Run Code Online (Sandbox Code Playgroud)

Ada*_*m L 3

X509Certificate2 类看起来没有从 PEM 证书中读取私钥。

    var clientCert = new X509Certificate2("badssl.com-client.pem", "badssl.com");
    if(!clientCert.HasPrivateKey)
        throw new ApplicationException("Cert doesn't contain private key");
Run Code Online (Sandbox Code Playgroud)

是否抛出错误。

就 badssl.com 而言,他们确实有可用的 PKCS #12 证书(又名 PFX)。我能够让你的代码与该证书一起使用。