我有一个 WCF 服务,它被用作我们正在集成的第三方 asmx 服务的包装器。它正在与之通信的服务是使用 Visual Studio 中的“添加服务引用”对话框添加的。WCF 服务中的代码在单元测试中执行时有效,并且在调试主机应用程序时也有效。
当调试主机在 ASP.NET 开发服务器中运行时,它可以正常工作。当我将应用程序部署到本地 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 颁发的,则该证书是有效的。在我的本地证书存储中查看此证书位于“中间证书颁发机构”选项卡中,但不在“受信任的根证书颁发机构”或“受信任的发布者”中。
编辑:通过将证书添加到“受信任的根证书颁发机构”解决了这个问题,尽管有一个问题。
- 从 ControlPanel -> InternetProperties -> Content -> 证书导入证书。如果您以这种方式安装,它表示它成功,但它不会显示在 winhttpcertcfg 中。
- 通过开始 -> 运行 -> 输入“certmgr.msc”并通过此处安装来导入证书。它会说已成功导入,但 winhttpcertcfg 无法使用证书。
- 通过开始 -> 运行 -> MMC 导入证书并使用证书管理单元确实有效。单击此处查看 Windows XP 的说明。
具体来说,这是有效的:
- 开始 -> 运行 -> MMC
- 文件 -> 添加/删除管理单元
- 单击添加...
- 选择证书并单击添加
- 选择计算机帐户,然后单击下一步
- 选择本地计算机,然后单击完成
- 点击关闭
将证书从控制台根目录导入到这些位置:
- 受信任的根证书颁发机构
- 中级认证机构
- 第三方根证书颁发机构