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

时间:2014-04-07 16:11:05

标签: c# .net ssl x509certificate

方案如下: 用户使用证书身份验证连接到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);

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

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

1 个答案:

答案 0 :(得分:1)

在您的方案中,您网站的客户将不再是您的服务'客户;相反,您的网站将是您的服务'客户。如你所说," [网络]服务器[(即网站)]正在调用其他服务"。

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

我怀疑您是否希望在您网站的相应服务请求中重复使用来自您网站的请求的客户端证书;听起来你只是打算让你的网站打电话给你的服务。但是,如果您这样做,则可以设置服务以进行客户端证书身份验证(例如a related SO question说到使用WCF服务执行此操作),从每个请求获取客户端证书到您的站点,然后在每个请求中使用它您网站向您的服务发送的相关请求。

相关问题