

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

# TLS
<a name="device-advisor-tests-tls"></a>

使用这些测试来确定您的设备和之间的传输层安全协议 (TLS) AWS IoT 是否安全。

**注意**  
Device Advisor 现在支持 TLS 1.3。

## 满意路径
<a name="happy-path"></a>

**TLS 连接**  <a name="TLS_Connect"></a>
验证被测设备能否完成 TLS 握手。 AWS IoT此测试不会验证客户端设备的 MQTT 执行。  

**Example API 测试用例定义：**  
`EXECUTION_TIMEOUT` 的默认值为 5 分钟。为了获得最佳效果，我们建议超时值为 2 分钟。

```
"tests":[
   {
      "name":"my_tls_connect_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  //in seconds
      },
      "test":{
         "id":"TLS_Connect",
         "version":"0.0.0"
      }
   }
]
```

**Example 测试用例输出：**  
+ **通过** — 被测设备已完成 TLS 握手 AWS IoT。
+ **通过但有警告** ——被测设备完成了 TLS 握手 AWS IoT，但设备或 AWS IoT发来了 TLS 警告消息。
+ **失败** — AWS IoT 由于握手错误，被测设备未能完成 TLS 握手。

**TLS 接收最大大小片段**  <a name="TLS_MaximumSize"></a>
此测试使用案例验证您的设备是否能够接收和处理 TLS 最大大小片段。您的测试设备必须使用 QoS 1 订阅预调配的主题，才能接收大的有效载荷。您可以使用配置 `${payload}` 自定义有效载荷。  

**Example API 测试用例定义：**  
`EXECUTION_TIMEOUT` 的默认值为 5 分钟。为了获得最佳效果，我们建议超时值为 2 分钟。

```
"tests":[
   {
      "name":"TLS Receive Maximum Size Fragments",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  //in seconds
         "PAYLOAD_FORMAT":"{"message":"${payload}"}", // A string with a placeholder ${payload}, or leave it empty to receive a plain string.
         "TRIGGER_TOPIC": "test_1" // A topic to which a device will subscribe, and to which a test case will publish a large payload.
      },
      "test":{
         "id":"TLS_Receive_Maximum_Size_Fragments",
         "version":"0.0.0"
      }
   }
]
```

## 密码套件
<a name="cipher-suites"></a>

** AWS IoT 推荐的密码套件的 TLS Device Support**  <a name="TLS_DeviceSupport_For_IOT"></a>
验证来自受测设备的 TLS Client Hello 消息中的密码套件是否包含建议的 [AWS IoT 密码套件](transport-security.md)。它提供了有关设备支持的密码套件的更多洞察。  

**Example API 测试用例定义：**  
`EXECUTION_TIMEOUT` 的默认值为 5 分钟。我们建议将超时值设置为 2 分钟。

```
"tests":[
   {
      "name":"my_tls_support_aws_iot_cipher_suites_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
      },
      "test":{
         "id":"TLS_Support_AWS_IoT_Cipher_Suites",
         "version":"0.0.0"
      }
   }
]
```

**Example 测试用例输出：**  
+ **通过** — 被测设备密码套件至少包含一个推荐的 AWS IoT 密码套件，并且不包含任何不支持的密码套件。
+ **通过但带有警告** - 设备密码套件至少包含一个 AWS IoT 密码套件，但是：

  1. 它不包含任何建议的密码套件。

  1. 它包含不支持的密码套件。 AWS IoT

  我们建议您验证任何不受支持的密码套件是否安全。
+ **失败** — 被测设备密码套件不包含任何 AWS IoT 支持的密码套件。

## 较大的服务器证书
<a name="larger-size"></a>

**TLS 较大服务器证书**  <a name="TLS_LargeServerCert"></a>
验证您的设备在接收和处理较大的服务器证书时，是否可以完成与 AWS IoT 的 TLS 握手。此测试使用的服务器证书的大小（以字节为单位）比 **TLS Connect** 测试用例和 IoT Core 中当前使用的证书大小 20 在此测试用例中，请 AWS IoT 测试设备的 TLS 缓冲空间如果缓冲空间足够大，TLS 握手将顺利完成。此测试不验证设备的 MQTT 实施。测试使用案例在 TLS 握手过程完成后结束。  

**Example API 测试用例定义：**  
`EXECUTION_TIMEOUT` 的默认值为 5 分钟。为了获得最佳效果，我们建议超时值为 2 分钟。如果此测试使用案例失败但 **TLS 连接**测试使用案例通过，我们建议您提高设备的 TLS 缓冲区空间限制。提高缓冲空间限制可确保设备在服务器证书大小增加时可以处理大小更大的服务器证书。

```
"tests":[
   {
      "name":"my_tls_large_size_server_cert_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
      },
      "test":{
         "id":"TLS_Large_Size_Server_Cert",
         "version":"0.0.0"
      }
   }
]
```

**Example 测试用例输出：**  
+ **通过** - 被测设备完成了与 AWS IoT的 TLS 握手。
+ **通过但有警告** ——被测设备完成了 TLS 握手 AWS IoT，但设备或 AWS IoT TLS 警告消息来自该设备。
+ **失败** — AWS IoT 由于握手过程中出现错误，被测设备未能完成 TLS 握手。

## TLS 不安全服务器证书
<a name="unsecure-server"></a>

**未被认可的 CA 签名**  <a name="TLS_Unsecure_Server_Cert"></a>
验证在向受测设备提供没有 ATS CA 有效签名的服务器证书时，该设备是否关闭连接。设备只能连接到提供有效证书的端点。  

**Example API 测试用例定义：**  
`EXECUTION_TIMEOUT` 的默认值为 5 分钟。我们建议将超时值设置为 2 分钟。

```
"tests":[
   {
      "name":"my_tls_unsecure_server_cert_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  //in seconds
      },
      "test":{
         "id":"TLS_Unsecure_Server_Cert",
         "version":"0.0.0"
      }
   }
]
```

**Example 测试用例输出：**  
+ **通过** — 被测设备关闭了连接。
+ **失败** — 被测设备已完成 TLS 握手 AWS IoT。

**TLS 不正确的主题名称服务器证书/不正确的主题通用名称（CN）/主题备用名称（SAN）**  <a name="TLS_Incorrect_Subject_Name"></a>
验证如果提供与请求的域名不同的域名服务器证书，被测设备是否会关闭连接。  

**Example API 测试用例定义：**  
`EXECUTION_TIMEOUT` 的默认值为 5 分钟。我们建议将超时值设置为 2 分钟。

```
"tests":[
   {
      "name":"my_tls_incorrect_subject_name_cert_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",   // in seconds
      },
      "test":{
         "id":"TLS_Incorrect_Subject_Name_Server_Cert",
         "version":"0.0.0"
      }
   }
]
```

**Example 测试用例输出：**  
+ **通过** — 被测设备关闭了连接。
+ **失败** — 被测设备完成了 TLS 握手 AWS IoT。

## TLS 已过期的服务器证书
<a name="expired-server"></a>

**已过期的服务器证书**  <a name="TLS_Expired_Server_Cert"></a>
验证如果被测试的设备的服务器证书已过期，该设备是否关闭连接。  

**Example API 测试用例定义：**  
`EXECUTION_TIMEOUT` 的默认值为 5 分钟。我们建议将超时值设置为 2 分钟。

```
"tests":[
   {
      "name":"my_tls_expired_cert_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  //in seconds
      },
      "test":{
         "id":"TLS_Expired_Server_Cert",
         "version":"0.0.0"
      }
   }
]
```

**Example 测试用例输出：**  
+ **通过** — 被测设备拒绝完成 TLS 握手。 AWS IoT设备在关闭连接之前发送 TLS 警报消息。
+ **通过但带有警告** - 受测设备拒绝完成与 AWS IoT的 TLS 握手。但是，它在关闭连接之前不会发送 TLS 警报消息。
+ **失败** — 被测设备使用完成 TLS 握手 AWS IoT。