c# - 无法使用权​​限 'xxxxx.com' 为 SSL/TLS 建立安全通道

标签 c# wcf ssl soap mule

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

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

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

app.config 中生成的绑定(bind)用于安全模式传输的 basicHttpBinding,以及指向该不可访问的内部 url 的端点地址。

因此,根据生成的绑定(bind),我:

  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 = "密码";

    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);
    

当我运行它时,出现异常:

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

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

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

所以我一直在看Fiddler中的流量。我看到两条消息,一条指向“Tunnel to”的 HTTP 消息,结果为 200,一条指向代理 URL 的 HTTPS 消息,结果为 401。

此时,我看到了两种可能性:

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

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

所以,最后,问题:

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

最佳答案

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

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

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

关于c# - 无法使用权​​限 'xxxxx.com' 为 SSL/TLS 建立安全通道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26150847/

相关文章:

c# - 如果过去 Y 秒内有 X 个元素,则弹出?

c# - 在 JavaScript 中将 C# .NET DateTime.ticks 转换为天/小时/分钟

c# - 您可以在 WCF 服务下运行 WebBrowser 吗?

c# - 同时进行两个异步调用后的 WCF 问题

asp.net-mvc-2 - 如何使用 SSL 页面创建 Cookie?

c# - 通知 WPF DataGrid 更改

c# - 定期从 EF 中的多个线程更新实体

c# - 在 WCF 服务和独立线程之间进行通信的最佳方式是什么?

ssl - "SSL23_GET_SERVER_HELLO:reason(1112)"服务器端(Openshift)的解决方法?

mysql - SSL 证书上的 Google 云 (GCP) SQL 限制