C# SoapHttpClientProtocol和TLS 1.2-客户端和服务器无法通信,因为它们没有通用的算法
有很多关于这方面的帖子,我已经搜索过了,但仍然没有解决办法。我希望有人能给我指出正确的方向 我们现在需要使用TLS1.2连接到远程提供商。因此,我安装了Windows Server 2016,并根据需要进行了配置: 我知道远程服务器正在运行TLS 1.2,并且它支持突出显示的密码 我们使用由提供者提供的WSDL生成的C#代理类连接到远程端点,然后将其端转换为TLS(System.Web.Services.Protocols.SoapHttpClientProtocol) 当我使用代理连接时,我得到一个异常,内部异常是“客户机和服务器无法通信,因为它们没有通用的算法” 我看不到ServicePointManager.SecurityProtocol的任何地方,所以我假设.NET正在接受TLS 1.2,因为它是唯一启用的协议?不知道它是怎么做的密码C# SoapHttpClientProtocol和TLS 1.2-客户端和服务器无法通信,因为它们没有通用的算法,c#,ssl,wsdl,C#,Ssl,Wsdl,有很多关于这方面的帖子,我已经搜索过了,但仍然没有解决办法。我希望有人能给我指出正确的方向 我们现在需要使用TLS1.2连接到远程提供商。因此,我安装了Windows Server 2016,并根据需要进行了配置: 我知道远程服务器正在运行TLS 1.2,并且它支持突出显示的密码 我们使用由提供者提供的WSDL生成的C#代理类连接到远程端点,然后将其端转换为TLS(System.Web.Services.Protocols.SoapHttpClientProtocol) 当我使用代理连接时,
有人能告诉我如何着手解决这个问题吗?如果可能,我不想重新生成WSDL代理类。如果您的客户端应用程序是根据.NET Framework 4.5.2或更低版本编译的,则默认情况下初始化为
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\u LOCAL\u machine\SOFTWARE\Microsoft\
,添加名为.NETFramework\v4.0.30319
的DWORD(32位)值,并将其设置为1。(此标志导致SchUseStrongCrypto
初始化为ServicePointManager.SecurityProtocol
)Tls | Tls11 | Tls12
- 启动客户端应用程序时,打开TLS 1.2:
ServicePointManager.SecurityProtocol |=SecurityProtocolType.Tls12代码>
无需重新生成代理类,因为它不负责协商TLS协议或密码。从连接到web服务的网站删除TLS 1.0时,我遇到了此问题。 对我来说,它是一个停留在web服务的web.config中的4.5.1上的httpRuntime。该服务已更改为4.6.1,将web.config中的httpRuntime版本更改为4.6.1修复了该问题。
该网站试图将TLS设置为web服务,但只有1.2和1.1可用。web服务仅支持1.0,因此导致错误 您正在运行哪个版本的.NET framework?你的应用程序是如何配置的?“我在任何地方都看不到ServicePointManager.SecurityProtocol”是什么意思?这对于TLS1.2支持来说至关重要:完美@Michael。我已经更改为针对4.6.1进行编译,但也意识到我必须将httpRuntime targetFramework更改为4.6.1,因为连接最终是由WebApi进行的,我相信这可以避免注册表更改?进行httpRuntime更改使连接TLS1.2。@MichaelLiu我已经完成了所有这些,但我的sslStream仍然失败。对于SSLstream,是否有任何特定的内容需要更新?是否有办法通过web/app config文件进行更新?@Peru,关于SSLstream,“使用
SSLstream AuthenticateTasClient(String,X509CertificateCollection,SslProtocols,Boolean)的应用程序可以将SslProtocols
值设置为…”(SslProtocols)0x00000C000。