由于我刚刚发现RFC 5425要求使用TLS 1.2,并且.NET尚未支持它,因此我想知道是否有任何实现TLS 1.2协议的开源库,如RFC 5246所定义。
由于我刚刚发现RFC 5425要求使用TLS 1.2,并且.NET尚未支持它,因此我想知道是否有任何实现TLS 1.2协议的开源库,如RFC 5246所定义。
是的,尽管您需要在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攻击,并且没有最佳的密码套件可供使用。像AES-GCM和SHA256这样的新增功能无法在TLS 1.0客户端上使用,同样有许多更现代的密码套件也不支持。
刚发现 .Net Framework 4.5 现在支持 TLSv1.2
http://msdn.microsoft.com/en-us/library/system.security.authentication.sslprotocols(v=vs.110).aspx
您可以使用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
<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
[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
最新版本的SSPI(Windows 7捆绑)具有TLS 1.2实现,可以在schannel.dll中找到。
.NET Framework 4.6 默认使用 TLS 1.2。
此外,只有主机应用程序需要使用 .NET 4.6,引用的库可以继续使用旧版本。
您可以按照这些说明在IIS中启用TLS 1.2。如果您有一个基于ASP.NET的应用程序在IIS上运行,我认为这将足够,尽管看起来似乎不完全符合您的需求。
如此处所述,您只需添加此行即可
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;