亚马逊AWS官方博客
TLS 1.3 与适用于 Java 的 AWS SDK 版本 1.9.5 至 1.10.31 不兼容
AWS 致力于确保您的 Java 应用程序使用最新的加密协议进行连接,进而提高性能和安全性。这包括传输层安全性协议(TLS)版本 1.3,我们正努力在所有服务中添加对该版本的支持。本博客旨在告知您,适用于 Java 的 AWS SDK 的旧版本(从版本 1.9.5 到 1.10.31)与 TLS 1.3 不兼容。如果您使用的是这些版本,要想继续能够连接到 AWS 端点,您将需要执行我们在下面概述的三种可能的操作之一。如果您未执行任何操作,则使用受影响的版本的客户在尝试连接到提供 TLS 1.3 的 AWS 端点时将失败,并显示“SecurityException: Invalid SSL master secret
”。 适用于 Java 的 AWS SDK 版本 1.10.32 及更高版本,包括适用于 Java 的 AWS SDK 2.x,将不会受到影响。
哪些适用于 Java 的 AWS SDK 版本无法使用 TLS 1.3 进行连接?
如果您的应用程序符合以下两个条件,则可能会受到影响:
- 您的应用程序使用的适用于 Java 的 AWS SDK 版本介于版本 1.9.5 和 1.10.31 之间,并且
- 您使用的 JDK 版本默认启用 TLS 1.3,或者您已使用
jdk.tls.client.protocols
系统属性明确启用 TLS 1.3。
如果您的应用程序同时符合这两个条件,则当 AWS 服务支持 TLS 1.3 时,通过适用于 Java 的 SDK 进行的所有 API 调用都将失败。
请注意,如果您的应用程序仅满足第一个条件,那么以后将您的 JDK 升级到启用 1.3 的版本时,您的应用程序可能会受到影响。2022 年 7 月 19 日,Java 8 已默认启用 TLS 1.3。从 2022 年 5 月 11 日起,JDK 版本 11 及更高版本默认启用 TLS 1.3。
我如何获知自己是否会受到影响?
您可以使用 Maven 依赖项插件,检查以下 Maven 命令输出中的 aws-java-sdk-core 版本,来确定您当前是否正在使用受影响的 AWS SDK Java 版本:
以下示例显示 MyApp 应用程序依赖适用于 Java 的 SDK 版本 1.9.5:
选项 1(最轻松):将您的应用程序升级到适用于 Java 的 AWS SDK 1.12.x 或更高版本。
将您的应用程序升级到适用于 Java 的 SDK 1.x 支持的最新版本是最轻松的选择。请注意,版本 1.9.x、1.10.x 和 1.12.x 之间存在一些颠覆性的 SDK 行为更改。例如,1.10.x 及更高版本默认启用限制重试,并从服务客户端接口中移除了一些以前公共 API。 这些版本并不兼容,您需要仔细测试您的应用程序,确保它在更新版本下按预期运行。
选项 2(推荐):将您的应用程序升级到适用于 Java 的 AWS SDK 版本 2.x。
适用于 Java 的 AWS SDK 2.x 对基于 Java 8+ 构建的 1.x 代码库进行了大量重写。除了解决 TLS 1.3 问题之外,它还包含了许多更新,例如更高的一致性、易用性和强制实施的不变性。 请访问我们的迁移指南,查看版本 2.x 中的所有新的主要功能,以及有关如何将代码从版本 1.x 迁移到版本 2.x 的指导信息。
选项 3(短期解决方法):暂时在启用 SDK 的协议中省略 TLS 1.3。
我们知道您可能无法立即将应用程序升级到适用于 Java 的 SDK 版本 1.12.x 或 2.x。例如,您使用的第三方库可能在后台使用了一个受影响的版本。在这些情况下,您可以使用 jdk.tls.client.protocols
系统属性暂时从启用的协议中显式省略 TLS 1.3。例如,从命令行运行以下命令将仅启用 TLS 1.2:
请注意,在将应用程序升级到适用于 Java 的 SDK 版本 1.12.x 或 2.x 时,建议将此选项作为短期解决方法,因为它将阻止使用更新、更安全的 TLS 版本。
使用 AWS CloudTrail Lake 可在 AWS 账户中查找带受影响版本的应用程序
AWS CloudTrail Lake 可用于查询由 CloudTrail 记录的事件。执行以下步骤创建数据湖,该数据湖可用于查找由应用程序使用的 SDK 版本:
- 创建 CloudTrail 数据湖。请参见用户指南以创建事件数据存储。
- 创建数据存储后,记录的正文将包含字段,这些字段可用于确定请求的操作以及发出请求的时间和位置。有关详细信息,请参见 CloudTrail 记录内容的用户指南。
- 请遵循用户指南以查询和保存查询结果。
记录中的“userAgent”字段包含用于发出请求的 Agent 的 SDK 版本。此字段可用于查找使用了受影响版本的应用程序。下面是一个示例查询,用于查找从 2022 年 11 月 19 日起使用 Java SDK 1.9.x 和 1.10.x 版本为 EventDatastoreID sample-Data-Store-Id 发出的所有请求。
select userIdentity, eventSource, awsRegion,
eventName, eventType, eventTime, userAgent,
requestParameters, sourceIPAddress
from sample-Data-Store-Id
where eventTime > '2022-11-19 00:00:00'
and userAgent like '%aws-sdk-java/1.9.%'
or userAgent like '%aws-sdk-java/1.10. %'
order by eventTime desc
请注意,示例查询还会产生有关未受直接影响的版本的潜在结果,因为该查询还将找到低于版本 1.9.5 和高于版本 1.10.31 的版本。
如果您有任何问题或疑虑,可以在 Github 上联系我们。
Original URL: https://thinkwithwp.com/cn/blogs/developer/tls-1-3-incompatibility-with-aws-sdk-for-java-versions-1-9-5-to-1-10-31/