C# .NET Framework 3.5和TLS 1.2

C# .NET Framework 3.5和TLS 1.2,c#,asp.net,C#,Asp.net,我目前有一个使用.NET3.5框架的web应用程序,我想知道它是否与TLS1.2兼容。不,在我们的代码中,我们在哪里口述TLS版本。这是一个遗留应用程序,目前不准备重新编译。我没有找到多少关于你能不能的信息,但我的印象是兼容性更依赖于操作系统版本。看起来最低要求是2008R2。目标是让paypal在7月1日前正确沟通 从中可以看到,TLS 1.2不在SslProtocols的枚举中,它已添加到.NET 4.5中的枚举中(感谢@orhun) 在.NET 3.5上没有TLS 1.2兼容性的解决方案

我目前有一个使用.NET3.5框架的web应用程序,我想知道它是否与TLS1.2兼容。不,在我们的代码中,我们在哪里口述TLS版本。这是一个遗留应用程序,目前不准备重新编译。我没有找到多少关于你能不能的信息,但我的印象是兼容性更依赖于操作系统版本。看起来最低要求是2008R2。目标是让paypal在7月1日前正确沟通

从中可以看到,TLS 1.2不在
SslProtocols
的枚举中,它已添加到.NET 4.5中的枚举中(感谢@orhun)

在.NET 3.5上没有TLS 1.2兼容性的解决方案

不幸的是,您必须升级到.NET 4.5或更高版本才能获得TLS 1.2兼容性

编辑2017年11月10日


我上面的回答不再准确了

您可以使TLS1.2与Framework 3.5配合使用

微软已经发布了它的更新

遵循以下步骤

  • 从此处安装Framework 3.5中TLS的支持更新:
  • 去登记处
    • 在start中键入regedit
    • 右键单击并以管理员身份运行
    • 导航到注册表项
  • [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]

    [HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727]

    • 右键单击注册表项,然后单击导出
    • 命名文件并以.reg扩展名保存(保留它们作为备份,以防需要恢复)

    • 向注册表项添加项
    • 复制保存的文件并重命名它们
    • 使用文本编辑器打开并向每个键添加以下文本(适用于64位操作系统)并保存更改(适用于32位操作系统,请查看链接中的信息)
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727] “SystemDefaultTlsVersions”=dword:0000000 1

    [HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727] “SystemDefaultTlsVersions”=dword:0000000 1

    • 双击该文件并在窗口上单击“是”以允许更改

    • 按照“链接-开发人员指南”部分中的规定,将代码添加到项目中

    我应用了这个解决方案,它对我起了作用。

    如前所述。net 3.5.1现在支持TLS 1.2;但是您不需要@Paulina的答案中提到的注册表更改

    我将VS2008与.NET3.5.30729.4926一起使用。我所要做的就是:

    添加导入:

    Imports System.Security.Authentication
    Imports System.Net
    
    将此添加到我的代码(C#)中:

    VB.net版本:

    Const _Tls12 As SslProtocols = DirectCast(&HC00, SslProtocols)
    Const Tls12 As SecurityProtocolType = DirectCast(_Tls12, SecurityProtocolType)
    ServicePointManager.SecurityProtocol = Tls12
    

    摘自:注意:通过在我的代码中定义常量,我可以忽略文章中的所有内容,包括注册表编辑和cs文件

    我遇到了与OP-old.NET3.5代码相同的问题,该代码必须使用TLS1.2连接到外部服务

    如公认答案中所述,MS发布了tls1.2的补丁

    在此之后,他们发布了Server 2008(而非R2)的修补程序:


    因此,应该可以在仍然运行Server2008的情况下升级到TLS1.2

    是的,你说得对。我遇到了TLS1.2的问题,它一直留在我的脑海中,关于.NET4.5:)没有什么比继承多年来未更新或维护的代码更重要的了。感谢你们两位,因为@Paulina提供了答案。对.NET 3.5.1和类进行了更新:
    SecurityProtocolTypeExtensions
    SSLProtocolExtensions
    ,其中包括TLS1。2@JanisVeinbergs答案在2017年4月给出,补丁于2017年5月发布。看来你有一些很高尚的想法standards@KevinDahl问题是,人们来到这个网站,可能会查看最上面的答案来找出真相。这就是为什么我把它写下来,试图推高准确答案的原因。但由于op最近编辑了他的答案,在我发表评论后,我收回了我的否决票,因为阅读此答案的人现在可以找到Accurate信息。非常好的解决方案建议,而不是安装MS update并对注册表进行更改。它为我节省了很多时间。所以你知道,还有一篇文章/下载。谢谢!我使用的是Dynamics AX 2009。我试图引用一个调用UPS地址验证的DLL。我的原始代码在服务器上工作,但在客户端不工作。你的回答为我解决了这个问题。选择最能描述你问题的标签。有关更多信息,请阅读指南,您编辑注册表的答案使TLS 1.2成为系统默认值。当然,这是一件好事,应该由系统管理员来做。但是这个问题是关于开发一个web应用程序的。编辑注册表是完全没有必要的。您应该在代码中直接指定TLS 1.2,而不是依赖注册表中的系统默认值
    Const _Tls12 As SslProtocols = DirectCast(&HC00, SslProtocols)
    Const Tls12 As SecurityProtocolType = DirectCast(_Tls12, SecurityProtocolType)
    ServicePointManager.SecurityProtocol = Tls12