有TLS 1.2的.NET实现吗?

由于我刚刚发现RFC 5425要求使用TLS 1.2,并且.NET还不支持,所以我想知道是否有RFC5246中定义的TLS 1.2协议的实现,可能是开源的。

谢谢。

是的,尽pipe您必须在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,最新的encryption协议版本


WebRequest将使用TLS 1.0或SSL 3 。

您的客户端正在使用TLS 1.0,这是非常古老的,可能受到BEAST攻击,并没有最好的密码套件。 另外像AES-GCM和SHA256取代MD5-SHA-1对于TLS 1.0客户端以及更多的现代密码套件是不可用的。

您可以使用SchUseStrongCryptoregistry设置来要求所有.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 

如果您正在处理较旧版本的.NET Framework,则在我们的SecureBlackbox产品中,客户端和服务器组件都支持TLS 1.2。 SecureBlackbox包含了它自己的所有algorithm的实现,所以你使用的是基于.NET的框架版本(包括.NET CF)并不重要 – 在所有的情况下,你将拥有最新的TLS 1.2。

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

我通过切换到最新的.Net框架解决了我的问题。 所以你的目标框架设置你的安全协议。

当你在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 

只需下载此registry项并运行它。 它将为.NET框架registry添加必要的密钥。 你可以在这个链接有更多的信息。 在“.NET 4.5到4.5.2”中search“选项2”。

reg文件将以下内容添加到registry中:

 [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 

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

“..通过默认启用TLS 1.2而不修改源代码,通过将下面两个registry项中的SchUseStrongCrypto DWORD值设置为1,如果它们不存在则创build它们:”HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft.NETFramework \ v4.0.30319“和“HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft.NETFramework \ v4.0.30319”。虽然这些registry项中的版本号是4.0.30319,但.NET 4.5,4.5.1和4.5.2框架也使用这些值。但是,registry项在默认情况下将在该系统上安装的所有.NET 4.0,4.5,4.5.1和4.5.2应用程序中启用TLS 1.2。因此,build议在将此更改部署到生产服务器之前对其进行testing。也可用作registry导入文件,但是这些registry值不会影响设置System.Net.ServicePointManager.SecurityProtocol值的.NET应用程序。

最新版本的SSPI (与Windows 7捆绑在一起)具有TLS 1.2的实现,可以在schannel.dll中find

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

.NET Framework 4.6默认使用TLS 1.2。

此外,只有宿主应用程序应该在.NET 4.6中,引用的库可能保留在旧版本中。