.NET Framework 3.5和TLS 1.2

Chr*_*rdi 16 c# asp.net

我目前有一个使用.NET 3.5框架的Web应用程序,我想知道它是否与TLS 1.2兼容.我们的代码中没有在哪里指示TLS版本.这是一个遗留应用程序,并且重新编译现在不在桌面上.我没有找到关于您是否可以获得的信息,但我认为兼容性更依赖于操作系统版本.看起来最小值是2008 R2.目标是让paypal在7月1日正确沟通.

D_B*_*ter 30

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

我正在使用VS 2008与.net 3.5.30729.4926.我所要做的就是:

添加进口:

Imports System.Security.Authentication
Imports System.Net
Run Code Online (Sandbox Code Playgroud)

将其添加到我的代码(C#):

public const SslProtocols _Tls12 = (SslProtocols)0x00000C00;
public const SecurityProtocolType Tls12 = (SecurityProtocolType)_Tls12;
ServicePointManager.SecurityProtocol = Tls12
Run Code Online (Sandbox Code Playgroud)

VB.net版本:

Const _Tls12 As SslProtocols = DirectCast(&HC00, SslProtocols)
Const Tls12 As SecurityProtocolType = DirectCast(_Tls12, SecurityProtocolType)
ServicePointManager.SecurityProtocol = Tls12
Run Code Online (Sandbox Code Playgroud)

剔除:https://support.microsoft.com/en-us/help/3154518/support-for-tls-system-default-versions-included-in-the-.net-framework注意:通过定义const in我的代码我可以忽略文章中的所有其他内容,包括注册表编辑和cs文件.

  • 非常好的解决方法建议,而不是安装MS更新和更改注册表.它节省了我很多时间. (2认同)
  • 啊谢谢!我正在使用 Dynamics AX 2009。我试图引用一个调用 UPS 地址验证的 DLL。我的原始代码可以在服务器上运行,但不能在客户端上运行。你的回答为我解决了这个问题。 (2认同)

mac*_*ura 16

正如您从文档中看到的那样,TLS 1.2不在枚举中SslProtocols,它被添加到.NET 4.5的枚举中(感谢@orhun).

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

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

编辑10/11/17

我的上述答案不再准确. 2017年5月,Microsoft发布了一个允许在.NET 3.5.1中使用TLS 1.2的软件包.

  • 就像继承多年未更新或维护的代码一样。谢谢你们俩 (2认同)
  • @JanisVeinbergs 答案是在 2017 年 4 月给出的,补丁是在 2017 年 5 月发布的。看来你有一些相当高的标准 (2认同)
  • @KevinDahl问题是,人们来到此站点,可能会查看最高答案以了解真相。这就是为什么我不喜欢它来试图提高准确答案的原因。但是由于op最近编辑了他的答案,在我发表评论后,我确实撤回了我的拒绝投票,因为阅读此答案的人们现在可以找到准确的信息。 (2认同)

小智 10

您可以使TLS 1.2与Framework 3.5一起使用.

微软已经发布了它的更新.

按照以下步骤操作

  1. 从此处安装Framework 3.5中的TLS支持更新:

https://support.microsoft.com/en-us/help/3154518/support-for-tls-system-default-versions-included-in-the-.net-framework-3.5.1-on-windows-7 -sp1和服务器-2008-R2-SP1

  1. 转到注册表
    • 在开始时键入regedit
    • 右键单击并以管理员身份运行
    • 导航到注册表项

[HKEY_LOCAL_MACHINE\SOFTWARE \微软\ .NETFramework\V2.0.50727]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node \微软\ .NETFramework\V2.0.50727]

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

    1. 添加注册表项的条目
  • 复制保存的文件并重命名
  • 使用文本编辑器打开并向每个键添加以下文本(这适用于64位操作系统)并保存更改(对于32位操作系统,请查看链接中的信息)

[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

  • 双击该文件,然后单击窗口上的"是"以允许更改

    1. 按照链接 - 开发人员指南部分中的说明向项目添加代码

我应用了这个解决方案,它对我有用.

  • 但这个问题是关于开发Web应用程序.编辑注册表是完全没必要的.您应该在代码中直接指定TLS 1.2,而不是依赖于注册表中的System Default. (2认同)

Chr*_*vén 7

我刚刚验证,这就是您在代码中启用 .NET Framework 3.5 中对 TLS 1.2 的支持所需的全部内容:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
Run Code Online (Sandbox Code Playgroud)

我通过在 .NET Framework 3.5 中创建一个单元测试来获取此 HTML 页面进行验证:https://clienttest.ssllabs.com: 8443/ssltest/viewMyClient.html

如果没有上述行,TLS 测试页会显示我正在使用 TLS 1.0,这是 .NET 3.5 的默认设置。

TLS 1.1 与 1.0 一起被弃用,但如果您也想启用它,可以使用此行(不推荐):

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072 | (SecurityProtocolType)768;
Run Code Online (Sandbox Code Playgroud)

“神奇”值 3072 和 768 取自 .NET Framework 4.5 版本的SecurityProtocolType枚举

  • 192:指定TLS 1.0安全协议
  • 768:指定 TLS 1.1 安全协议
  • 3072:指定 TLS 1.2 安全协议

我不确定运行此代码的服务器是否必须安装 .NET Framework 4.5 运行时,但可能是这样。