在特定服务器上调用 WCF 服务时,“无法为具有权限的 ssl/tls 建立安全通道”

Posted

技术标签:

【中文标题】在特定服务器上调用 WCF 服务时,“无法为具有权限的 ssl/tls 建立安全通道”【英文标题】:"could not establish secure channel for ssl/tls with authority" when calling WCF service on specific server 【发布时间】:2019-08-27 19:21:53 【问题描述】:

我们围绕 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 错误?谢谢!

【问题讨论】:

【参考方案1】:

当您的 Api 客户端连接到服务器时,服务器正在发回证书,在这种情况下,证书是不受信任的 => 握手失败。我还将尝试从浏览器下载证书并使用 windows mmc.exe 工具将其导入客户端计算机的根证书颁发机构。

希望这会有所帮助:)

【讨论】:

【参考方案2】:

我找到了解决方案。添加这行代码解决了我的问题。我认为这是一个潜在的安全风险,因为我正在绕过证书警告,但由于我正在测试内部应用程序,所以我并不担心。

System.Net.ServicePointManager.ServerCertificateValidationCallback =
            (sender, certificate, chain, sslPolicyErrors) => true;

【讨论】:

以上是关于在特定服务器上调用 WCF 服务时,“无法为具有权限的 ssl/tls 建立安全通道”的主要内容,如果未能解决你的问题,请参考以下文章

远程客户端上的调用方法

从作为 LocalSystem 运行的 WCF 托管服务以特定用户身份启动进程

从 WCF 服务调用进程以在 WCF 服务帐户下运行

从 MVC 项目调用 WCF 服务时出错

MVC 中的下拉菜单未加载 WCF 服务调用的编辑函数上的数据

每次调用端点时,自托管 WCF 服务全局对象似乎都是新创建的