.net - .NET 4.5 中的默认安全协议(protocol)

标签 .net security ssl

与最高支持 TLS 1.2 的服务器通信的默认安全协议(protocol)是什么?默认情况下,.NET 会选择服务器端支持的最高安全协议(protocol),还是我必须显式添加这行代码:

System.Net.ServicePointManager.SecurityProtocol = 
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

除了代码更改之外,是否还有其他方法可以更改此默认值?

最后,.NET 4.0 是否只支持到 TLS 1.0?即我必须将客户端项目升级到 4.5 以支持 TLS 1.2

我的动机是在客户端删除对 SSLv3 的支持,即使服务器支持它(我已经有一个 powershell 脚本来在机器注册表中禁用它)并支持最高的 TLS 协议(protocol)服务器支持。

更新: 查看 .NET 4.0 中的 ServicePointManager 类,我没有看到 TLS 1.01.1 的枚举值。在 .NET 4.0/4.5 中,默认值为 SecurityProtocolType.Tls|SecurityProtocolType.Ssl3。希望在注册表中禁用 SSLv3 不会破坏此默认设置。

但是,我决定必须将所有应用程序升级到 .NET 4.5 并显式添加 SecurityProtocolType.Tls |安全协议(protocol)类型.Tls11 | SecurityProtocolType.Tls12; 所有应用程序的所有引导代码。

这将向各种 api 和服务发出出站请求,以不降级到 SSLv3 并且应该选择最高级别的 TLS

这种方法听起来合理还是矫枉过正?我有很多应用程序要更新,我想在未来证明它们,因为我听说甚至 TLS 1.0 可能在不久的将来被一些供应商弃用。

作为向 API 发出出站请求的客户端,在注册表中禁用 SSL3 是否会对 .NET 框架产生影响?我看到默认情况下未启用 TLS 1.1 和 1.2,我们是否必须通过注册表启用它?回复 http://support.microsoft.com/kb/245030 .

经过一些调查,我相信注册表设置不会有任何影响,因为它们适用于 IIS(服务器子项)和浏览器(客户端子项)。

抱歉,这篇文章变成了多个问题,然后是“可能”的答案。

最佳答案

一些对其他答案发表评论的人指出,将 System.Net.ServicePointManager.SecurityProtocol 设置为特定值意味着您的应用将无法利用 future 的 TLS 版本可能会成为 .NET future 更新中的默认值。不要指定固定的协议(protocol)列表,而是执行以下操作:

对于 .NET 4.7 或更高版本,不要设置 System.Net.ServicePointManager.SecurityProtocol。默认值 (SecurityProtocolType.SystemDefault) 将允许操作系统使用它知道并已配置的任何版本,包括在创建应用程序时可能不存在的任何新版本。

对于较早版本的 .NET Framework,您可以改为打开或关闭您知道和关心的协议(protocol),让其他任何协议(protocol)保持原样。

在不影响其他协议(protocol)的情况下开启 TLS 1.1 和 1.2:

System.Net.ServicePointManager.SecurityProtocol |= 
    SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

注意使用 |= 来打开这些标志而不关闭其他标志。

在不影响其他协议(protocol)的情况下关闭 SSL3:

System.Net.ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3;

关于.net - .NET 4.5 中的默认安全协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28286086/

相关文章:

将 Stripe Apple Pay 按钮添加到 ionic 移动应用程序时出现 SSL 错误

c# - EndpointDispatcher 的 ContractFilter 不匹配(错误处理)

security - 为什么 Amazon Web Services 的登录页面 URL 很长

database - 如何保护数据库连接字符串

c# - 通过 Postman 进行 HMAC 身份验证

python - 未正确解析带有 SSLv2Record 的 Scapy 发送/嗅探数据包

java - 数字证书如何在SSL之上提供额外的安全性

c# - 如何在 Controller 中获取登录用户的 ID?

c# - 如何从 pdf 文件中提取附件?

c# - 将 Visual Studio 文件夹结构导出到 Excel