Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法为具有“xxxxx.com”权限的SSL/TLS建立安全通道_C#_Wcf_Ssl_Soap_Mule - Fatal编程技术网

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

C# 无法为具有“xxxxx.com”权限的SSL/TLS建立安全通道,c#,wcf,ssl,soap,mule,C#,Wcf,Ssl,Soap,Mule,我正在尝试使用VS2013和WCF针对客户的SOAP Web服务编写客户机。Web服务本身就在他们的防火墙后面,所以他们已经建立了一个代理,我正试图联系它。代理似乎是使用MuleSoft的ESB实现的,这可能相关,也可能无关 我得到了一个https:url和一个用户名/密码。当我将url加载到浏览器中时,系统会提示我输入用户名/密码,然后我会看到.wsdl。wsdl指定了一个我无法访问的内部url,但我认为这是针对实际站点的 当我在VS2013中使用代理URL创建服务引用时,系统会提示我输入三次

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

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

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

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

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

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

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

使用var client=new MyCustomerServiceClient { var loginCredentials=新客户端凭据; loginCredentials.UserName.UserName=ausername; 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

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

我需要按照错误消息的建议安装SSL证书,或者 问题很简单,我没有以服务理解的方式向服务提供用户名/密码,它拒绝了我的连接尝试。 我倾向于后者。我的问题?我对托管服务的系统一无所知。我在传递用户名/密码,我认为这是WCF的常用机制,但它不起作用

最后,问题是:

我是否误导了自己,我真的需要摆弄SSL证书? 如果没有,我在WCF中如何将用户名/密码传递给由MuleSoft托管的HTTPS Web服务 ESB?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://-v-TLSV1.0

CURL https://-v-TLSV1.2


例如,不允许TLSV1.0或TLSV1.1,但允许TLSV1.2。

看起来服务证书不可信。使用浏览器检查url并查看是否为可信证书如果证书有问题,为什么在浏览器中查看.wsdl时看不到问题?这就是我要求使用浏览器检查的原因。如果浏览器显示证书没有问题,那么问题应该在应用程序端。打开ssl隧道是在对客户端进行身份验证之前完成的,因此您应该关注这一点来查找问题。当我将Web服务加载到浏览器中时,我看到了.wsdl,当我查看页面信息并查找证书时,我看到这个证书是可以的。所以,是的,错误消息看起来确实有误导性。请记住一个常见问题。他们之间有代理人吗?