

 [适用于 JavaScript 的 AWS SDK V3 API 参考指南](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/)详细描述了 适用于 JavaScript 的 AWS SDK 版本 3 (V3) 的所有 API 操作。

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

# 强制使用最低版本的 TLS
<a name="enforcing-tls"></a>

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

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

**重要**  
自 2024 年 6 月 10 日起，我们[宣布](https://aws.amazon.com/blogs//security/faster-aws-cloud-connections-with-tls-1-3/)在每个 AWS 地区的 AWS 服务 API 终端节点上都可用 TLS 1.3。 适用于 JavaScript 的 AWS SDK v3 本身不会协商 TLS 版本。相反，它使用由 Node.js 确定的 TLS 版本，该版本可通过 `https.Agent` 进行配置。 AWS 建议使用 Node.js 的当前活动 LTS 版本。

## 在 Node.js 中验证并强制执行 TLS
<a name="node-verify-enforce-tls"></a>

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

Node.js 12.0.0 及更高版本使用支持 TLS 1.3 的最低版本 OpenSSL 1.1.1b。当 TLS 1.3 可用时，Node.js 默认使用该版本。如有必要，您可以明确指定其他版本。

### 验证 OpenSSL 和 TLS 的版本
<a name="verify-tls-version"></a>

要获取计算机上的 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 版本
<a name="checking-tls-version-min-max"></a>

开发人员可以使用以下脚本来检查 Node.js 中支持的最低和最高 TLS 版本：

```
import tls from "tls";
console.log("Supported TLS versions:", tls.DEFAULT_MIN_VERSION + " to " + tls.DEFAULT_MAX_VERSION);
```

最后一个命令输出默认的最低和最高 TLS 版本，如以下示例所示。

```
Supported TLS versions: TLSv1.2 to TLSv1.3
```

### 强制使用最低版本的 TLS
<a name="enforce-tls-version"></a>

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

要通过命令行指定最低 TLS 版本，必须使用 Node.js 版本 11.4.0 或更高版本。要安装特定的 Node.js 版本，请先按照 [Node Version Manager Installing and Updating](https://github.com/nvm-sh/nvm#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 版本，请使用`minVersion`参数指定协议，如以下示例所示。

```
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(
            {
                minVersion: 'TLSv1.2'
            }
        )
    })
});
```

------
#### [ Enforce TLS 1.3 ]

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

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

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

```
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(
            {
                minVersion: 'TLSv1.3'
            }
        )
    })
});
```

------

## 在浏览器脚本中验证并强制执行 TLS
<a name="browser-verify-enforce-tls"></a>

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

------
#### [ Microsoft Internet Explorer ]

1. 打开 **Internet Explorer**。

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

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

1. 单击**确定**。

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

------
#### [ Microsoft Edge ]

1. 在 Windows 菜单搜索框中，键入*Internet options*。

1. 在**最佳匹配**下，单击 **Internet 选项**。

1. 在 **Internet 属性**窗口的**高级**选项卡上，向下滚动到**安全**部分。

1. 选中**用户 TLS 1.2** 复选框。

1. 单击**确定**。

------
#### [ Google Chrome ]

1. 打开 **Google Chrome**。

1. 按 **Alt F** 并选择**设置**。

1. 向下滚动并选择**显示高级设置...**。

1. 向下滚动到**系统**部分，然后单击**打开代理设置...**。

1. 选择**高级**选项卡。

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

1. 单击**确定**。

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

------
#### [ Mozilla Firefox ]

1. 打开 **Firefox**。

1. 在地址栏中键入 **about:config**，然后按 Enter。

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

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

1. 单击**确定**。

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

------
#### [ Apple Safari ]

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

------

## 在 v 适用于 JavaScript 的 AWS SDK 3 请求中检索 TLS 版本
<a name="retrieve-tls-version"></a>

您可以使用以下脚本记录 AWS SDK 请求中使用的 TLS 版本：

```
import { S3Client, ListBucketsCommand } from "@aws-sdk/client-s3";
import tls from "tls";

const client = new S3Client({ region: "us-east-1" });

const tlsSocket = new tls.TLSSocket();

client.middlewareStack.add((next, context) => async (args) => {
  console.log(`Using TLS version: ${tlsSocket.getProtocol()}`);
    return next(args);
});
```

最后一条命令会输出当前使用的 TLS 版本，如下例所示。

```
Using TLS version: TLSv1.3
```