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

问题描述 投票:0回答:1

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

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

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);

客户端证书在目标API端读作var clientCertificate = await Request.HttpContext.Connection.GetClientCertificateAsync();

但是,在HTTPS请求期间使用不带(访问)私钥的证书时,目标API不会获得客户端证书(它是null属性中的Request.HttpContext.Connection.ClientCertificate)。

handler.ClientCertificates.Add(new X509Certificate2(@"clientcertificate.crt"));
c# https asp.net-core-2.0 client-certificates
1个回答
1
投票

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

当然,您可以将其作为内容发送;但是如果没有私钥,则无法将其用作客户端证书。这就像通过断言用户名登录系统一样。

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.