Har*_*yer 41 .net ssl tls1.2 .net-4.6.1
我们的客户最近将安全协议升级到TLS 1.2.因此,我们将应用程序升级到4.6.1,期望安全协议将默认为TLS 1.2,但事实并非如此.知道为什么吗?
小智 44
我遇到了类似的问题,这对我有用.
打开Powershell并使用检查支持的协议 [Net.ServicePointManager]::SecurityProtocol
运行以下2个cmdlet以设置.NET Framework强加密注册表项:
在64位.Net Framework(版本4及更高版本)上设置强加密
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
在32位.Net Framework(版本4及更高版本)上设置强加密
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
重新启动Powershell并使用,再次检查支持的协议 [Net.ServicePointManager]::SecurityProtocol
它现在Tls12也应该显示出来.
希望这可以帮助
use*_*601 21
正如其他人所提到的,必须设置许多Windows注册表项,以便在现有.NET应用程序中启用TLS 1.2,而无需在应用程序代码中明确设置协议版本.
为了使.NET 4.x代码默认选择最强的可用协议(即,在代码中未明确指定协议时),需要以下注册表项:
在32位和64位版本的Windows上:
HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SchUseStrongCrypto: 0X00000001
在64位版本的Windows上:
HKLM\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319\SchUseStrongCrypto: 0X00000001
所述WOW6432Node需要值时在64位的系统上运行,以使TLS 1.2在32位应用程序.
但这是快速简便的解决方案:https: //github.com/TheLevelUp/pos-tls-patcher
更新:
如果您的目标是.NET 4.6或4.7,那么您将对.NET Framework的传输层安全性(TLS)最佳实践感兴趣.
请注意,上面链接的TLS Patcher非常遵循Microsoft对现有.NET 4.0和4.5应用程序的建议,这些应用程序无法以.NET 4.6或更高版本为目标.
Gab*_*abe 18
安全协议未默认为TLS 1.2的原因是因为.NET Framework 4.6.1中没有此默认值.对不起,如果这是重复已经说过的内容,但我想详细说明,我没有足够的声誉来发表评论.
4.6.2中也没有默认值,但是像上面提到的一个评论者一样,控制台应用程序似乎默认为TLS 1.2.我在针对4.6.2的网站项目中尝试了完全相同的代码,并且它没有默认为TLS 1.2.
4.7及更高版本的默认值为SecurityProtocolType.SystemDefault.
"这允许基于SslStream的.NET Framework网络API(例如FTP,HTTP和SMTP)从操作系统或系统管理员执行的任何自定义配置继承默认安全协议"
我们在 IIS 中托管 .NET 4.6.2 应用程序时遇到了类似的问题。
我们可以通过将httpRuntime元素添加到 web.config来解决这个问题。没有它,我们的服务不会默认使用 TLS 1.2。
<httpRuntime targetFramework="4.6.2" />
Run Code Online (Sandbox Code Playgroud)
MSDN:ServicePointManager.SecurityProtocol属性
此属性选择安全套接字层(SSL)或传输层安全性(TLS)协议的版本,以用于仅使用安全超文本传输协议(HTTPS)方案的新连接; 现有连接不会更改.请注意,此属性没有列出默认值.
安全格局不断变化,默认协议和保护级别会随着时间的推移而发生变化,以避免已知的弱点.默认值将根据各个计算机配置,安装的软件以及已应用的修补程序而有所不同.
取自这里
我也遇到了这个问题。当本地应用程序尝试连接到支持 TLS 1.1 和 TLS 1.2 的服务器时,它曾经获得“远程主机强制关闭现有连接”异常,或者当 TLS 1.1/1.2 未正确启用时,它曾经获得“Win32Exception:客户端和服务器无法通信,因为它们没有共同的算法”
下面是 x64 Windows 操作系统所需的所有注册表项和值。如果您有 32 位操作系统 (x86),只需删除最后 2 行。TLS 1.0 将被注册表脚本禁用。需要重新启动操作系统。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
"DisabledByDefault"=dword:00000001
"enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\server]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\ssl 3.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\ssl 3.0\client]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\ssl 3.0\server]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.0\client]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.0\server]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.1]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.1\client]
"disabledbydefault"=dword:00000000
"enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.1\server]
"disabledbydefault"=dword:00000000
"enabled"=dword:00000001
[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
[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
Run Code Online (Sandbox Code Playgroud)
小智 5
基于以下链接
https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls
我已经添加
AppContext.SetSwitch("Switch.System.Net.DontEnableSystemDefaultTlsVersions", false);
Run Code Online (Sandbox Code Playgroud)
到我的代码,这为我解决了这个问题。这意味着默认为操作系统支持的最高级别,这与默认情况下从 4.7 及更高版本获得的行为相同。
| 归档时间: |
|
| 查看次数: |
40946 次 |
| 最近记录: |