是否有TLS 1.2的.NET实现?

时间:2010-11-09 18:24:01

标签: .net ssl

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

10 个答案:

答案 0 :(得分:75)

是的,但您必须在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 will use TLS 1.0 or SSL 3

  

您的客户正在使用               TLS 1.0,很老,可能很容易受到影响               对BEAST攻击,并没有最好的密码               套房可用。增加了AES-GCM和SHA256               替换MD5-SHA-1对TLS 1.0客户端不可用               以及更多现代密码套件。

答案 1 :(得分:41)

答案 2 :(得分:27)

您可以使用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

答案 3 :(得分: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

答案 4 :(得分:8)

如果您正在处理旧版本的.NET Framework,那么在我们的SecureBlackbox product中,客户端和服务器组件中都支持TLS 1.2。 SecureBlackbox包含自己的所有算法实现,因此使用哪个版本的基于.NET的框架(包括.NET CF)并不重要 - 在所有情况下,您都将拥有TLS 1.2及最新版本。

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

答案 5 :(得分:8)

只需下载此registry key并运行即可。它将为.NET框架注册表添加必要的密钥。 您可以在此link获得更多信息。在“.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

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

  

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

答案 6 :(得分:4)

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

中找到

答案 7 :(得分:3)

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

答案 8 :(得分:3)

.NET Framework 4.6默认使用TLS 1.2。

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

答案 9 :(得分:-1)

如上所述here您只需添加此行

即可
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;