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

AWS SDK for JavaScriptV3 API 参考指南详细描述了AWS SDK for JavaScript版本 3 (V3) 的所有 API 操作。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

强制实施最低 TLS 版本

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

重要

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

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

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

当您AWS SDK for JavaScript与 Node.js 一起使用时,底层 Node.js 安全层用于设置 TLS 版本。

Node.js 12.0.0 及更高版本使用 OpenSSL 1.1.1b 的最低版本,它支持 TLS 1.3。AWS SDK for JavaScriptv3 在可用时默认使用 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 的版本。在此协商期间,无论是在命令行运行脚本时,还是在JavaScript代码中根据请求运行脚本时,您都可以强制使用允许的最低 TLS 版本。

要从命令行指定最低 TLS 版本,必须使用 Node.js 版本 11.0.0 或更高版本。要安装特定的 Node.js 版本,请首先使用节点版本管理器安装和更新中的步骤安装节点版本管理器 (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

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

Microsoft Internet Explorer
  1. 打开 IE 浏览器

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

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

  4. 单击 OK(确定)。

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

Microsoft Edge
  1. 在 Windows 菜单搜索框中,键入互联网选项

  2. 在 “最佳匹配” 下,单击 “互联网选项”。

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

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

  5. 单击 OK(确定)。

Google Chrome
  1. 打开谷歌浏览器

  2. 单击 Alt F 并选择 “设置”

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

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

  5. 选择 “高级” 选项卡。

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

  7. 单击 OK(确定)。

  8. 关闭浏览器并重启谷歌浏览器。

Mozilla Firefox
  1. 打开火狐浏览器

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

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

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

  5. 单击 OK(确定)。

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

Apple Safari

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