强制实施最低版本 TLS - AWS SDK for JavaScript

我们已宣布即将终止对 AWS SDK for JavaScript v2 的支持。建议您迁移到 AWS SDK for JavaScript v3。有关日期、其他详细信息以及如何迁移的信息,请参阅链接的公告。

强制实施最低版本 TLS

重要

AWS SDK for JavaScript v2 会自动协商给定 AWS 服务端点支持的最高级别 TLS 版本。您可以选择强制执行应用程序要求的最低 TLS 版本,例如 TLS 1.2 或 1.3,但请注意,某些 AWS 服务端点不支持 TLS 1.3,因此,如果您强制执行 TLS 1.3,则某些调用可能会失败。

要提高与 AWS 服务通信时的安全性,请将 AWS SDK for JavaScript 配置为使用 TLS 1.2 或更高版本。

传输层安全性协议(TLS)是 Web 浏览器和其它应用程序使用的一种协议,用于确保通过网络交换的数据的隐私和完整性。

在 Node.js 中验证并强制执行 TLS

将 AWS SDK for JavaScript 与 Node.js 结合使用时,将使用底层 Node.js 安全层设置 TLS 版本。

Node.js 12.0.0 及更高版本使用支持 TLS 1.3 的最低版本 OpenSSL 1.1.1b。AWS SDK for JavaScript v3 在 TLS 1.3 可用时默认使用该版本,但如果需要,可默认使用较低的版本。

验证 OpenSSL 和 TLS 的版本

要获取计算机上的 Node.js 使用的 OpenSSL 版本,请运行以下命令。

node -p process.versions

列表中的 OpenSSL 版本是 Node.js 使用的版本,如以下示例所示。

openssl: '1.1.1b'

要获取计算机上的 Node.js 使用的 TLS 版本,请启动 Node shell 并按顺序运行以下命令。

> var tls = require("tls"); > var tlsSocket = new tls.TLSSocket(); > tlsSocket.getProtocol();

最后一条命令输出 TLS 版本,如以下示例所示。

'TLSv1.3'

Node.js 默认使用此版本的 TLS,如果调用不成功,则会尝试协商另一个版本的 TLS。

强制使用最低版本的 TLS

当调用失败时,Node.js 会协商 TLS 的版本。您可以在此协商期间强制执行允许的最低 TLS 版本,无论是在命令行运行脚本时,还是根据您的 JavaScript 代码中的请求。

要通过命令行指定最低 TLS 版本,必须使用 Node.js 版本 11.0.0 或更高版本。要安装特定的 Node.js 版本,请先按照 Node Version Manager Installing and Updating 中的步骤安装 Node Version Manager(nvm)。然后运行以下命令来安装并使用特定版本的 Node.js。

nvm install 11 nvm use 11
Enforcing TLS 1.2

要强制规定 TLS 1.2 是允许的最低版本,请在运行脚本时指定 --tls-min-v1.2 参数,如以下示例所示。

node --tls-min-v1.2 yourScript.js

要在 JavaScript 代码中为特定请求指定允许的最低 TLS 版本,请使用 httpOptions 参数指定协议,如以下示例所示。

const https = require("https"); const {NodeHttpHandler} = require("@aws-sdk/node-http-handler"); const {DynamoDBClient} = require("@aws-sdk/client-dynamodb"); const client = new DynamoDBClient({ region: "us-west-2", requestHandler: new NodeHttpHandler({ httpsAgent: new https.Agent( { secureProtocol: 'TLSv1_2_method' } ) }) });
Enforcing TLS 1.3

要强制规定 TLS 1.3 是允许的最低版本,请在运行脚本时指定 --tls-min-v1.3 参数,如以下示例所示。

node --tls-min-v1.3 yourScript.js

要在 JavaScript 代码中为特定请求指定允许的最低 TLS 版本,请使用 httpOptions 参数指定协议,如以下示例所示。

const https = require("https"); const {NodeHttpHandler} = require("@aws-sdk/node-http-handler"); const {DynamoDBClient} = require("@aws-sdk/client-dynamodb"); const client = new DynamoDBClient({ region: "us-west-2", requestHandler: new NodeHttpHandler({ httpsAgent: new https.Agent( { secureProtocol: 'TLSv1_3_method' } ) }) });

在浏览器脚本中验证并强制执行 TLS

当您在浏览器脚本中使用 SDK for JavaScript 时,浏览器设置会控制所使用的 TLS 版本。浏览器使用的 TLS 版本无法通过脚本发现或设置,必须由用户配置。要验证和强制执行浏览器脚本中使用的 TLS 版本,请参阅特定浏览器的说明。

Microsoft Internet Explorer
  1. 打开 Internet Explorer

  2. 从菜单栏中选择工具 - Internet 选项 - 高级选项卡。

  3. 向下滚动到安全类别,手动选中使用 TLS 1.2 选项框。

  4. 单击确定

  5. 关闭浏览器并重新启动 Internet Explorer。

Microsoft Edge
  1. 在 Windows 菜单搜索框中,键入 Internet options

  2. 最佳匹配下,单击 Internet 选项

  3. Internet 属性窗口的高级选项卡上,向下滚动到安全部分。

  4. 选中用户 TLS 1.2 复选框。

  5. 单击 确定

Google Chrome
  1. 打开 Google Chrome

  2. Alt F 并选择设置

  3. 向下滚动并选择显示高级设置...

  4. 向下滚动到系统部分,然后单击打开代理设置...

  5. 选择高级选项卡。

  6. 向下滚动到安全类别,手动选中使用 TLS 1.2 选项框。

  7. 单击确定

  8. 关闭浏览器并重启 Google Chrome。

Mozilla Firefox
  1. 打开 Firefox

  2. 在地址栏中键入 about:config,然后按 Enter。

  3. 搜索字段中输入 tls。找到并双击 security.tls.version.min 条目。

  4. 将整数值设置为 3 以强制将 TLS 1.2 协议设为默认协议。

  5. 单击 确定

  6. 关闭浏览器并重启 Mozilla Firefox。

Apple Safari

没有启用 SSL 协议的选项。如果您使用的是 Safari 浏览器 7 或更高版本,则会自动启用 TLS 1.2。