当前位置: 首页 > 知识库问答 >
问题:

. Net Framework 4.6.1没有默认为TLS 1.2

韩善
2023-03-14

我们的客户最近将安全协议升级为TLS 1.2。因此,我们将应用程序升级到4.6.1,希望安全协议默认为TLS 1.2,但实际上并非如此。知道为什么吗?

共有3个答案

方建明
2023-03-14

安全协议没有默认为TLS 1.2的原因是,在中没有默认值。NET框架4.6.1。抱歉,如果这是重复什么已经说过,但我想详细说明,我没有足够的声誉发表评论。

4.6.2中也没有默认值,但是像上面提到的一个注释一样,控制台应用程序似乎默认为TLS 1.2。我在一个以4.6.2为目标的网站项目中尝试了完全相同的代码,但它没有默认为TLS 1.2。

4.7及以上版本有一个默认值SecurityStrecolType. SystemDefault。

“这允许基于SslStream(如FTP、HTTP和SMTP)的.NET Framework网络API从操作系统或系统管理员执行的任何自定义配置继承默认安全协议。”

https://docs.microsoft.com/en-us/dotnet/api/system.net.servicepointmanager.securityprotocol?view=netframework-4.7#System_Net_ServicePointManager_SecurityProtocol

景安翔
2023-03-14

正如其他人所提到的,必须设置许多Windows注册表项才能在现有系统中启用TLS 1.2。NET应用程序,而无需在应用程序代码中明确设置协议版本。

为了使。第四网。x代码默认情况下选择可用的最强协议(即,当代码中未明确指定协议时),需要以下注册表项:

在32位和64位版本的Windows上:HKLM\SOFTWARE\Microsoft\. NETFramework\v4.0.30319\SchUseStrongCrypto: 0X00000001

在64位版本的Windows上:HKLM\SOFTWARE\WOW6432Node\Microsoft\. NETFramework\v4.0.30319\SchUseStrongCrypto: 0X00000001

在64位系统上运行时,需要WOW6432Node值才能在32位应用程序中启用TLS 1.2。

但这里有一个简单快捷的解决方案:https://github.com/TheLevelUp/pos-tls-patcher

更新:

如果你的目标是。NET 4.6或4.7,您将对传输层安全(TLS)的最佳实践感兴趣。NET框架

请注意,上面链接的TLS Patcher在很大程度上遵循了微软对现有系统的建议。NET 4.0和4.5应用程序无法定位。净4.6或更高。

邵飞宇
2023-03-14

我有一个类似的问题,这就是我的工作。

>

运行以下两个cmdlet进行设置。NET Framework强加密注册表项:

将强加密设置为64位。Net Framework(版本4及以上)

Set ItemProperty-Path'HKLM:\SOFTWARE\Wow6432Node\Microsoft\。NetFramework\v4。0.30319'-Name'SchUseStrongCrypto'-Value'1'-Type DWord

在32位. Net框架(版本4及以上)上设置强加密

Set ItemProperty-Path'HKLM:\SOFTWARE\Microsoft\。NetFramework\v4。0.30319'-Name'SchUseStrongCrypto'-Value'1'-Type DWord

重新启动Powershell,并使用[Net.ServicePointManager]::SecurityProtocol

它现在也应该显示Tls12

希望这有帮助

 类似资料:
  • 这是我的用户。JAVA 这是我的地址。JAVA 但是当我试图持久化对象时,我得到了这个异常 错误不会来,如果我删除"NOTNULL"约束从FORIGN_KEY"USER_ID",但我需要使它作为一个NOTNULL列我应该怎么做。 这是我的注册方法 这是我的SQL脚本

  • Java中的本质上是不可靠的。具体地说,我对接口的最大问题是,它需要一个不定义方法本身的方法行为。因此,如果遍历一个列表,您必须使用反射来访问它定义的行为。然而,在Java8中,我们现在有了默认方法,现在我问为什么在中没有默认的方法。 我理解为什么接口不能默认对象方法,但是,这是一个明确的设计决定,所以可以做出例外。 我有点想弃用并将其内部代码更改为类似以下内容: 然后继续使用使作为中的默认方法的

  • 我不明白为什么我应用程序会删除异常“字段'ID_Employeer'没有默认值”。 是我的主键,当我试图将任何信息保存到我的数据库时,我得到了这个异常,但是,当我只是试图从DB读取信息时,它是正常的。 我读了关于StackOverflow的主题,但我仍然不明白我应用程序中的答案。我正在使用Hibernate5.2.11。 我的: 我的冬眠: 下一个CharacterInfo类 主类 最后例外

  • 问题内容: 我面对的是Hibernate遇到的一个简单问题,但无法解决(无法访问的Hibernate论坛当然无济于事)。 我有一个简单的课程想继续学习,但是请继续学习: 持久化类的相关代码为: 实际的运行代码很简单: 我在注解中尝试了一些“策略”,但似乎不起作用。初始化也无济于事!(例如)。 谁能给我一些启示? 编辑2: 确认:不能解决问题 求助: 重新创建数据库解决了问题 问题答案: 有时,即使

  • 问题内容: 我收到一条错误消息: 每个人都可以帮助我吗?我的数据库字段不为空。但我想得到这个结果: 并且 两者都成功(在客户端中都是成功,但是在Java代码中是error,错误代码位于标题的顶部),而不是false;我的mysql jar是mysql-connector- java-5.0.8 问题答案: 该错误是不言自明的。您的列没有默认值。因此,在插入期间,mysql无法找出要在列中插入的内容

  • 我被一个奇怪的编程问题困住了。我已经定义了一个模式,其中如果没有为列(列名是Title)传递值,那么将使用默认值(Harry)。 标题|字符变化(64)|默认“Harry”::字符变化 而且,我正在尝试通过我的java应用程序使用hibernate插入条目。 发生的情况是,hibernate在任何查询中都显式地为该列提供空值,因此这些条目的默认值不会显示在表中。 这里要提到的是,当我自己执行任何i