我有一台运行十几个.NET Framework 4.0 WebForms应用程序的Windows Server 2008 R2服务器,我需要禁用TLS 1.0和更低版本。当我这样做时,所有安全连接都将失败,因此我不得不重新启用TLS 1.0。有什么方法可以在Framework 4.0环境中使用TLS 1.2?也许我缺少什么?
另外,由于我们使用的CMS版本的限制,我们目前无法升级框架。
Answers:
我发现改变这一点的唯一方法是直接在代码上:
在您设置的应用一开始
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
你应该包括system.net
课程
我在调用Web服务之前就这样做了,因为我们也必须阻止tls1。
ServicePointManager.SecurityProtocol = (SecurityProtocolType) 3072;
尽管它可能需要对运行时进行完全修补/更新,但这将在4.0中起作用。
如果您无法将属性添加到system.net
类库。
然后,添加Global.asax文件:
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; //TLS 1.2
ServicePointManager.SecurityProtocol = (SecurityProtocolType)768; //TLS 1.1
您可以在开始的函数中使用它:
ServicePointManager.SecurityProtocol = (SecurityProtocolType)768 | (SecurityProtocolType)3072;
而且,它对于STRIPE
仅支持TLS 1.1,TLS 1.2的支付网关很有用。
编辑:
在我的服务器上是否安装了.NET 4.5的许多问题之后……这是Registry
我的生产服务器上的屏幕截图:
我只安装了.NET Framework 4.0。
ServicePointManager.SecurityProtocol = DirectCast(3072, SecurityProtocolType) 'TLS 1.2
在您的注册表中进行以下更改,它应该可以工作:
1.). NET Framework强加密注册表项
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
2.)安全通道(Schannel)TLS 1.2注册表项
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001
根据这个,你需要安装.NET 4.5。有关更多详细信息,请访问网页。要点是,在您安装.NET 4.5之后,您的4.0应用程序将使用4.5 System.dll。您可以通过两种方式启用TLS 1.2:
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319: SchUseStrongCrypto
为DWORD 1
有两种可能的情况,
如果您的应用程序在.net Framework 4.5或更低版本上运行,并且可以轻松地将新代码部署到生产环境,则可以使用以下解决方案。
您可以在进行API调用之前添加以下代码行,
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // .NET 4.5
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // .NET 4.0
如果您无法部署新代码,并且想要使用生产环境中存在的相同代码来解决问题,则有两个选择。
选项1:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
然后创建带有扩展名的文件.reg
并安装。
注意:此设置将在注册表级别应用,并且适用于该计算机上存在的所有应用程序,如果您想限制为仅单个应用程序,则可以使用Option 2
选项2:这可以通过更改配置文件中的某些配置设置来完成。您可以在配置文件中添加。
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false"/>
</runtime>
要么
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=false"
</runtime>
我在Windows安装的.NET Framework 4.0上遇到相同的问题。
我通过安装.NET Framework 4.6.2解决了此问题。
或者,您可以下载最新的软件包以进行尝试。
SecurityProtocolType
没有.NET 4.0的项目,这不起作用Tls12
。