.Net框架4.6.1不默认为TLS 1.2
我们的客户最近的安全协议升级到TLS 1.2。因此,我们将我们的应用程序升级到4.6.1,期望安全协议将默认为TLS 1.2,但事实并非如此。任何想法为什么?.Net框架4.6.1不默认为TLS 1.2
MSDN:ServicePointManager.SecurityProtocol物业
此属性选择安全套接字层(SSL)或 传输层安全(TLS)协议的版本,以用于使用安全超文本传输新的连接 仅限协议(HTTPS)方案; 现有连接未更改。 请注意,此属性没有默认值为 。
安全格局不断变化,默认协议和 保护级别随时间而改变,以避免已知的 缺点。默认值将取决于个人机 构造而变化,并在其上安装的软件,并在其上已经施加 补丁。
从here
.NET 4.6.1的默认安全协议不是TLS 1.2 - 您必须将ServicePointManager.SecurityProtocol的值设置为它来添加支持 –
这是如何回答问题的?该OP说TLS1.2没有工作时,它应该 –
我明白这个问题,因为“我什么也没做,预计TLS 1.2工作” –
摘自我也有类似的问题,这是对我工作。
1)开放Powershell的,并通过使用[Net.ServicePointManager] :: SecurityProtocol
2)运行以下2只小命令检查所支持的协议。
设置强大的加密64位.Net框架(版本4及以上)
的Set-ItemProperty -Path 'HKLM:\ SOFTWARE \ Microsoft.NetFramework \ v4.0.30319' - 名称 'SchUseStrongCrypto' - 值 '1' - 类型双字
在32位.Net框架(版本4及以上)
的Set-ItemProperty -Path“HKLM 设置强加密:\ SOFTWARE \ Microsoft.NetFramework \ v4.0.30319 '-Name'SchUseStrongCrypto'-Value'1'-Type DWord
3)重新启动Powershell的和支持的协议,通过使用[Net.ServicePointManager] :: SecurityProtocol
现在应该显示tls1.2以及再次检查。
希望这有助于
这应该当然适用于安装了.NET 4.6+的.NET 4.x应用程序代码。 – user24601
之所以安全协议没有默认TLS 1.2是因为在.NET框架4.6.1这个没有默认值。对不起,如果这是重申已经说过的话,但我想说明一下,我没有足够的评论声望。
4.6.2中没有默认值,但是就像上面提到的评论者之一一样,控制台应用似乎默认为TLS 1.2。我在4.6.2的网站项目中尝试了完全相同的代码,并且它没有默认为TLS 1.2。
4.7及以上版本的默认值为SecurityProtocolType.SystemDefault。
“这允许基于SslStream(例如FTP,HTTP,SMTP和)的.NET Framework联网API来从操作系统或从由系统管理员执行的任何定制配置继承默认安全协议”
正如其他人提到的那样,有许多Windows注册表项必须设置为在现有.NET应用程序中启用TLS 1.2,而无需在应用程序代码中明确设置协议版本。
为了使默认.NET 4.x code select the strongest available protocol(即,当未明确地在代码中指定的协议),需要以下注册表项:
在Windows的32位和64位版本: HKLM\SOFTWARE\Microsoft\.NETFramework\4.0.30319\SchUseStrongCrypto: 0X00000001
在Windows的64位版本: HKLM\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\4.0.30319\SchUseStrongCrypto: 0X00000001
的在64位系统上运行时,需要10个值才能在32位应用程序中启用TLS 1.2。
但这里有一个快速和简单的解决方案: https://github.com/TheLevelUp/pos-tls-patcher
我认为这应该是被接受的答案。我们遇到了同样的问题并观察到以下情况:正常的.Net EXE按预期工作。在本机进程中托管的程序集(例如IIS,Office Addin)仅在使用TLS 1.2时才进行注册表设置。 –
@StefanEgli我感到你的痛苦。不知道为什么这些信息没有更好的记录。我们正试图说出:http://blog.thelevelup.com/pci-security-is-your-restaurant-ready/ – user24601
@StefanEgli如果您想在本机代码中使用TLS 1.2,则还需要Schannel注册表项集:https://docs.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#tls-12 – user24601
我用这个在我的代码最初的页面上。该应用程序是在.NET Framework 4.6.1的VB.NET中的Web表单。
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
这实际上覆盖了所有其他版本,更不用说它不回答问题。 – kuskmen
你怎么知道它不是?你尝试了什么? –
默认情况下,TLS 1.2在4.6.2中工作 - 使用HttpClient检索Google.com主页(TLS1.2)时没有问题 –
当连接到服务器时出现此错误 “这可能是由于服务器在HTTPS情况下,证书使用HTTP.SYS配置不正确。“ 但是,在Global.asax文件的启动方法中添加此行解决了此问题。 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3; 但是我们想知道为什么我们需要设置这个,如果我们有我们的应用程序在.Net 4.6.1 –