Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 服务器不接受HttpClientHandler上的证书集_C#_.net_Ssl_X509certificate - Fatal编程技术网

C# 服务器不接受HttpClientHandler上的证书集

C# 服务器不接受HttpClientHandler上的证书集,c#,.net,ssl,x509certificate,C#,.net,Ssl,X509certificate,情况如下: 用户使用证书身份验证连接到Web服务器,服务器正在调用其他服务,我希望将在服务器上收到的证书转发/发送到通过服务对用户进行身份验证的服务器 我正在Web服务器上使用以下代码在HttpClientHandler上设置客户端证书,并且在调试模式下可以看到客户端证书在下面的HttpContext中有效 X509Certificate2 cert = new X509Certificate2(HttpContext.Request.ClientCertificate.Certificate)

情况如下: 用户使用证书身份验证连接到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上同一网站内的应用程序运行,您网站的客户端将不是您服务的客户端;相反,您的站点将成为您的服务客户。正如您所说,“[web]服务器[(即站点)]正在呼叫其他服务”

您的站点发出的服务请求将具有自己的上下文,与发送到您的站点并触发它们的请求不同


我怀疑您是否希望在您的站点的相应服务请求中重用您站点请求中的客户端证书;听起来你只是想让你的网站调用你的服务。但是,如果您这样做了,您可以为客户端证书身份验证设置服务(例如,使用WCF服务进行此设置),从发送到站点的每个请求中获取客户端证书,然后在站点发送到服务的每个相关请求中使用它。

My bad。这是行不通的。中间的服务器不能使用证书来与第二个服务器建立安全连接。您的问题标题是HttpClientHandler,但是您的代码演示了WebRequestHandler,它导致混淆,因此应该编辑,所以人们搜索HttpClientHandlers不会在这里结束。