访问 asmx 服务抛出错误无法使用权​​限为 SSL/TLS 建立安全通道 - 尽管从 SOAPUI 工作

accessing asmx service throwing error could not establish secure channel for SSL/TLS with authority - works from SOAPUI though

我知道这里有很多关于错误 "could not establish secure channel for SSL/TLS with authority" 主题的问答,但我无法为我的问题找到答案或令人信服的理由。

下面是我的问题: 我有一个供应商服务(肥皂服务),它受到 Username/Pwd 身份验证的保护(我假设是基本身份验证)。当我尝试使用提供 username/password 的 SOAP UI 工具测试此服务时 - 它工作正常,没有任何问题。

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

could not establish secure channel for SSL/TLS with authority '....'

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

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

我尝试使用所有选项(如 SSL3、TLS、TLS1、TLS2 和各种组合)尝试上述操作,但对于任何此类组合,我都没有收到错误,但同样,它没有任何效果。没有错误,没有反应。

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

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

System.ArgumentException HResult=0x80070057 Message=The provided URI scheme 'https' is invalid; expected 'http'. Parameter name: via Source=System.ServiceModel

更新 2: 我确实将 CERT 安装到我的本地计算机 Trusted root 并具有以下几行以准确使用证书但仍然没有运气

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

有什么帮助吗?

嗯..终于我自己想出了解决办法。

以下是对我真正有帮助的。

  1. 在 Chrome/IE 中查找了此 asmx 的开发人员工具。它确实显示了以下内容 Security tab in Chrome for the service

这告诉我它在 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 中传递这些凭据,但是使用上面的配置应该会很好。

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