强制使用最低TLS版本 - AWS SDK for JavaScript

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

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

强制使用最低TLS版本

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

重要

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

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

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

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

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

验证 Open 的版本SSL和 TLS

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

node -p process.versions

列表SSL中的 Open 版本是 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
Enforce TLS 1.2

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

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

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

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

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

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

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

import https from "https"; import { NodeHttpHandler } from "@smithy/node-http-handler"; import { DynamoDBClient } from "@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 中使用 for 时,浏览器设置会控制所TLS使用的版本。SDK浏览器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。