gpt4 book ai didi

c# - SoapHttpClientProtocol 和 TLS 1.2 - 客户端和服务器无法通信,因为它们不具备通用算法

转载 作者:太空狗 更新时间:2023-10-29 17:35:42 28 4
gpt4 key购买 nike

SO 上有很多关于此的帖子,我已经搜索过它们,但仍然没有解决方案。我希望有人能指出我正确的方向。

我们现在需要使用 TLS 1.2 连接到远程提供商。所以我安装了 Windows Server 2016 并根据需要进行了配置:

enter image description here enter image description here

我知道远程服务器正在运行 TLS 1.2 并且它支持突出显示的密码。

我们使用由提供商提供的 WSDL 生成的 C# 代理类连接到远程端点 - 在他们将端点转换为 TLS (System.Web.Services.Protocols.SoapHttpClientProtocol) 之前。

当我使用代理连接时出现异常,内部异常是“客户端和服务器无法通信,因为它们不具备通用算法”。

我在任何地方都看不到 ServicePointManager.SecurityProtocol,所以我假设 .NET 正在选择 TLS 1.2,因为它是唯一启用的协议(protocol)?不知道它是如何进行加密的。

有人可以告诉我如何尝试解决这个问题吗?如果可能,我不想重新生成 WSDL 代理类。

最佳答案

如果您的客户端应用程序是针对 .NET Framework 4.5.2 或更低版本编译的,则默认情况下 ServicePointManager.SecurityProtocol初始化为 SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls(仅限 SSL 3.0 和 TLS 1.0),因此它无法连接到需要 TLS 1.2 的远程服务器。

有几种方法可以让您的客户端应用程序使用 TLS 1.2:

  • 针对 .NET Framework 4.6 或更高版本重新编译您的客户端应用程序。 (在 Visual Studio 中,打开项目的属性页,转到应用程序选项卡,然后更改目标框架。)
  • 在客户端机器上,运行 RegEdit.exe,转到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ .NETFramework\v4.0.30319,添加一个 DWORD(32 位)名为 SchUseStrongCrypto 的值,并将其设置为 1。(此标志导致 ServicePointManager.SecurityProtocol 被初始化为 Tls | Tls11 | Tls12。)
  • 当您的客户端应用程序启动时,启用 TLS 1.2:ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;

无需重新生成您的代理类,因为它不负责协商 TLS 协议(protocol)或密码。

关于c# - SoapHttpClientProtocol 和 TLS 1.2 - 客户端和服务器无法通信,因为它们不具备通用算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42407126/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com