.net HttpRequest with ssl:在IIS下运行时无法识别证书

.net HttpRequest with ssl:在IIS下运行时无法识别证书,.net,iis,ssl,httpclient,.net,Iis,Ssl,Httpclient,我们运行一个soap服务应用程序(WSE3,但也符合WCF)。 除了作为服务本身,该应用程序还使用带有ssl的HttpRequest实例从第三方检索信息。 当使用单元测试运行HttpRequest实例时,第三方服务识别给定的证书,并且工作正常。 但是,当我们的soap服务应用程序在IIS中运行时,第三方不再识别证书 在IIS下运行HttpClient时有什么不同?它是否更改了我使用HttpRequest发送的请求?如何设置此项(配置?)您似乎没有足够的权限在IIS中使用您的证书,您可以使用Mic

我们运行一个soap服务应用程序(WSE3,但也符合WCF)。 除了作为服务本身,该应用程序还使用带有ssl的HttpRequest实例从第三方检索信息。 当使用单元测试运行HttpRequest实例时,第三方服务识别给定的证书,并且工作正常。 但是,当我们的soap服务应用程序在IIS中运行时,第三方不再识别证书


在IIS下运行HttpClient时有什么不同?它是否更改了我使用HttpRequest发送的请求?如何设置此项(配置?)

您似乎没有足够的权限在IIS中使用您的证书,您可以使用Microsoft Windows HTTP Services证书配置工具(WinHttpCertCfg.exe)安装客户端证书并为其他用户帐户(如网络服务帐户)授予对客户端证书的访问权限

要了解更多有关此的信息,请访问

给了我一个解决问题的办法。 Asp.net检查服务器证书的名称“CN=…”是否与服务器的域名匹配

因此,如果外部服务器的证书不符合该规则,则来自asp.net应用程序的https请求将不信任该连接。因此,如果您没有机会更改外部服务器的配置(第三方),则必须禁用该检查

可以通过向asp.net的(主要)静态ServicePointManager类传递自定义委托来关闭它

我将该位放入https连接器类的静态构造函数中: (但是,对于整个应用程序中的任何https连接,该检查将被关闭)


亲切问候,C.

您好,谢谢您的回复。事实上,我们也遇到了这个问题。从我们得到的错误中可以明显看出(“句柄无效”)。我们可以通过向IIS用户授予更多权限来解决这个问题(就像您建议的那样)。当前的问题是请求实际到达第三方服务器但被拒绝的情况更进一步。我们现在得到的是:“基础连接已关闭:无法为SSL/TLS安全通道建立信任关系。”
public class MyExternalSslServiceConnector : IMyExternalServiceConnector
{
protected string ServiceUrl { get; set; }
public X509Certificate2 SslCertificate { get; set; }

static MyExternalSslServiceConnector()
{
    ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
}

public MyExternalSslServiceConnector(string myExternalServiceUrl, X509Certificate2 sslCertificate)
{
    this.ServiceUrl = myExternalServiceUrl;
    this.SslCertificate = sslCertificate;
}

// further implementation using HttpRequest class [...]
}