访问 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>");
有什么帮助吗?
嗯..终于我自己想出了解决办法。
以下是对我真正有帮助的。
- 在 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 中传递这些凭据,但是使用上面的配置应该会很好。
-- 对于和我有类似问题的人,请注意 - 证书设置不是第一个也是唯一的解决方案。如果您的任何问题与我的问题非常相似(具有调用服务的凭据),这也可能是一个解决方案。
我知道这里有很多关于错误 "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>");
有什么帮助吗?
嗯..终于我自己想出了解决办法。
以下是对我真正有帮助的。
- 在 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 中传递这些凭据,但是使用上面的配置应该会很好。
-- 对于和我有类似问题的人,请注意 - 证书设置不是第一个也是唯一的解决方案。如果您的任何问题与我的问题非常相似(具有调用服务的凭据),这也可能是一个解决方案。