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.