强制在适用于 .NET 的 Amazon SDK中实施最低 TLS 版本 - 适用于 .NET 的 Amazon SDK(V3)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

适用于 .NET 的 Amazon SDK 版本 4(V4)已经发布!

要开始使用新版本的 SDK,请参阅 适用于 .NET 的 Amazon SDK(V4)开发人员指南,尤其是关于迁移到版本 4 的主题。

强制在适用于 .NET 的 Amazon SDK中实施最低 TLS 版本

要提高与 Amazon 服务通信时的安全性,您应将适用于 .NET 的 Amazon SDK配置为使用 TLS 1.2 或更高版本。

适用于 .NET 的 Amazon SDK 使用底层 .NET 运行时来确定要使用哪个安全协议。默认情况下,当前版本的 .NET 使用操作系统支持的最新的已配置协议。您的应用程序可以覆盖此开发工具包行为,但不建议 这样做。

.NET 内核

默认情况下,.NET Core 使用操作系统支持的最新的已配置协议。适用于 .NET 的 Amazon SDK 不提供覆盖它的机制。

如果您使用的 .NET Core 版本低于 2.1,我们强烈 建议您升级 .NET Core 版本。

有关特定于每个操作系统的信息,请参阅以下内容。

(Windows):

Windows 的最新发行版默认情况下启用了 TLS 1.2 支持。如果您正在 Windows 7 SP1 或 Windows Server 2008 R2 SP1 上运行,则需要确保在注册表中启用 TLS 1.2 支持,如 https://learn.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#tls-12 所述。如果您正在运行较早的发行版,则必须升级操作系统。有关 Windows 中 TLS 1.3 支持的信息,请查看最新的 Microsoft 文档,了解所需的最低客户端或服务器版本。

macOS

如果您正在运行 .NET Core 2.1 或更高版本,则默认情况下启用 TLS 1.2。OS X Mavericks v10.9 或更高版本支持 TLS 1.2。.NET Core 版本 2.1 及更高版本需要 macOS 的更新版本,如 https://learn.microsoft.com/en-us/dotnet/core/install/windows?tabs=net80&pivots=os-macos 所述。

如果您使用的是 .NET Core 1.0,则 .NET Core 在 macOS 上使用 OpenSSL,这是一个必须单独安装的依赖项。OpenSSL 在 1.0.1 版本中增加了对 TLS 1.2 的支持,在 1.1.1 版本中增加了对 TLS 1.3 的支持。

(Linux):

Linux 上的 .NET Core 需要 OpenSSL,它与许多 Linux 发行版捆绑在一起。但也可以单独安装它。OpenSSL 在 1.0.1 版本中增加了对 TLS 1.2 的支持,在 1.1.1 版本中增加了对 TLS 1.3 的支持。如果您使用的是 .NET Core 的最新版本(2.1 或更高版本),并且已安装了程序包管理器,则可能已经为您安装了更高版本的 OpenSSL。

当然,您可以在终端中运行 openssl version 并验证版本是否低于 1.0.1。

NET Framework。

如果您正在运行 .NET Framework 的最新版本(4.7 或更高版本)和 Windows 的最新版本(对于客户端,至少为 Windows 8;对于服务器,则为 Windows Server 2012 或更高版本),则默认情况下启用并使用 TLS 1.2。

如果您使用的是不使用操作系统设置的 .NET Framework 运行时(.NET Framework 3.5 到 4.5.2),适用于 .NET 的 Amazon SDK 将尝试向支持的协议添加对 TLS 1.1 和 TLS 1.2 的支持。如果您使用的是 .NET Framework 3.5,则只有在安装了适当的热补丁时才会成功,如下所示:

  • Windows 10 版本 1511 和 Windows Server 2016 – KB3156421

  • Windows 8.1 和 Windows Server 2012 R2 – KB3154520

  • Windows Server 2012 – KB3154519

  • Windows 7 SP1 和 Server 2008 R2 SP1 – KB3154518

警告

自 2024 年 8 月 15 日起,适用于 .NET 的 Amazon SDK 将终止对 .NET Framework 3.5 的支持,并将支持的 .NET Framework 最低版本更改为 4.7.2。有关更多信息,请参阅博客文章 Important changes coming for .NET Framework 3.5 and 4.5 targets of the 适用于 .NET 的 Amazon SDK

如果您的应用程序正在 Windows 7 SP1 或 Windows Server 2008 R2 SP1 上较新的 .NET Framework 上运行,则需要确保在注册表中启用 TLS 1.2 支持,如 https://learn.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#tls-12 所述。较新版本的 Windows 在默认情况下已启用它。

有关将 TLS 与 .NET Framework 结合使用的详细最佳实践,请参阅 Microsoft 文章:https://learn.microsoft.com/en-us/dotnet/framework/network-programming/tls

Amazon Tools for PowerShell

Amazon Tools for PowerShell 使用适用于 .NET 的 Amazon SDK来实施所有对 Amazon 服务的调用。您的环境的行为取决于您正在运行的 Windows PowerShell 版本,如下所示。

Windows PowerShell 2.0 到 5.x

Windows PowerShell 2.0 到 5.x 在 .NET Framework 上运行。您可以使用以下命令验证 PowerShell 正在使用哪个 .NET 运行时(2.0 或 4.0)。

$PSVersionTable.CLRVersion
  • 使用 .NET Runtime 2.0 时,请按照之前提供的有关适用于 .NET 的 Amazon SDK和 .NET Framework 3.5 的说明进行操作。

    警告

    自 2024 年 8 月 15 日起,适用于 .NET 的 Amazon SDK 将终止对 .NET Framework 3.5 的支持,并将支持的 .NET Framework 最低版本更改为 4.7.2。有关更多信息,请参阅博客文章 Important changes coming for .NET Framework 3.5 and 4.5 targets of the 适用于 .NET 的 Amazon SDK

  • 使用 .NET Runtime 4.0 时,请按照之前提供的有关适用于 .NET 的 Amazon SDK和 .NET Framework 4+ 的说明进行操作。

Windows PowerShell 6.0

Windows PowerShell 6.0 和更高版本在 .NET Core 上运行。您可以通过运行以下命令验证正在使用哪个版本的 .NET Core。

[System.Reflection.Assembly]::GetEntryAssembly().GetCustomAttributes([System.Runtime.Versioning.TargetFrameworkAttribute], $true).FrameworkName

按照之前提供的有关适用于 .NET 的 Amazon SDK和相关 .NET Core 版本的说明进行操作。

Xamarin

对于 Xamarin,请参阅说明::https://learn.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/transport-layer-security。总而言之:

对于 Android

  • 需要 Android 5.0 或更高版本。

  • Project Properties (项目属性)Android 选项:HttpClient 实现必须设置为 Android,且 SSL/TLS 实现设置为 Native TLS 1.2+ (本机 TLS 1.2+)

对于 iOS

  • 需要 iOS 7 或更高版本。

  • Project Properties (项目属性)iOS Build (iOS 生成包):HttpClient 实现必须设置为 NSUrlSession

对于 macOS

  • 需要 macOS 10.9 或更高版本。

  • Project Options (项目选项)Build (生成包)Mac Build (Mac 生成包):HttpClient 实现必须设置为 NSUrlSession

Unity

您必须使用 Unity 2018.2 或更高版本,并使用 .NET 4.x 等效脚本运行时。您可以在 Project Settings (项目设置)Configuration (配置)Player (播放器) 中对此进行设置,如 https://docs.unity3d.com/2019.1/Documentation/Manual/ScriptingRuntimeUpgrade.html 所述。.NET 4.x 等效脚本运行时对运行 Mono 或 IL2CPP 的所有 Unity 平台启用 TLS 1.2 支持。

浏览器(用于 Blazor WebAssembly)

WebAssembly 在浏览器中而不是在服务器上运行,并使用浏览器处理 HTTP 流量。因此,TLS 支持由浏览器支持确定。

在 ASP.NET Core 3.1 的预览版中,Blazor WebAssembly 只在支持 WebAssembly 的浏览器中受支持,如 https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms 中所述。所有主流浏览器都先支持 TLS 1.2,然后才支持 WebAssembly。如果您的浏览器是这种情况,那么如果您的应用程序运行,它可以通过 TLS 1.2 进行通信。

有关更多信息和验证,请参阅浏览器的文档。