访问asmx服务引发错误无法为具有权限的SSL/TLS建立安全通道-不过是从SOAPUI开始工作的



我知道有很多问答;由于这里的错误"无法与权威机构建立SSL/TLS的安全通道"主题,但我无法找到问题的答案或令人信服的原因。

以下是我的问题:我有一个供应商服务(soap服务(,它受到Username/Pwd身份验证(我假设是基本身份验证(的保护。当我尝试使用提供用户名/密码的SOAP UI工具来测试此服务时,它工作得很好,没有任何问题。

但当我在我的c#代码(控制台应用程序(中使用相同的代码时,它会抛出上面的错误

无法使用权限"…."为SSL/TLS建立安全通道

在研究了这个错误后,我还将逻辑设置如下:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

我试着用SSL3、TLS、TLS1、TLS2等所有选项和各种组合来尝试以上操作,但对于任何这样的选项,我都没有得到错误,但同样,它没有任何效果。没有错误,没有响应。

当代码在SOAP UI中正常工作时,可能的原因是什么?

经过几次进一步的研究,我还注意到Fiddler DO_NOT_TRUST相关证书,并将它们从我的机器中删除。此外,我正在开发中的VS 2017上使用Win 10机器上的这款控制台应用程序。删除后,当我再次尝试时,我现在得到以下错误:

System.ArgumentException HResult=0x80070057消息=提供的URI方案"https"无效;应为"http"。参数名称:viaSource=System.ServiceModel

更新-2:我确实将CERT安装到了我的本地机器Trusted root上,并有下面的行可以准确地使用证书,但仍然没有运气

client.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.Root, X509FindType.FindBySerialNumber, findValue: "<serial-number>");

有什么帮助吗?

嗯。。最后我自己想出了解决办法。

以下是真正帮助过我的。

  1. 在Chrome/IE中查找此asmx的开发工具。它确实显示了以下内容Chrome中服务的"安全"选项卡

这告诉我,它在TLS1.2上,无法弄清楚SOAP UI如何在没有计算机存储中的CERT的情况下管理它。

除了通过clientCredentials,我还添加了

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

绑定配置:

<binding name="mysoapCredBinding">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>

尽管如此,我在商店里安装了证书,但我认为上面的证书根本不需要。当我开始研究上述错误时,这让我很棘手,他们中的大多数人都把我引向了CERT问题,这就是困惑。我们也不需要在HEADERS中明确地传递这些cred,但有了上面的配置,应该会做得很好。

--对于像我这样有类似问题的人,请注意-CERTIFICATE设置不是第一个也是唯一的解决方案。如果您的任何问题与我的问题非常相似(具有调用服务的凭据(,那么这个问题也可能是一个解决方案。

最新更新