关于这一点有很多帖子,我已经搜索过它们,但仍然没有解决方案.我希望有人可以指出我正确的方向.
我们现在要求使用TLS 1.2连接到远程提供程序.所以我安装了Windows Server 2016并根据需要进行了配置:
我知道远程服务器正在运行TLS 1.2并且它支持突出显示的密码.
我们使用由提供程序提供的WSDL生成的C#代理类连接到远程端点 - 然后将它们的结尾转换为TLS(System.Web.Services.Protocols.SoapHttpClientProtocol).
当我使用代理连接时,我得到一个异常,内部异常是"客户端和服务器无法通信,因为它们没有通用算法".
我无法看到ServicePointManager.SecurityProtocol的任何地方,所以我假设.NET正在拿起TLS 1.2,因为它是唯一启用的协议?不知道它是如何做密码的.
有人能告诉我我是如何尝试解决这个问题的吗?如果可能,我不想重新生成WSDL代理类.
Mic*_*Liu 20
如果您的客户端应用程序是针对.NET Framework 4.5.2或更低版本编译的,则默认情况下ServicePointManager.SecurityProtocol被初始化为SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls(仅限SSL 3.0和TLS 1.0),因此它将无法连接到需要TLS的远程服务器1.2.
有几种方法可以让客户端应用程序使用TLS 1.2:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ .NETFramework\v4.0.30319,添加一个名为DWORD(32位)的值SchUseStrongCrypto,并将其设置为1.(此标志导致ServicePointManager.SecurityProtocol初始化为Tls | Tls11 | Tls12.)ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;无需重新生成代理类,因为它不负责协商TLS协议或密码.
| 归档时间: |
|
| 查看次数: |
9449 次 |
| 最近记录: |