C# 无法为具有“xxxxx.com”权限的SSL/TLS建立安全通道
我正在尝试使用VS2013和WCF针对客户的SOAP Web服务编写客户机。Web服务本身就在他们的防火墙后面,所以他们已经建立了一个代理,我正试图联系它。代理似乎是使用MuleSoft的ESB实现的,这可能相关,也可能无关 我得到了一个https:url和一个用户名/密码。当我将url加载到浏览器中时,系统会提示我输入用户名/密码,然后我会看到.wsdl。wsdl指定了一个我无法访问的内部url,但我认为这是针对实际站点的 当我在VS2013中使用代理URL创建服务引用时,系统会提示我输入三次用户名/密码,然后我会获得一个正确的客户端,并在app.config中进行设置,等等 app.config中生成的绑定用于具有安全模式传输的basicHttpBinding,以及指向无法访问的内部url的端点地址 因此,根据生成的绑定,我: 用我得到的代理url替换无法访问的内部url。 将安全模式更改为TransportWithMessageCredentialsC# 无法为具有“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创建服务引用时,系统会提示我输入三次
<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,当我查看页面信息并查找证书时,我看到这个证书是可以的。所以,是的,错误消息看起来确实有误导性。请记住一个常见问题。他们之间有代理人吗?