繁体   English   中英

无法为具有“xxxxx.com”权限的 SSL/TLS 建立安全通道

[英]Could not establish secure channel for SSL/TLS with authority 'xxxxx.com'

我正在尝试使用 VS2013 和 WCF 针对客户的 SOAP 网络服务编写客户端。 网络服务本身在他们的防火墙后面,所以他们建立了一个我试图联系的代理。 (代理似乎是使用 MuleSoft 的 ESB 实现的,这可能相关,也可能不相关。)

我得到了一个 https: url 和一个用户名/密码。 当我将 url 加载到浏览器中时,系统会提示我输入用户名/密码,然后我看到了 .wsdl。 .wsdl 指定了一个我无法访问的内部 url,但我认为这是针对实际站点的。

当我在 VS2013 中创建一个服务引用时,使用代理 URL,我被提示输入用户名/密码三次,然后我得到一个正确的客户端,app.config 中的设置等。

app.config 中生成的绑定用于具有安全模式传输的 basicHttpBinding,以及指向该无法访问的内部 url 的端点地址。

因此,从生成的绑定中,我:

  1. 用我得到的代理 url 替换无法访问的内部 url。
  2. 将安全模式更改为“TransportWithMessageCredentials”

     <bindings> <basicHttpBinding> <binding name="MyCustomersServiceSoapBinding"> <security mode="TransportWithMessageCredential" > <message clientCredentialType="UserName" /> </security> </binding> <binding name="MyCustomersServiceSoapBinding1" /> </basicHttpBinding> </bindings>
  3. 用用户名和密码替换 ClientCredentials:

    使用 (var client = new MyCustomersServiceClient()) { var loginCredentials = new ClientCredentials(); loginCredentials.UserName.UserName = "用户名"; loginCredentials.UserName.Password = "apassword";

     var defaultCredentials = client.Endpoint.Behaviors.Find<ClientCredentials>(); client.Endpoint.Behaviors.Remove(defaultCredentials); client.Endpoint.Behaviors.Add(loginCredentials); var myData = new MyData { }; var result = client.receiveData(myData);

    }

当我运行它时,我得到一个异常:

无法为具有“xxxxx.com”权限的 SSL/TLS 建立安全通道。

浏览了一下,我发现的大部分内容都表明 ssl 证书存在问题,但我不确定这是否有意义。 如果是这种情况,我希望在通过浏览器查看 .wsdl 时会看到问题。 我认为通过删除默认客户端凭据,我将绕过证书检查。 我看到了一些关于更模糊问题的帖子,这些问题导致了同样的错误消息。

我已经打开了 SOAP 消息日志记录,但这并没有为我提供任何信息。 它显示了失败的传出消息,但没有任何用处。

所以我一直在关注 Fiddler 的流量。 我看到两条消息,一条到“隧道到”的 HTTP 消息,结果为 200,一条 HTTPS 消息到代理 url,结果为 401。

在这一点上,我看到了两种可能性:

  1. 我需要按照错误消息建议的方式安装 SSL 证书,或者
  2. 问题只是我没有以它理解的方式向服务提供用户名/密码,并且它拒绝了我的连接尝试。

我倾向于后者。 我的问题? 我对托管服务的系统一无所知。 我在我认为是 WCF 的常用机制中传递用户名/密码,但它不起作用。

所以,最后,问题:

  • 我是否误导了自己,我确实需要弄乱 SSL 证书?
  • 如果没有,我在 WCF 中如何将用户名/密码传递给由 MuleSoft ESB 托管的 HTTPS 网络服务? (Mule EE Core Extensions/3.5.1,如果有帮助的话)。

不确定我遇到的问题是否与您的问题有相同的原因,但以防万一我可以帮助某人解决这个问题,添加requireClientCertificate=true解决了我的问题:

<bindings>
  <customBinding>
    <binding name="bindingName">
      ...
      <httpsTransport requireClientCertificate="true"/>
    </binding>
  </customBinding>
</bindings>

我有同样的错误消息,但我使用的 Web 服务是通过 HTTPS 的,并且需要 SSL 证书作为身份验证。

许多端点最近一直在禁用 TLSV1.0 和 TLSV1.1

尝试:

CURL https://<<service host>> -v -TLSV1.0

CURL https://<<service host>> -v -TLSV1.2

例如, https: //www.comodo.com 不允许 TLSV1.0 或 TLSV1.1,但允许 TLSV1.2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM