在IIS中运行时,WCF服务无法连接到Web服务

时间:2012-07-17 17:20:18

标签: .net wcf web-services ssl iis-5

我有一个WCF服务,它被用作我们正在集成的第三方asmx服务的包装器。使用Visual Studio中的“添加服务引用”对话框添加了与之通信的服务。 WCF服务中的代码在单元测试中执行时有效,并且在调试Host应用程序时也有效。

调试主机在ASP.NET Development Server中运行时,它可以正常运行。当我将应用程序部署到本地IIS实例(与开发机器,IIS 5.1相同)时,服务将启动并运行,但在连接第三方asmx端点时会抛出此错误:

System.ServiceModel.Security.SecurityNegotiationException: 
Could not establish trust relationship for the SSL/TLS secure channel with
authority 'xxxxx.thirdparty.com'. ---> System.Net.WebException: The underlying
connection was closed: Could not establish trust relationship for the SSL/TLS
secure channel. ---> System.Security.Authentication.AuthenticationException: 
The remote certificate is invalid according to the validation procedure.

这些是服务端点的配置文件中的设置:

<basicHttpBinding>
  <binding name="ServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
    useDefaultWebProxy="false" proxyAddress="http://[internalWebProxyHere]">
    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
    <security mode="Transport">
      <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
      <message clientCredentialType="UserName" algorithmSuite="Default"/>
    </security>
  </binding>
</basicHttpBinding>

该服务在visual studio中有效,但在部署到IIS后却无效。我该怎么做才能调试AuthenticationExceptions?

编辑:客户端端点如下所示:

<endpoint address="https://'xxxxx.thirdparty.com/thirdpartyendpoint.asmx" 
    binding="basicHttpBinding" bindingConfiguration="ServiceSoap" 
    contract="eContracting.ServiceSoap" name="ServiceSoap"
    behaviorConfiguration="Behavior"/>

我尝试添加端点行为来禁用证书验证,但这没有帮助:

<behavior name="Behavior">
  <clientCredentials>
    <serviceCertificate>
      <authentication certificateValidationMode="None"/>
     </serviceCertificate>
    </clientCredentials>
</behavior>

如果它还有助于第三方证书由Rapid SSL CA颁发,则证书有效。查看我的本地证书存储区,此证书位于“中间证书颁发机构”选项卡中,但不在“受信任的根证书颁发机构”或“受信任的发布者”中。

编辑:通过将证书添加到“受信任的根证书颁发机构”来解决问题,尽管有一个问题。

  1. 从ControlPanel导入证书 - &gt; InternetProperties - &gt;内容 - &gt;证书。如果你以这种方式安装它会说它成功但它没有出现在winhttpcertcfg中。
  2. 通过开始导入证书 - &gt;跑 - &gt;键入'certmgr.msc'并通过此处安装。它会说导入成功,但winhttpcertcfg无法使用证书。
  3. 按开始导入证书 - &gt;跑 - &gt; MMC和使用证书snapin确实有效。单击here以查看Windows XP的说明。
  4. 具体来说,这是有效的:

    1. 开始 - &gt;运行 - &gt; MMC
    2. 文件 - &gt;添加/删除管理单元
    3. 点击添加...
    4. 选择“证书”,然后单击“添加”
    5. 选择计算机帐户,然后单击下一步
    6. 选择本地计算机,然后单击完成
    7. 点击关闭
    8. 将证书从控制台根目录导入这些位置:

      • 受信任的根证书颁发机构
      • 中级证书颁发机构
      • 第三方根证书颁发机构

1 个答案:

答案 0 :(得分:2)

尝试在服务web.config中启用跟踪。通过将switchValue设置为Verbose,您可能能够找到更详细的错误。也许证书有问题。

Configure and Enable Tracing

您也可以尝试将服务证书验证模式设置为无。

X509ServiceCertificateAuthentication.CertificateValidationMode Property

另一种方法是将Rapid SSL CA导入本地计算机上的受信任的根证书颁发机构。我怀疑cassini没有验证或忽略了证书。

另一个可能的问题是,IIS正在为您的服务运行的帐户可能没有从证书存储中读取的权限。