我们的ASP.NET 2.0网站通过调用Authorize.Net的API来处理信用卡交易。授权已告知我们,在确定的日期,我们的客户必须使用TLS 1.2协议进行API调用。
Microsoft似乎表明此10-22-16 KB文章中提供了一个解决方案:https://support.microsoft.com/en-us/help/3154517/support-for-tls-system-default-versions-included-in-the-.net-framework-2.0-sp2-on-windows-vista-sp2-and-server-2008-sp2
...我们已经添加了SslProtocolsExtensions枚举 用作设置TLS v1.2,TLS v1.1以及操作的选项 ServicePointManager.SecurityProtocol属性的系统默认值 定位 .NET framework 2.0 SP2 时。
请注意,尽管有这篇文章的标题,上面引用的不指的是Windows Vista SP2或Windows 2008 SP2操作系统,因为这些操作系统不支持TLS v1.1和1.2。
我已经通过以下步骤实施并测试了我对KB文章中指出的解决方案的理解:
不幸的是,在运行应用程序时,我在上面第3项中显示的代码行上遇到以下错误:
System.NotSupportedException:请求的安全协议不是 支撑。
此时,我很难过。我特别感谢有关如何推进此解决方案的任何见解,但我有兴趣了解您允许从ASP.NET 2.0应用程序进行API调用以利用TLS的任何其他方法1.2。 (升级到更新版本的.NET框架是最后的选择。)
提前感谢您的帮助!
答案 0 :(得分:9)
我们必须使用我们的.NET 2.0应用程序迁移到TLS 1.2,我们并不想将代码移植到.NET 4.5 / 4.6。经过几天的研究和发现这篇文章后,我们找到了解决方案。这篇文章引用了错误的HOTFIX。要在Server 2008 R2上使用TLS 1.2 for .NET 2.0,您需要这个HOTFIX:https://support.microsoft.com/en-us/help/3154518/support-for-tls-system-default-versions-included-in-the-.net-framework
它引用了3.5.1框架,但ALSO适用于2.0框架。安装此修补程序后,您可以按照指示在服务器上进行注册表更改,或者在应用程序中更改代码以直接引用TLS 1.2。
C# ServicePointManager.SecurityProtocol =(SecurityProtocolType)3072;
VB ServicePointManager.SecurityProtocol = DirectCast(3072,System.Net.SecurityProtocolType)
对于其他操作系统,请查看Troy Starr的帖子: https://community.qualys.com/thread/16917-net-framework
希望这有帮助
答案 1 :(得分:6)
对于找到此主题的其他人,我能够使用上面原始问题中详述的相同步骤(#1-#4)来使用TLS 1.2来处理.Net 3.5。一旦我将补丁应用到Win 2012服务器(我的共享托管公司很适合应用),然后添加了代码行以在我的API调用之前启用TLS 1.2,它立即起作用:
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolTypeExtensions.Tls12;
答案 2 :(得分:1)
我意识到这个问题有点旧 - 但是在其他人的帮助下这对我们有用 - 我们的Authorize.Net交易现在可以在我们的.NET 2.0 AbleCommerce应用程序上使用TLS 1.2。 [看起来生产的过渡期限已延长至2018年2月28日]
环境:Windows Server 2008 R2,IIS 7.5,AbleCommerce 7.0.2 build 11659,CommerceBuilder.AuthorizeNet 7.0.9764.0
根据@ JoeBoxer上面的回答,this link做了诀窍 - 专门为我们基于x64的系统设置了两个注册表项(列出的补丁不会安装在我们的盒子上):
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
我们也做了this - 因为我们没有TLS 1.2的条目 - 但仅凭这一点并没有解决问题。
答案 3 :(得分:0)
AS TLS 1.2不支持asp.net 2.0。 有另一种方法可以实现TLS 1.2,而无需将项目从asp.net 2.0迁移到最新/更高版本。步骤如下:
下面是示例代码:
[WebMethod]
public LoginResult TestLogin(string _username, string _password, string _tokenID)
{
try
{
System.Net.ServicePointManager.SecurityProtocol = (System.Net.SecurityProtocolType)3072;
LoginResult _loginResult = new LoginResult();
_loginResult = _sForceRef.login(_username, _password + _tokenID);
return _loginResult;
}
catch (Exception e)
{
throw e;
}
finally
{
}
}
Reference
namespace System.Net
{
[System.Flags]
public enum SecurityProtocolType
{
Ssl3 = 48,
Tls = 192,
Tls11 = 768,
Tls12 = 3072,
}
}