

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

使用這些測試來判斷裝置與 之間的傳輸層安全通訊協定 (TLS) AWS IoT 是否安全。

**注意**  
Device Advisor 現在支援 TLS 1.3。

## Happy Path
<a name="happy-path"></a>

**TLS Connect**  <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，但有來自裝置或 的 TLS 警告訊息 AWS IoT。
+ **失敗** — 由於交握錯誤 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>

**TLS 裝置支援 AWS IoT 建議的密碼套件**  <a name="TLS_DeviceSupport_For_IOT"></a>
驗證來自待測裝置的 TLS 用戶端 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 Connect** 測試案例通過，我們建議您增加裝置的 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，但有來自裝置或 的 TLS 警告訊息 AWS IoT。
+ **失敗** — 測試中的裝置無法完成 TLS 交握， AWS IoT 因為交握過程中發生錯誤。

## 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。