C# 使用客户端证书通过HttpClient进行HTTPS调用,该客户端证书无权访问私钥

C# 使用客户端证书通过HttpClient进行HTTPS调用,该客户端证书无权访问私钥,c#,https,asp.net-core-2.0,client-certificates,C#,Https,Asp.net Core 2.0,Client Certificates,是否可以在HTTPs请求中发送没有(访问)私钥的客户端证书(例如通过使用HttpClient) 通过以下使用带有私钥的客户端证书的HTTPS请求实现,可以访问目标API,并且客户端证书可用 var handler = new HttpClientHandler(); handler.ClientCertificates.Add(new X509Certificate2(@"clientcertificate.pfx", "password")); var client = new HttpCli

是否可以在HTTPs请求中发送没有(访问)私钥的客户端证书(例如通过使用HttpClient)

通过以下使用带有私钥的客户端证书的HTTPS请求实现,可以访问目标API,并且客户端证书可用

var handler = new HttpClientHandler();
handler.ClientCertificates.Add(new X509Certificate2(@"clientcertificate.pfx", "password"));
var client = new HttpClient(handler);
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, "https://url");
var result = await client.SendAsync(httpRequestMessage);
客户端证书被读取为
var clientCertificate=wait Request.HttpContext.Connection.GetClientCertificateAsync()

但是,当在HTTPS请求期间使用没有(访问)私钥的证书时,目标API不会获取客户端证书(在
请求.HttpContext.Connection.ClientCertificate
属性中为
null

是否可以在HTTPs请求中发送没有(访问)私钥的客户端证书(例如通过使用HttpClient)

当然,您可以将其作为内容发送;但如果没有私钥,则不能将其用作客户端证书。这就像只需声明一个用户名就可以登录到一个系统

技术原因是,无论何时在TLS中发送证书,都必须发送所需的签名,以证明私钥由发送方持有。如果签名未验证,则收件人将终止会话

handler.ClientCertificates.Add(new X509Certificate2(@"clientcertificate.crt"));