是否可以在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"));
是否可以在HTTPs请求中发送没有(访问)私钥的客户端证书(例如,通过使用HttpClient)?
当然,您可以将其作为内容发送;但是如果没有私钥,则无法将其用作客户端证书。这就像通过断言用户名登录系统一样。
技术原因是,无论何时在TLS中发送证书,还必须发送必需的签名以证明私钥由发送者持有。如果签名未验证,则收件人终止会话。