TLS 1.2是否有.NET实现?


76

由于我刚刚发现RFC 5425需要使用TLS 1.2,而.NET尚不支持它,因此我想知道是否存在RFC 5246定义的TLS 1.2协议的任何实现(可能是开源的)。


对于.net 3.5,需要添加标志以强制其使用TLS 1.2 stackoverflow.com/a/44893192/2559297
D_Bester17年

.Net 3.5上Web Service客户端应用程序SSL和过时的TLS(1.0和1.1)的可能重复项。投票结束该较旧的问题,因为它的最新性略差一些。
布赖恩

Answers:



78

是的,尽管您必须在System.Net.ServicePointManager.SecurityProtocol上手动打开TLS 1.2

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; // comparable to modern browsers
var response = WebRequest.Create("https://www.howsmyssl.com/").GetResponse();
var body = new StreamReader(response.GetResponseStream()).ReadToEnd();

您的客户端正在使用TLS 1.2,这是加密协议的最新版本


开箱即用,WebRequest将使用TLS 1.0或SSL 3

您的客户端使用的TLS 1.0很旧,可能容易受到BEAST攻击,并且没有可用的最佳密码套件。TLS 1.0客户端以及许多更现代的密码套件均无法使用诸如AES-GCM和SHA256之类的替代品来替代MD5-SHA-1。


10
是否可以通过app.exe.config中的设置指定SecurityProtocol?
Jeffrey LeCours

这不是还取决于运行应用程序的OS / Server,因为这将在其中创建/接收实际的HTTP流量?
Don Cheadle

谢谢。奇迹般有效。仅供参考,这适用于Windows 2012服务器。有人告诉我Windows 2008不支持TLS1.2。
丹丹

您应该能够在2008Svr上使用TLS1.2。可能需要安装dotNet 4.5框架。请参阅:msdn.microsoft.com/en-us/library/8z6watww(v=vs.110).aspx
Toby

28

您可以使用SchUseStrongCrypto注册表设置来要求所有.NET应用程序默认使用TLS 1.2而不是1.0。

Windows Registry Editor Version 5.00

[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

8
Microsoft应该在其安全更新之一中真正更新此值。我不敢相信默认设置是启用SSL v3和禁用TLS 1.2,并且此修复程序是一个简单的注册表设置。
dana 2015年

.NET框架4.0不支持TLS 1.1+,但框架4.5的功能:FWK 4.0:msdn.microsoft.com/en-us/library/... FWK 4.5:msdn.microsoft.com/en-us/library/...
Negarrak

2
现在(2016年9月)注册表中有很多不同的框架版本(4.0.30319、4.5、4.5.1、4.5.23026、4.5.50709)。哪个需要更新-或全部更新?
GlennG '16

1
答案在下面-您只需设置4.0.30319即可。
杰森·斯蒂尔

1
它将在带有Microsoft Update KB4019276的Windows 2008 SP2上运行。更多信息,请访问:github.com/TheLevelUp/pos-tls-patcher
user24601 '18

12

我通过切换到最新的.Net Framework解决了我的问题。因此,您的目标框架将设置您的安全协议。

当您在Web.config中拥有此功能时

<system.web>
  <httpRuntime targetFramework="4.5"/>
</system.web>

您将默认获得此信息:

ServicePointManager.SecurityProtocol = Ssl3 | Tls

当您在Web.config中拥有此功能时

<system.web>
  <httpRuntime targetFramework="4.6.1"/>
</system.web>

您将默认获得此信息:

ServicePointManager.SecurityProtocol = Tls12 | Tls11 | Tls

NET 4.7.1
Kiquenet '18

9

只需下载此注册表项并运行它。它将向.NET Framework注册表添加必要的密钥。您可以在此链接上获得更多信息。在“ .NET 4.5至4.5.2”中搜索“选项2”。

reg文件将以下内容附加到注册表:

[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

这是页面的一部分,如果它损坏了,将很有用:

Net.ServicePointManager.SecurityProtocol值。”


6
嗨,我已经编辑了您的答案,以包括注册表文件的内容。Reg文件通常被认为是“安全敏感”的,有经验的sysadmins管理员不会绑定打开由别人链接的第一个reg文件(出于所有方面!)。我想这也将是一个伟大的想法,引用链接的文章的一部分,按照SO策略(不只是链接的答案-更好的说:“没有答案是100%依靠链接”)
USR-本地ΕΨΗΕΛΩΝ

8

如果您使用的是.NET Framework的较旧版本,则我们的SecureBlackbox产品中的客户端和服务器组件均支持TLS 1.2 。SecureBlackbox包含所有算法的自己的实现,因此,使用哪个版本的基于.NET的框架(包括.NET CF)都没有关系-在所有情况下,您都将拥有TLS 1.2及其最新版本。

请注意,SecureBlackbox不会将TLS 1.2神奇地添加到框架类中-而是需要显式使用SecureBlackbox类和组件。


1
开源项目不一定意味着您需要打开所有代码。
Eugene Mayevski'Callback

1
我认为这将满足PCI DSS 3.1的SSL要求是正确的?这将非常有用,因为那里有许多XP派生的操作系统,它们仍在Microsoft支持下,但无法运行.Net Framework 4.5。
user1069816

1
@ user1069816在我们仔细分析PCI DSS 3.1的要求之前,我还不准备正式确认该一致性。但是总的来说,SecureBlackbox完全实现了TLS 1.2,并照顾了与安全相关的最新发现,并封装了相应的变通办法。
Eugene Mayevski'Callback

1
@ user1069816我们已经审查了PCI DSS 3.1。PCI-DSS 3.1要求所有兼容的环境都必须在2016年6月30日之前摆脱对SSL(2.0和3.0)和TLS 1.0版本协议的支持。使用SBB可以轻松实现这一点,它提供了对TLS 1.1和1.2以及所有现代密码套件的全面支持。
Eugene Mayevski'Callback

1
@ user1069816由于SecureBlackbox使用其自己的加密和SSL / TLS引擎,因此它不依赖于操作系统或.NET框架提供的相关功能的细节。也就是说,通过将基于WinAPI或.NET 2.0的软件产品迁移到SecureBlackbox,可以确保您的旧XP计算机保持PCI-DSS兼容。
Eugene Mayevski'Callback



3

您可以按照以下说明在IIS中启用TLS 1.2 。我认为,如果您有一个运行在IIS之上的基于ASP.NET的应用程序,这看起来就足够了,尽管看起来它并不能真正满足您的需求。


抱歉,这不适用于我。我正在编写一个用于运行Syslog协议的应用程序,该协议与ASP.NET相距甚远,并且使用常规套接字编程。不幸的是,我需要一个类相当于SslStream给我提供TLS 1.2服务:(
USR-本地ΕΨΗΕΛΩΝ

1
此链接现在403S,但新的URL看起来是derekseaman.com/2010/06/...
马丁科斯特洛

-1

这里提到的您只需添加此行

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

这仅适用于.NET 4.0。
wp78de

不对。枚举根据操作系统而定。除非您的4.5或更高,否则按名称列出枚举。
bresleveloper

不对。首先,它取决于.NET Framework目标版本。第二个问题是操作系统是否支持TLS 1.2。
wp78de
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.