是否有TLS 1.2的.NET实现?

usr*_*ΛΩΝ 75 .net ssl

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

谢谢.

Col*_*nic 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();
Run Code Online (Sandbox Code Playgroud)

您的客户端使用的是最现代版本的加密协议TLS 1.2


在框中,WebRequest将使用TLS 1.0或SSL 3.

您的客户端正在使用TLS 1.0,它很老,可能容易受到BEAST攻击,并且没有可用的最佳密码套件.用于替换MD5-SHA-1的AES-GCM和SHA256等附加功能不适用于TLS 1.0客户端以及更多现代密码套件.

  • 是否可以通过app.exe.config中的设置指定SecurityProtocol? (10认同)

Jef*_*urs 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
Run Code Online (Sandbox Code Playgroud)

  • Microsoft应该在其安全更新中更新此值.我不敢相信默认是启用SSL v3并禁用TLS 1.2,修复是一个简单的注册表设置. (8认同)
  • 现在(2016年9月)注册表中有许多不同的框架版本(4.0.30319,4.5,4.5.1,4.5.23026,4.5.50709).哪一个需要更新 - 或全部? (2认同)

Eri*_*ric 12

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

当你在Web.config中有这个

<system.web>
  <httpRuntime targetFramework="4.5"/>
</system.web>
Run Code Online (Sandbox Code Playgroud)

你会默认得到这个:

ServicePointManager.SecurityProtocol = Ssl3 | Tls
Run Code Online (Sandbox Code Playgroud)

当你在Web.config中有这个

<system.web>
  <httpRuntime targetFramework="4.6.1"/>
</system.web>
Run Code Online (Sandbox Code Playgroud)

你会默认得到这个:

ServicePointManager.SecurityProtocol = Tls12 | Tls11 | Tls
Run Code Online (Sandbox Code Playgroud)


Eug*_*its 8

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

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


Sam*_*djo 8

只需下载此注册表项并运行它.它将为.NET框架注册表添加必要的密钥.您可以在此链接获得更多信息.在".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
Run Code Online (Sandbox Code Playgroud)

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

"..默认启用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应用程序."

  • 嗨,我已经编辑了你的答案,包括注册表文件的内容.Reg文件通常被认为是"安全敏感的",有经验的系统管理员不会绑定打开由其他人链接的第一个reg文件(尊重所有人!).根据SO政策,我认为引用链接文章的一部分也是一个很好的想法(没有链接答案 - 更好地说"没有100%依赖于链接的答案") (6认同)