由于我刚刚发现RFC 5425需要使用TLS 1.2,并且.NET还不支持它,我想知道是否有任何实现,可能是开源的TLS 1.2协议,如RFC 5246中所定义
答案 0 :(得分:75)
是的,但您必须在System.Net.ServicePointManager.SecurityProtocol
手动启用TLS 1.2System.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)
刚刚发现.Net Framework 4.5现在支持TLSv1.2
http://msdn.microsoft.com/en-us/library/system.security.authentication.sslprotocols(v=vs.110).aspx
答案 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;