

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

# 服务器身份验证
<a name="server-authentication"></a>

当您的设备或其他客户端尝试连接时 AWS IoT Core， AWS IoT Core 服务器将发送一个 X.509 证书，您的设备将使用该证书对服务器进行身份验证。身份验证通过验证 [X.509 证书链](x509-client-certs.md)在 TLS 层进行。这与浏览器在您访问 HTTPS URL 时使用的方法相同。如果要使用您自己的证书颁发机构提供的证书，请参阅 [管理 CA 证书](manage-your-CA-certs.md)。

当您的设备或其他客户端与 AWS IoT Core 端点建立 TLS 连接时，会 AWS IoT Core 显示一个证书链，设备使用该证书链来验证它们是否正在 AWS IoT Core 与之通信，而不是其他服务器模仿 AWS IoT Core。呈现的链取决于设备连接的端点类型和客户端在 TLS 握手期间 AWS IoT Core 协商的[密码套件](transport-security.md)的组合。

## 端点类型
<a name="endpoint-types"></a>

AWS IoT Core 支持`iot:Data-ATS`。 `iot:Data-ATS`终端节点出示由[亚马逊信任服务](https://www.amazontrust.com/repository/) CA 签署的服务器证书。

ATS 端点提供的证书由 Starfield 进行交叉签名。某些 TLS 客户端实现要求验证信任根，并要求将 Starfield CA 证书安装到客户端的信任存储中。

**警告**  
建议不要使用对整个证书（包括颁发者名称等）进行哈希处理的证书固定方法，因为这将导致证书验证失败，因为我们提供的 ATS 证书由 Starfield 进行交叉签名并具有其它颁发者名称。

**重要**  
使用 `iot:Data-ATS` 端点。赛门铁克和威瑞信证书已被弃用，不再受其支持。 AWS IoT Core

您可以使用 `describe-endpoint` 命令创建 ATS 端点。

```
aws iot describe-endpoint --endpoint-type iot:Data-ATS
```

`describe-endpoint` 命令采用以下格式返回端点。

```
account-specific-prefix.iot.your-region.amazonaws.com
```

**注意**  
首次调用 `describe-endpoint` 时，会创建一个端点。对 `describe-endpoint` 的所有后续调用将返回同一端点。

**注意**  
要在 AWS IoT Core 控制台中查看您的`iot:Data-ATS`终端节点，请选择**设置**。控制台仅显示 `iot:Data-ATS` 端点。

### `IotDataPlaneClient`使用适用于 Java 的 AWS SDK 创建
<a name="java-client"></a>

要创建使用 `iot:Data-ATS` 端点的 `IotDataPlaneClient`，您必须执行以下操作。
+ 使用 [DescribeEndpoint](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeEndpoint.html)API 创建`iot:Data-ATS`终端节点。
+ 在创建 `IotDataPlaneClient` 时指定该端点。

以下示例执行这两项操作。

```
public void setup() throws Exception {
        IotClient client = IotClient.builder().credentialsProvider(CREDENTIALS_PROVIDER_CHAIN).region(Region.US_EAST_1).build();
        String endpoint = client.describeEndpoint(r -> r.endpointType("iot:Data-ATS")).endpointAddress();
        iot = IotDataPlaneClient.builder()
                                .credentialsProvider(CREDENTIALS_PROVIDER_CHAIN)
                                .endpointOverride(URI.create("https://" + endpoint))
                                .region(Region.US_EAST_1)
                                .build();
}
```

## 用于服务器身份验证的 CA 证书
<a name="server-authentication-certs"></a>

根据您使用的数据端点类型和协商的密码套件， AWS IoT Core 服务器身份验证证书由以下根 CA 证书之一签名：

**Amazon Trust Services 端点（首选）**

**注意**  
您可能需要右键单击这些链接，然后选择**将链接另存为...** 将这些证书另存为文件。
+ RSA 2048 位密钥：[https://www.amazontrust.com/repository/AmazonRootCA1.pem](https://www.amazontrust.com/repository/AmazonRootCA1.pem)。
+ RSA 4096 位密钥：Amazon Root CA 2。留待将来使用。
+ ECC 256 位密钥：[https://www.amazontrust.com/repository/AmazonRootCA3.pem](https://www.amazontrust.com/repository/AmazonRootCA3.pem)。
+ ECC 384 位密钥：Amazon Root CA 4。留待将来使用。

这些证书都由 [ Starfield 根 CA 证书](https://www.amazontrust.com/repository/SFSRootCAG2.pem)进行交叉签名。自 2018 年 5 月 9 日在亚太 AWS IoT Core 地区（孟买）地区推出以来，所有新地区仅提供 ATS 证书。 AWS IoT Core 

**VeriSign 终端节点（旧版）**
+ RSA 2048 位密钥：[3 VeriSign 类公共主要 G5](https://www.digicert.com/kb/digicert-root-certificates.htm) 根 CA 证书

## 服务器身份验证指南
<a name="server-authentication-guidelines"></a>

有很多变量会影响设备验证 AWS IoT Core 服务器身份验证证书的能力。例如，设备的内存可能太有限，无法容纳所有可能的根 CA 证书，或者设备可能会实施非标准的证书验证方法。由于这些原因，我们建议遵循以下准则：
+ 我们建议您使用 ATS 端点并安装所有受支持的 Amazon Root CA 证书。
+ 如果您无法在设备上存储所有这些证书，并且您的设备未使用基于 ECC 的验证，则可以省略 [https://www.amazontrust.com/repository/AmazonRootCA3.pem](https://www.amazontrust.com/repository/AmazonRootCA3.pem) 和 [https://www.amazontrust.com/repository/AmazonRootCA4.pem](https://www.amazontrust.com/repository/AmazonRootCA4.pem) ECC 证书。如果您的设备未实施基于 RSA 的证书验证，则可以省略 [https://www.amazontrust.com/repository/AmazonRootCA1.pem](https://www.amazontrust.com/repository/AmazonRootCA1.pem) 和 [https://www.amazontrust.com/repository/AmazonRootCA2.pem](https://www.amazontrust.com/repository/AmazonRootCA2.pem) RSA 证书。您可能需要右键单击这些链接，然后选择**将链接另存为...** 将这些证书另存为文件。
+ 如果在连接到 ATS 端点时遇到服务器证书验证问题，请尝试将相关的交叉签名的 Amazon Root CA 证书添加到您的信任存储中。您可能需要右键单击这些链接，然后选择**将链接另存为...** 将这些证书另存为文件。
  + [交叉签名 Amazon Root CA 1](https://www.amazontrust.com/repository/G2-RootCA1.pem)
  + [交叉签名的 Amazon Root CA 2](https://www.amazontrust.com/repository/G2-RootCA2.pem) - 预留供将来使用。
  + [交叉签名 Amazon Root CA 3](https://www.amazontrust.com/repository/G2-RootCA3.pem)
  + [交叉签名的 Amazon Root CA 4 - 预留供将来使用。](https://www.amazontrust.com/repository/G2-RootCA4.pem)
+ 如果您遇到服务器证书验证问题，则您的设备可能需要明确信任根 CA。尝试将 [https://www.amazontrust.com/repository/SFSRootCAG2.pem](https://www.amazontrust.com/repository/SFSRootCAG2.pem) 添加到您的信任存储。
+ 如果您在执行上述步骤后仍遇到问题，请联系 [AWS 开发人员支持](https://aws.amazon.com/premiumsupport/plans/developers/)。

**注意**  
CA 证书具有一个过期日期，在该日期后，这些证书将无法用于验证服务器的证书。可能必须在 CA 证书的过期日期前替换这些证书。请确保可以更新所有设备或客户端上的根 CA 证书，以确保持续的连接并保持最新的安全最佳实践。

**注意**  
在设备代码 AWS IoT Core 中连接时，请将证书传递到您用于连接的 API。您使用的 API 因 SDK 而异。有关更多信息，请参阅[AWS IoT Core 设备 SDKs](iot-sdks.md)。