【问题标题】:supporting TLS 1.2 in HttpClient C#在 HttpClient C# 中支持 TLS 1.2
【发布时间】:2020-04-10 18:30:02
【问题描述】:

下午好! 我使用 HttpClient 使用 Azure Maps API。 如何启用对 TLS 1.2 的支持? 据我所知,在 Framework 4.6+ 中它是受支持的。我不应该为此做任何事情吗?

【问题讨论】:

  • TLS 1.2 已经可以使用。你不需要做任何事情。为什么这样问?您使用的是什么框架(旧版/核心版、编号)和操作系统版本?
  • 您是否在不受支持的操作系统版本上运行,例如 Windows Server 2008R2 或 Windows Vista?您可能需要应用一些操作系统补丁来启用 TLS1.2。
  • 您有实际问题吗?有实际问题吗?您是否在问如何验证是否使用了 TLS1.2?或者实际上,如何restrict 仅连接到 TLS1.2?这是您不应该的,因为在添加 TLS1.3 时您必须重新部署您的应用程序

标签: c# httpclient azure-maps


【解决方案1】:

使用ServicePointManager 设置安全协议。

获取或设置由 ServicePointManager 对象管理的 ServicePoint 对象使用的安全协议。

HttpClient httpClient = new HttpClient();   

//specify to use TLS 1.2 as default connection
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

此属性选择用于新连接的安全套接字层 (SSL) 或传输层安全 (TLS) 协议的版本;现有连接不会改变。

从 .NET Framework 4.7 开始,此属性的默认值为 SecurityProtocolType.SystemDefault。这允许基于 SslStream(如 FTP、HTTP 和 SMTP)的 .NET Framework 网络 API 从操作系统或系统管理员执行的任何自定义配置继承默认安全协议。

【讨论】:

  • 您不需要在 .NET Framework 4.6+ 和受支持的操作系统版本中执行此操作。它也没有启用 TLS1.2,它阻止使用任何更低的。在 4.6 之前,协商从 TLS1.1 开始向下,需要切换来强制 TLS1.2
  • 我可能误解了这个问题,但我认为 OP 想知道如何为 HttpClient 设置 SecurityProtocol。实际上,代码限制为仅使用 TLS 1.2,因为我认为这是他的意图。
  • 这比整个问题更有意义,但是正如文档所说,OP 将不得不修改代码以支持 TLS1.3
  • 我听说 Azure Maps 将从 2020 年 2 月 1 日起停止对 TLS 1.0 和 1.1 的支持,我想知道是否应该针对我的情况做点什么。据我了解 - 没什么,如果我使用 .Net Framework 4.6.1
  • 是的,默认是最支持的,所以基本上你不需要像@PanagiotisKanavos所说的那样做任何事情。
【解决方案2】:

一般无需在应用程序中指定任何配置即可采用最新的 TLS 协议。

docs.microsoft.com for earlier than .Net 4.7 上概述了最佳实践和方案。

在较高级别上,您应该进行审核以确保您的应用程序不会对较低的 TLS 版本产生任何硬依赖。但否则不需要任何工作。

我们建议您:

  • 在您的应用程序上定位 .NET Framework 4.7 或更高版本。在 WCF 应用上定位 .NET Framework 4.7.1 或更高版本。
  • 不要指定 TLS 版本。配置您的代码以让操作系统决定 TLS 版本。
  • 执行彻底的代码审核以验证您没有指定 TLS 或 SSL 版本。

当您的应用让操作系统选择 TLS 版本时:

  • 它会自动利用未来添加的新协议, 例如 TLS 1.3。
  • 操作系统会阻止发现不安全的协议。

【讨论】:

  • 如何指定至少要使用的证书?我需要一个特定 CA 颁发的证书来启用双向 TLS。
【解决方案3】:

TLS best practice 上的 Microsoft 文档值得探索

对我来说,通过添加以下注册表项之一解决了这个问题:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    相关资源
    最近更新 更多