我们对WCF API服务进行了一些自动化测试,但我们希望能够在使用之前快速测试添加到生产服务器场的新服务器。我们目前正在以这种方式调用ApiService:
using (var wcfApiServiceClient = new ApiServiceClient())
{
WcfResponse = wcfApiServiceClient.Request(request);
}
但是请求失败并显示消息Could not establish trust relationship for the SSL/TLS secure channel with authority 'servername:12345'.
当我尝试在浏览器中查看wsdl时,我收到了一个不受信任的证书警告,所以我想这是我的问题。我在app.config中试过这些东西:
<endpoint ... bindingConfiguration="BasicHttpBinding_IApiService"
behaviorConfiguration="DisableServiceCertificateValidation" />
<behaviors>
<endpointBehaviors>
<behavior name="DisableServiceCertificateValidation">
<clientCredentials>
<serviceCertificate>
<authentication certificateValidationMode="None"
revocationMode="NoCheck" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<system.net>
<settings>
<servicePointManager checkCertificateName="false" checkCertificateRevocationList="false" />
</settings>
</system.net>
<basicHttpBinding>
<binding name="BasicHttpBinding_IApiService">
<security mode="Transport" >
<transport clientCredentialType="None" proxyCredentialType="None" />
</security>
</binding>
</basicHttpBinding>
我无法更改服务器上的任何内容,但在使用.net调用WCF服务时是否有某种方法可以忽略ssl错误?谢谢!
当您的Api客户端连接到服务器时,服务器正在发回证书,在这种情况下,证书是不可信的=>握手失败。我还尝试从浏览器下载证书,并使用windows mmc.exe工具将其导入客户端计算机的根证书颁发机构。
希望这可以帮助 :)
我找到了解决方案。添加这行代码修复了我的问题。我认为这是一个潜在的安全风险,因为我绕过了证书警告,但由于我正在测试内部应用程序,我并不担心。
System.Net.ServicePointManager.ServerCertificateValidationCallback =
(sender, certificate, chain, sslPolicyErrors) => true;