服务器不接受在HttpClientHandler上设置的证书

本文关键字:设置 证书 HttpClientHandler 不接受 服务器 | 更新日期: 2023-09-27 17:57:25

场景如下:用户使用证书身份验证连接到Web服务器,服务器正在调用其他服务,我想将我在服务器上收到的证书转发/发送给通过服务对用户进行身份验证。

我在Web服务器上使用以下代码在HttpClientHandler上设置客户端证书,在调试模式下,我可以看到客户端证书在下面的HttpContext中是有效的。

X509Certificate2 cert = new X509Certificate2(HttpContext.Request.ClientCertificate.Certificate);
var httpClientHandler = new WebRequestHandler();
httpClientHandler.UseDefaultCredentials = true;
httpClientHandler.PreAuthenticate = true;
httpClientHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
httpClientHandler.ClientCertificates.Add(cert);

当我在服务代码中收到请求时,证书已经被剥离(或者可能是上面的代码从未发送过它)。有什么想法吗?上面的代码应该有什么不同?

仅供参考,web服务器和服务都在同一台机器上运行。更准确地说,服务作为IIS 上同一网站内的应用程序运行

服务器不接受在HttpClientHandler上设置的证书

在您的场景中,您站点的客户端将不是您服务的客户端;相反,您的网站将成为您服务的客户。正如您所说,"[web]服务器[(即站点)]正在呼叫其他服务"。

您的网站发出的服务请求将有自己的上下文,与发送到您的网站的触发请求不同。

我怀疑你是否想在你的网站的相应服务请求中重用来自对你的网站请求的客户端证书;听起来你只是想让你的网站呼叫你的服务。但是,如果你这样做了,你可以为客户端证书身份验证设置你的服务(例如,一个相关的SO问题涉及到使用WCF服务来做这件事),从每个到你的站点的请求中获得客户端证书,然后在你的站点发送给你的服务的每个相关请求中使用它。