我有一个Windows Server 2008 R2服务器运行十几个.NET Framework 4.0 WebForms应用程序,我需要禁用TLS 1.0和更低版本。当我这样做时,所有安全连接都失败,我被迫重新启用TLS 1.0。有没有办法在框架4.0环境中使用TLS 1.2?也许我错过了什么?此外,由于我们使用的CMS版本的限制,我们无法在这个时候升级框架。
5us2dqdw1#
如果您无法将属性加入至system.net类别库。然后,添加全局.asax文件:
system.net
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; //TLS 1.2 ServicePointManager.SecurityProtocol = (SecurityProtocolType)768; //TLS 1.1
字符串你可以在一个函数中使用它,在开始行:
ServicePointManager.SecurityProtocol = (SecurityProtocolType)768 | (SecurityProtocolType)3072;
型而且,它对只支持TLS 1.1、TLS 1.2的STRIPE支付网关非常有用。
STRIPE
**编辑:**在回答了许多关于我得服务器上是否安装了.NET 4.5得问题之后...以下是我得生产服务器上Registry得屏幕截图:
Registry
的数据
t2a7ltrp2#
在您的注册表中进行以下更改,它应该可以工作: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.)安全通道(Scanner)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
型
vybvopom3#
我发现的唯一改变这一点的方法是直接在代码上:在你的应用程序的最开始,你设置
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
字符串你应该包括system.net类我在调用web服务之前这样做是因为我们也必须阻止tls1。
7qhs6swi4#
根据this,您需要安装.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
zqdjd7g95#
有两种可能的情况,1.如果您的应用程序运行在.net framework 4.5或更低版本上,并且您可以轻松地将新代码部署到生产环境中,那么您可以使用下面的解决方案。您可以在进行API调用之前添加以下代码行,
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // .NET 4.5 ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // .NET 4.0
字符串1.如果您无法部署新代码,并且希望使用生产环境中存在的相同代码解决问题,则有两种选择。
选项1:
.reg
Option 2
<runtime> <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false"/> </runtime>
型或
<runtime> <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=false" </runtime>
6jjcrrmo6#
我在VB中编写代码,并能够将以下行添加到Application_Start中的Global.asax.vb文件中
ServicePointManager.SecurityProtocol = CType(3072, SecurityProtocolType) 'TLS 1.2
字符串
a7qyws3x7#
我在安装了.NET Framework 4.0的Windows上遇到了同样的问题。我通过安装.NET Framework 4.6.2解决了这个问题。或者你可以下载newest package来试试。
8fsztsew8#
这对我很有效
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
8条答案
按热度按时间5us2dqdw1#
如果您无法将属性加入至
system.net
类别库。然后,添加全局.asax文件:
字符串
你可以在一个函数中使用它,在开始行:
型
而且,它对只支持TLS 1.1、TLS 1.2的
STRIPE
支付网关非常有用。**编辑:**在回答了许多关于我得服务器上是否安装了.NET 4.5得问题之后...以下是我得生产服务器上
Registry
得屏幕截图:的数据
t2a7ltrp2#
在您的注册表中进行以下更改,它应该可以工作:
1.).NET Framework强加密注册表项
字符串
2.)安全通道(Scanner)TLS 1.2注册表项
型
vybvopom3#
我发现的唯一改变这一点的方法是直接在代码上:
在你的应用程序的最开始,你设置
字符串
你应该包括
system.net
类我在调用web服务之前这样做是因为我们也必须阻止tls1。
7qhs6swi4#
根据this,您需要安装.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
zqdjd7g95#
有两种可能的情况,
1.如果您的应用程序运行在.net framework 4.5或更低版本上,并且您可以轻松地将新代码部署到生产环境中,那么您可以使用下面的解决方案。
您可以在进行API调用之前添加以下代码行,
字符串
1.如果您无法部署新代码,并且希望使用生产环境中存在的相同代码解决问题,则有两种选择。
选项1:
型
.reg
的文件并安装。***注意:**此设置将应用于注册表级别,适用于该计算机上的所有应用程序,如果您想仅限于单个应用程序,则可以使用
Option 2
选项2:可以通过修改配置文件中的一些配置设置来完成,您可以在配置文件中添加。
型
或
型
6jjcrrmo6#
我在VB中编写代码,并能够将以下行添加到Application_Start中的Global.asax.vb文件中
字符串
a7qyws3x7#
我在安装了.NET Framework 4.0的Windows上遇到了同样的问题。
我通过安装.NET Framework 4.6.2解决了这个问题。
或者你可以下载newest package来试试。
8fsztsew8#
这对我很有效
字符串