使用ssl的HttpRequest:在IIS下运行时无法识别证书

时间:2011-03-18 09:10:33

标签: .net iis ssl httpclient

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

在IIS下运行HttpClient时有何不同?它是否会改变我使用HttpRequest发送的请求?如何直接设置(配置?)?

2 个答案:

答案 0 :(得分:1)

This article让我知道如何解决问题。 Asp.net检查服务器证书的名称“CN = ...”是否与服务器的域名匹配。

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

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

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

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 [...]
}

亲切的问候,C。

答案 1 :(得分:0)

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

要了解有关此this MSDN article的详情。