

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

# X.509 客户端证书


X.509 证书提供了 Amazon IoT 对客户端和设备连接进行身份验证的功能。客户端必须先注册客户证书， Amazon IoT 然后才能与之通信 Amazon IoT。一个客户端证书可以在同一个区域的多个 Amazon Web Services 账户 s 中注册 Amazon Web Services 区域 ，以便于在同一区域的设备 Amazon Web Services 账户之间移动设备。请参阅[在多账户注册中使用多个 Amazon Web Services 账户 X.509 客户端证书](#multiple-account-cert)了解更多信息。

我们建议为每个设备或客户端提供一个唯一的证书，以便进行精细的客户端管理操作，包括证书吊销。设备和客户端还必须支持证书轮换和更换，以帮助确保在证书过期时平稳运行。

有关使用 X.509 证书支持多个设备的信息，请参阅 [设备预调配](iot-provision.md) 以查看 Amazon IoT 支持的不同证书管理和预调配选项。

**Amazon IoT 支持以下类型的 X.509 客户端证书：**
+  由... 生成的 X.509 证书 Amazon IoT
+  由注册的 CA 签署的 X.509 证书。 Amazon IoT
+  由未注册到 Amazon IoT的 CA 签发的 X.509 证书。

本节介绍如何在 Amazon IoT中管理 X.509 证书。您可以使用 Amazon IoT 控制台或 Amazon CLI 执行以下证书操作：
+ [创建 Amazon IoT 客户证书](device-certs-create.md)
+ [创建您自己的客户端证书](device-certs-your-own.md)
+ [注册客户端证书](register-device-cert.md)
+ [激活或停用客户端证书](activate-or-deactivate-device-cert.md)
+ [吊销客户端证书](revoke-ca-cert.md)

有关执行这些操作的 Amazon CLI 命令的更多信息，请参阅 [Amazon IoT CLI 参考](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/index.html)。

## 使用 X.509 客户端证书


X.509 证书对与的客户端和设备连接进行身份验证。 Amazon IoT与其它身份和身份验证机制相比，X.509 证书具有多项优势。有了 X.509 证书，可以将非对称密钥用于设备。例如，您可以将私有密钥刻录到设备上的安全存储中，这样敏感的加密材料永远不会离开设备。X.509 证书可以通过用户名和密码或持有者令牌等其它方案提供更可靠的客户端身份验证，因为私有密钥永远不会离开设备。

Amazon IoT 使用 TLS 协议的客户端身份验证模式对客户端证书进行身份验证。TLS 支持适用于多种编程语言和操作系统并且通常用于为数据加密。在 TLS 客户端身份验证中， Amazon IoT 请求 X.509 客户端证书并根据证书注册表验证证书的状态。 Amazon Web Services 账户 然后，它要求客户提供与证书中包含的公钥相对应的私钥的所有权证明。 Amazon IoT 要求客户端向传输层安全 [(TLS) 协议发送服务器名称指示 (SNI) 扩展](https://tools.ietf.org/html/rfc3546#section-3.1)。有关配置 SNI 扩展的更多信息，请参阅 [运输安全 Amazon IoT Core](transport-security.md)。

为了便于客户机与 Amazon IoT 核心进行安全、一致的连接，X.509 客户端证书必须具备以下内容：
+ 已在 Amazon IoT Core 中注册。有关更多信息，请参阅 [注册客户端证书](register-device-cert.md)。
+ 状态为 `ACTIVE`。有关更多信息，请参阅 [激活或停用客户端证书](activate-or-deactivate-device-cert.md)。
+ 尚未达到证书到期日期。

您可以创建使用 Amazon Root CA 的客户端证书，并可以使用您自己的由其它证书颁发机构（CA）签发的客户端证书。有关使用 Amazon IoT 控制台创建使用 Amazon 根 CA 的证书的更多信息，请参阅[创建 Amazon IoT 客户证书](device-certs-create.md)。有关使用您自己的 X.509 证书的更多信息，请参阅 [创建您自己的客户端证书](device-certs-your-own.md)。

对于 CA 证书签发的证书过期日期和时间，将在创建 CA 证书时设置。由此生成的 X.509 证书将于世界标准时间 2049 年 12 月 31 日午夜 Amazon IoT 到期（2049-12-31T23：59:59 Z）。

Amazon IoT Device Defender 可以对您的 Amazon Web Services 账户 和支持常见物联网安全最佳实践的设备进行审计。这包括管理由您的 CA 或 Amazon Root CA 签署的 X.509 证书的到期日期。有关管理证书的到期日期的更多信息，请参阅[设备证书即将到期](https://docs.amazonaws.cn/iot-device-defender/latest/devguide/audit-chk-device-cert-approaching-expiration.html)和 [CA 证书即将到期](https://docs.amazonaws.cn/iot-device-defender/latest/devguide/audit-chk-ca-cert-approaching-expiration.html)。

在官方 Amazon IoT 博客上，[如何使用管理物联网设备证书轮换，深入探讨了设备证书轮换的管理和](https://www.amazonaws.cn/blogs/iot/how-to-manage-iot-device-certificate-rotation-using-aws-iot/)安全最佳实践 Amazon IoT。

## 在多账户注册中使用多个 Amazon Web Services 账户 X.509 客户端证书


多账户注册能够在同一区域或不同区域的 Amazon Web Services 账户之间移动设备。您可以在预生产账户中注册、测试和配置设备，然后在生产账户中注册并使用相同的设备和设备证书。您也可以在设备上注册客户端证书，或者在没有注册的 CA 的情况下注册设备证书 Amazon IoT。有关更多信息，请参阅 [Register a client certificate signed by an unregistered CA (CLI)](manual-cert-registration.md#manual-cert-registration-noca-cli)（注册由未注册的 CA 签发的客户端证书（CLI））。

**注意**  
用于多账户注册的证书在 `iot:Data-ATS`、`iot:Data`（旧式）、`iot:Jobs` 和 `iot:CredentialProvider` 端点类型中获得支持。有关 Amazon IoT 设备端点的更多信息，请参阅[Amazon IoT 设备数据和服务端点](iot-connect-devices.md#iot-connect-device-endpoints)。

使用多账户注册的设备必须将[服务器名称指示 (SNI) 扩展](https://tools.ietf.org/html/rfc3546#section-3.1)发送到传输层安全 (TLS) 协议，并在连接时在`host_name`字段中提供完整的端点地址。 Amazon IoT Amazon IoT 使用中的终端节点地址将连接路由`host_name`到正确的 Amazon IoT 帐户。未发送 `host_name` 中的有效端点地址的现有设备将继续工作，但它们将无法使用需要此信息的特征。有关 SNI 扩展以及如何识别 `host_name` 字段的端点地址的更多信息，请参阅。[运输安全 Amazon IoT Core](transport-security.md)

**使用多账户注册**

1. 您可以向 CA 注册设备证书。您可以在 `SNI_ONLY` 模式下在多个账户中注册签名 CA，并使用该 CA 向多个账户注册相同的客户端证书。有关更多信息，请参阅 [在 SNI\$1ONLY 模式下注册 CA 证书（CLI）- 建议](manage-your-CA-certs.md#register-CA-cert-SNI-cli)。

1. 您可以在没有 CA 的情况下注册设备证书。请参阅[注册由未注册的 CA（CLI）签发的客户端证书](manual-cert-registration.md#manual-cert-registration-noca-cli)。注册 CA 是可选的。您无需注册签署设备证书的 CA Amazon IoT。

## 支持的证书签名算法 Amazon IoT


Amazon IoT 支持以下证书签名算法：
+ SHA256WITHRSA
+ SHA384WITHRSA
+ SHA512WITHRSA
+ SHA256WITHRSAANDMGF1 (RSSASSA-PSS)
+ SHA384WITHRSAANDMGF1 (RSSASSA-PSS)
+ SHA512WITHRSAANDMGF1 (RSSASSA-PSS)
+ DSA\$1WITH\$1 SHA256
+ ECDSA-with-SHA256
+ ECDSA-with-SHA384
+ ECDSA-with-SHA512

有关证书身份验证和安全性的更多信息，请参阅[设备证书密钥质量](https://docs.amazonaws.cn/iot-device-defender/latest/devguide/audit-chk-device-cert-key-quality.html)。

**注意**  
证书签名请求（CSR）必须包含公有密钥。该密钥可以是长度至少为 2048 位的 RSA 密钥，或者是来自 NIST P-256、NIST P-384 或 NIST P-521 曲线的 ECC 密钥。有关更多信息，请参阅 [CreateCertificateFromCsr API 参考指南](https://docs.amazonaws.cn/iot/latest/apireference/API_CreateCertificateFromCsr.html) 中的 *Amazon IoT *。

## 支持的密钥算法 Amazon IoT


下表显示了如何支持密钥算法：


****  

| 密钥算法 | 证书签名算法 | TLS 版本 | 是否支持？ 是或否 | 
| --- | --- | --- | --- | 
| 密钥大小至少为 2048 位的 RSA | 全部 | TLS 1.2 TLS 1.3 | 是 | 
| ECC NIST P-256/P-384/P-521 | 全部 | TLS 1.2 TLS 1.3 | 是 | 
| 密钥大小至少为 2048 位的 RSA-PSS | 全部 | TLS 1.2 | 否 | 
| 密钥大小至少为 2048 位的 RSA-PSS | 全部 | TLS 1.3 | 是 | 

要使用 [CreateCertificateFromCSR](https://docs.amazonaws.cn//iot/latest/apireference/API_CreateCertificateFromCsr.html) 创建证书，您可以使用支持的密钥算法为您的 CSR 生成公钥。要使用[RegisterCertificate](https://docs.amazonaws.cn//iot/latest/apireference/API_RegisterCertificate.html)或 [RegisterCertificateWithoutCA](https://docs.amazonaws.cn//iot/latest/apireference/API_RegisterCertificateWithoutCA.html) 注册自己的证书，您可以使用支持的密钥算法为证书生成公钥。

有关更多信息，请参阅[安全策略](https://docs.amazonaws.cn//iot/latest/developerguide/transport-security.html#tls-policy-table)。

# 创建 Amazon IoT 客户证书


Amazon IoT 提供由 Amazon 根证书颁发机构 (CA) 签署的客户证书。

本主题介绍如何创建由 Amazon Root 证书颁发机构签发的客户端证书，以及如何下载证书文件。创建客户端证书文件后，您必须在客户端上安装这些文件。

**注意**  
提供的每个 X.509 客户端证书都 Amazon IoT 包含您在创建证书时设置的颁发者和主题属性。只有在创建证书后，证书属性才是不可改变的。

您可以使用 Amazon IoT 控制台或创建由 Amazon 根 Amazon IoT 证书颁发机构签名的证书。 Amazon CLI 

## 创建 Amazon IoT 证书（控制台）


**使用 Amazon IoT 控制台创建 Amazon IoT 证书**

1. 登录 Amazon Web Services 管理控制台 并打开[Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)。

1. 在导航窗格中，依次选择**安全**、**证书**和**创建**。

1. 选择**一键式创建证书（建议）**，然后选择**创建证书**。

1. 从**已创建证书**页面，将事物、公有密钥和私有密钥的客户端证书文件下载到安全位置。由 Amazon IoT 生成的这些证书只能用于 Amazon IoT 服务。

   如果您还需要 Amazon Root CA 证书文件，此页面也包含指向可用于下载此文件的页面的链接。

1. 此时客户端证书已创建并注册到 Amazon IoT。在客户端中使用证书之前，您必须激活证书。

    要立即激活客户端证书，请选择**激活**。如果您不想立即激活证书，请参阅 [激活客户端证书（控制台）](activate-or-deactivate-device-cert.md#activate-device-cert-console) 以了解如何在以后激活证书。

   

1. 如果要将策略附加到证书，请选择 **Attach a policy**（附加策略）。

   如果您不希望立即附加策略，请选择 **Done**（完成）以完成操作。您可以在以后附加策略。

完成此流程后，在客户端上安装证书文件。

## 创建 Amazon IoT 证书 (CLI)


 Amazon CLI 提供了创建由 Amazon 根证书颁发机构签名的客户证书的**[create-keys-and-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/create-keys-and-certificate.html)**命令。但是，此命令不会下载 Amazon Root CA 证书文件。您可以从下载 Amazon Root CA 证书文件 [用于服务器身份验证的 CA 证书](server-authentication.md#server-authentication-certs)。

此命令创建私钥、公钥和 X.509 证书文件，并使用注册和激活证书。 Amazon IoT

```
aws iot create-keys-and-certificate \
    --set-as-active \
    --certificate-pem-outfile certificate_filename.pem \
    --public-key-outfile public_filename.key \
    --private-key-outfile private_filename.key
```

如果您不想在创建和注册证书时激活证书，则此命令会创建私有密钥、公有密钥和 X.509 证书文件并注册证书，但不会激活它。[激活客户端证书（CLI）](activate-or-deactivate-device-cert.md#activate-device-cert-cli) 介绍了以后如何激活证书。

```
aws iot create-keys-and-certificate \
    --no-set-as-active \
    --certificate-pem-outfile certificate_filename.pem \
    --public-key-outfile public_filename.key \
    --private-key-outfile private_filename.key
```



在客户端上安装证书文件。

# 创建您自己的客户端证书


Amazon IoT 支持由任何根证书颁发机构或中间证书颁发机构 (CA) 签署的客户端证书。 Amazon IoT 使用 CA 证书验证证书的所有权。要使用由非亚马逊 CA 的 CA 签名的设备证书，必须注册 CA 的证书， Amazon IoT 这样我们才能验证设备证书的所有权。

Amazon IoT 支持多种自带证书的方式 (BYOC)：
+ 首先，注册用于签署客户端证书的 CA，然后注册各个客户端证书。如果要在设备或客户端首次连接时将其注册到其客户端证书 Amazon IoT （也称为[即时配置），则必须向注册签名 CA Amazon IoT 并激活自动](https://docs.amazonaws.cn//iot/latest/developerguide/jit-provisioning.html)注册。
+ 如果您无法注册签名 CA，则可以选择在没有 CA 的情况下注册客户端证书。对于未使用 CA 注册的设备，当您将它们连接到 Amazon IoT时，您需要出示[服务器名称指示（SNI）](https://www.rfc-editor.org/rfc/rfc3546#section-3.1)。

**注意**  
要使用 CA 注册客户端证书，必须向注册签名 CA Amazon IoT，而不是向层次结构 CAs 中的任何其他证书注册。

**注意**  
在 `DEFAULT` 模式下，一个 CA 证书只能由一个区域中的一个账户注册。在 `SNI_ONLY` 模式下，一个 CA 证书可以由一个区域中的多个账户注册。

有关使用 X.509 证书支持多个设备的更多信息，请参阅 [设备预调配](iot-provision.md) 以查看 Amazon IoT 支持的不同证书管理和预调配选项。

**Topics**
+ [

# 管理 CA 证书
](manage-your-CA-certs.md)
+ [

# 使用您的 CA 证书创建客户端证书
](create-device-cert.md)

# 管理 CA 证书


本节介绍管理您自己的证书颁发机构（CA）证书的常见任务。

 Amazon IoT 如果您使用的是由 Amazon IoT 无法识别的 CA 签名的客户端证书，则可以向注册证书颁发机构 (CA)。

如果您希望客户端在首次连接 Amazon IoT 时自动向其注册其客户端证书，则必须向注册签署客户端证书的 CA Amazon IoT。否则，您不需要注册对客户端证书签发的 CA 证书。

**注意**  
在 `DEFAULT` 模式下，一个 CA 证书只能由一个区域中的一个账户注册。在 `SNI_ONLY` 模式下，一个 CA 证书可以由一个区域中的多个账户注册。

**Topics**
+ [

## 创建 CA 证书
](#create-your-CA-cert)
+ [

## 注册 CA 证书
](#register-CA-cert)
+ [

## 停用 CA 证书
](#deactivate-ca-cert)

## 创建 CA 证书


如果没有 CA 证书，则可以使用 [OpenSSL v1.1.1i](https://www.openssl.org/) 工具创建一个。

**注意**  
您无法在 Amazon IoT 控制台中执行此过程。

**使用 [OpenSSL v1.1.1i](https://www.openssl.org/) 工具创建 CA 证书**

1. 生成密钥对。

   ```
   openssl genrsa -out root_CA_key_filename.key 2048
   ```

1. 使用密钥对中的私有密钥生成 CA 证书。

   ```
   openssl req -x509 -new -nodes \
       -key root_CA_key_filename.key \
       -sha256 -days 1024 \
       -out root_CA_cert_filename.pem
   ```

## 注册 CA 证书


这些程序描述了如何注册来自非亚马逊 CA 的证书颁发机构 (CA) 的证书。 Amazon IoT Core 使用 CA 证书验证证书的所有权。要使用由非亚马逊 CA 的 CA 签名的设备证书，您必须向注册 CA 证书， Amazon IoT Core 这样它才能验证设备证书的所有权。

### 注册 CA 证书（控制台）


**注意**  
若要在控制台中注册 CA 证书，请在控制台中的 [Register CA certificate](https://console.amazonaws.cn//iot/home#/create/cacertificate)（注册 CA 证书）处开始注册。您可以在多账户模式下注册您的 CA，而无需提供验证证书或访问私有密钥的权限。在多账户模式下，多个 Amazon Web Services 账户 可以在同一个 Amazon Web Services 区域中注册 CA。您可以通过提供验证证书和 CA 私有密钥的所有权证明，在单账户模式下注册您的 CA。

### 注册 CA 证书（CLI）


您可以在 `DEFAULT` 模式或 `SNI_ONLY` 模式下注册 CA 证书。CA 可以一对一 Amazon Web Services 账户 地在`DEFAULT`模式下注册 Amazon Web Services 区域。一个 CA 可以在同一个`SNI_ONLY`模式下通过多个 Amazon Web Services 账户 CA 进行注册 Amazon Web Services 区域。有关 CA 证书模式的更多信息，请参阅 [certificateMode](https://docs.amazonaws.cn//iot/latest/apireference/API_CACertificateDescription.html#iot-Type-CACertificateDescription-certificateMode)。

**注意**  
我们建议您在 `SNI_ONLY` 模式下注册 CA。您无需提供验证证书或访问私钥的权限，并且可以在同一个证书 Amazon Web Services 账户 中多次注册 CA Amazon Web Services 区域。

#### 在 SNI\$1ONLY 模式下注册 CA 证书（CLI）- 建议


**先决条件**

继续操作之前，请确保电脑满足以下条件：
+ 根 CA 的证书文件（在以下示例中引用为 `root_CA_cert_filename.pem`）
+ [OpenSSL v1.1.1i](https://www.openssl.org/) 或更高版本

**要在`SNI_ONLY`模式下注册 CA 证书，请使用 Amazon CLI**

1. 向注册 CA 证书 Amazon IoT。使用 **register-ca-certificate** 命令，输入 CA 证书文件名。有关更多信息，请参阅《Amazon CLI 命令参考》**中的 [register-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html)。

   ```
   aws iot register-ca-certificate \
       --ca-certificate file://root_CA_cert_filename.pem \
       --certificate-mode SNI_ONLY
   ```

   如果成功，此命令将返回*certificateId*。

1. 此时，CA 证书已注册 Amazon IoT 但处于非活动状态。CA 证书必须处于活跃状态，然后您才能注册由其签发的任何客户端证书。

   此步骤将激活 CA 证书。

   要激活 CA 证书，请使用 **update-certificate** 命令，如下所示。有关更多信息，请参阅 *Amazon CLI 命令参考*中的 [update-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)。

   ```
   aws iot update-ca-certificate \
       --certificate-id certificateId \
       --new-status ACTIVE
   ```

要查看 CA 证书的状态，请使用 **describe-ca-certificate** 命令。有关更多信息，请参阅《Amazon CLI 命令参考》**中的 [describe-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html)。

#### 在 `DEFAULT` 模式下注册 CA 证书（CLI）


**先决条件**

继续操作之前，请确保电脑满足以下条件：
+ 根 CA 的证书文件（在以下示例中引用为 `root_CA_cert_filename.pem`）
+ 根 CA 证书的私有密钥文件（在以下示例中引用为 `root_CA_key_filename.key`）
+ [OpenSSL v1.1.1i](https://www.openssl.org/) 或更高版本

**要在`DEFAULT`模式下注册 CA 证书，请使用 Amazon CLI**

1. 要从中获取注册码 Amazon IoT，请使用**get-registration-code**。保存返回的 `registrationCode`，将其用作私有密钥验证证书的 `Common Name`。有关更多信息，请参阅《Amazon CLI 命令参考》**中的 [get-registration-code](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/get-registration-code.html)。

   ```
   aws iot get-registration-code
   ```

1. 为私有密钥验证证书生成密钥对：

   ```
   openssl genrsa -out verification_cert_key_filename.key 2048
   ```

1. 为私有密钥验证证书创建证书签名请求（CSR）。将证书的 `Common Name` 字段设置为 **get-registration-code** 返回的 `registrationCode`。

   ```
   openssl req -new \
       -key verification_cert_key_filename.key \
       -out verification_cert_csr_filename.csr
   ```

   将提示您输入一些信息，包括证书的`Common Name`。

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:your_registration_code
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

1. 使用 CSR 创建私有密钥验证证书：

   ```
   openssl x509 -req \
       -in verification_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out verification_cert_filename.pem \
       -days 500 -sha256
   ```

1. 向注册 CA 证书 Amazon IoT。将 CA 证书文件名和私有密钥验证证书文件名传递给 **register-ca-certificate** 命令，如下所示：有关更多信息，请参阅《Amazon CLI 命令参考》**中的 [register-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html)。

   ```
   aws iot register-ca-certificate \
       --ca-certificate file://root_CA_cert_filename.pem \
       --verification-cert file://verification_cert_filename.pem
   ```

   如果成功*certificateId*，此命令将返回。

1. 此时，CA 证书已注册 Amazon IoT 但未激活。CA 证书必须处于活跃状态，然后您才能注册由其签发的任何客户端证书。

   此步骤将激活 CA 证书。

   要激活 CA 证书，请使用 **update-certificate** 命令，如下所示。有关更多信息，请参阅 *Amazon CLI 命令参考*中的 [update-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)。

   ```
   aws iot update-ca-certificate \
       --certificate-id certificateId \
       --new-status ACTIVE
   ```

要查看 CA 证书的状态，请使用 **describe-ca-certificate** 命令。有关更多信息，请参阅《Amazon CLI 命令参考》**中的 [describe-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html)。

### 创建 CA 验证证书以在控制台中注册 CA 证书


**注意**  
此过程仅适用于从 Amazon IoT 控制台注册 CA 证书的情况。  
如果您不是从控制台进入此过程，请在 Amazon IoT 控制台的 Register CA 证书上启动 [CA 证书注册](https://console.amazonaws.cn//iot/home#/create/cacertificate)过程。

继续操作之前，请确保同一台电脑满足以下条件：
+ 根 CA 的证书文件（在以下示例中引用为 `root_CA_cert_filename.pem`）
+ 根 CA 证书的私有密钥文件（在以下示例中引用为 `root_CA_key_filename.key`）
+ [OpenSSL v1.1.1i](https://www.openssl.org/) 或更高版本

**使用命令行界面创建 CA 验证证书，以在控制台中注册 CA 证书**

1. 将 `verification_cert_key_filename.key` 替换为要创建的验证证书密钥文件的文件名（例如 **verification\$1cert.key**）。然后运行此命令，为私有密钥验证证书生成密钥对：

   ```
   openssl genrsa -out verification_cert_key_filename.key 2048
   ```

1. 将 `verification_cert_key_filename.key` 替换为在步骤 1 中创建的密钥文件的名称。

   将 `verification_cert_csr_filename.csr` 替换为要创建的证书签名请求（CSR）文件的名称。例如 **verification\$1cert.csr**。

   运行此命令以创建 CSR 文件。

   ```
   openssl req -new \
       -key verification_cert_key_filename.key \
       -out verification_cert_csr_filename.csr
   ```

   该命令会提示您输入其他信息（稍后说明）。

1. 在 Amazon IoT 控制台的**验证证书**容器中，复制注册码。

1. **openssl** 命令提示您输入的信息显示在以下示例中。除了 `Common Name` 字段，您可以在其它字段中输入自己的值或将其留空。

   在 `Common Name` 字段中，粘贴您在上一步骤中复制的注册码。

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:your_registration_code
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

   完成后，命令会创建 CSR 文件。

1. 将 `verification_cert_csr_filename.csr` 替换为在上一步骤中使用的 `verification_cert_csr_filename.csr`。

   将 `root_CA_cert_filename.pem` 替换为要注册的 CA 证书的文件名。

   将 `root_CA_key_filename.key` 替换为 CA 证书的私有密钥文件的文件名。

   将 `verification_cert_filename.pem` 替换为要创建的验证证书的文件名。例如 **verification\$1cert.pem**。

   ```
   openssl x509 -req \
       -in verification_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out verification_cert_filename.pem \
       -days 500 -sha256
   ```

1. 完成 OpenSSL 命令后，您应该准备好这些文件，以便在返回控制台时使用。
   + 您的 CA 证书文件（上一条命令中使用的 `root_CA_cert_filename.pem`）
   + 您在上一步中创建的验证证书（在上一个命令中*verification\$1cert\$1filename.pem*使用）

## 停用 CA 证书


启用证书颁发机构 (CA) 证书进行自动客户端证书注册后， Amazon IoT 会检查 CA 证书以确保 CA 已启用`ACTIVE`。如果 CA 证书是`INACTIVE`，则 Amazon IoT 不允许注册客户端证书。

通过将 CA 证书设置为 `INACTIVE`，可防止该 CA 颁发的任何新客户端证书自动注册。

**注意**  
除非您明确吊销由受损的 CA 证书签发的每个已注册客户端证书，否则所有此类证书均将继续工作。

### 停用 CA 证书（控制台）


**使用控制台停用 CA 证书 Amazon IoT**

1. 登录 Amazon Web Services 管理控制台 并打开[Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)。

1. 在左侧导航窗格中，选择 “**安全**”，选择**CAs**。

1. 在证书颁发机构列表中，找到要停用的证书颁发机构，然后选择省略号图标以打开选项菜单。

1. 在选项菜单上，选择**停用**。

证书颁发机构应在列表中显示为**停用**。

**注意**  
 Amazon IoT 控制台不提供列出由您停用的 CA 签署的证书的方法。有关列出这些证书的 Amazon CLI 选项，请参阅 [停用 CA 证书（CLI）](#deactivate-ca-cert-cli)。

### 停用 CA 证书（CLI）


 Amazon CLI 提供了停用 CA 证书的[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html)命令。

```
aws iot update-ca-certificate \
    --certificate-id certificateId \
    --new-status INACTIVE
```

使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-certificates-by-ca.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-certificates-by-ca.html) 命令获取已由指定 CA 签名的所有已注册客户端证书的列表。对于由指定 CA 证书签名的每个客户端证书，请使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) 命令吊销该客户端证书以避免使用它。

使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html) 命令查看 CA 证书的状态。

# 使用您的 CA 证书创建客户端证书


您可以使用自己的证书颁发机构（CA）创建客户端证书。必须先注册客户证书， Amazon IoT 然后才能使用。有关客户端证书的注册选项的信息，请参阅 [注册客户端证书](register-device-cert.md)。

## 创建客户端证书（CLI）


**注意**  
您无法在 Amazon IoT 控制台中执行此过程。

**要使用创建客户证书 Amazon CLI**

1. 生成密钥对。

   ```
   openssl genrsa -out device_cert_key_filename.key 2048
   ```

1. 为客户端证书创建 CSR。

   ```
   openssl req -new \
       -key device_cert_key_filename.key \
       -out device_cert_csr_filename.csr
   ```

   系统将提示您输入一些信息，如下所示：

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

1. 从 CSR 创建客户端证书。

   ```
   openssl x509 -req \
       -in device_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out device_cert_filename.pem \
       -days 500 -sha256
   ```

 此时，客户证书已创建，但尚未在中注册 Amazon IoT。有关注册客户端证书的方式和时机的信息，请参阅 [注册客户端证书](register-device-cert.md)。

# 注册客户端证书


必须向注册客户端证书， Amazon IoT 才能在客户端和之间进行通信 Amazon IoT。您可以手动注册每个客户端证书，也可以将客户端证书配置 Amazon IoT 为在客户端首次连接时自动注册。

 如果您希望客户端和设备在首次连接时注册其客户端证书，则必须在要使用的区域中拥有使用 Amazon IoT 签署客户端证书所需的 [注册 CA 证书](manage-your-CA-certs.md#register-CA-cert)。Amazon Root CA 将自动向注册 Amazon IoT。

客户证书可以由 Amazon Web Services 账户 和地区共享。在您要使用客户端证书的每个账户和区域中，必须执行这些主题中的流程。在一个账户或区域中注册的客户端证书，不会在另一个账户或区域中自动识别。

**注意**  
使用传输层安全性（TLS）协议连接到 Amazon IoT 的客户端必须支持 TLS 的[服务器名称指示（SNI）扩展](https://tools.ietf.org/html/rfc3546#section-3.1)。有关更多信息，请参阅 [运输安全 Amazon IoT Core](transport-security.md)。

**Topics**
+ [

# 手动注册客户端证书
](manual-cert-registration.md)
+ [

# 在客户端连接到注册时 Amazon IoT just-in-time 注册客户端证书 (JITR)
](auto-register-device-cert.md)

# 手动注册客户端证书


您可以使用 Amazon IoT 控制台和手动注册客户证书 Amazon CLI。

使用的注册程序取决于证书是否将由 Amazon Web Services 账户和地区共享。在一个账户或区域中注册的客户端证书，不会在另一个账户或区域中自动识别。

在您要使用客户端证书的每个账户和区域中，必须执行此主题中的流程。客户证书可以由 Amazon Web Services 账户 s 和 Regions 共享。

## 注册由已注册的 CA（控制台）签发的客户端证书


**注意**  
在执行此过程之前，请确保您拥有客户端证书的.pem 文件，并且该客户端证书由您[注册](manage-your-CA-certs.md#register-CA-cert)的 CA 签名。 Amazon IoT

**Amazon IoT 使用控制台注册现有证书**

1. 登录 Amazon 管理控制台并打开[Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)。

1. 在导航窗格的 **Manage**（管理）部分下，选择 **Security**（安全性），然后选择 **Certificates**（证书）。

1. 在 **Certificates**（证书）对话框的 **Certificates**（证书）页上，选择 **Add certificate**（添加证书），然后选择 **Register certificates**（注册证书）。

1. 在 **Certificates to upload**（要上载的证书）对话框的 **Register certificate**（注册证书）页上，执行以下操作：
   + 选择 **CA 注册到 Amazon IoT**。
   + 从 **Choose a CA certificate**（选择 CA 证书）中，选择您的 **Certification authority**（证书颁发机构）。
     + 选择 **Register a new CA**（注册新 CA）以注册未向 Amazon IoT注册的新 **Certification authority**（证书颁发机构）。
     + 如果 **Amazon Root certificate authority**（Amazon 根证书颁发机构）是您的证书颁发机构，请将 **Choose a CA certificate**（选择 CA 证书）留空。
   + 最多选择 10 个证书进行上传和注册 Amazon IoT。
     + 使用您在 [创建 Amazon IoT 客户证书](device-certs-create.md) 和 [使用您的 CA 证书创建客户端证书](create-device-cert.md) 中创建的证书文件。
   + 选择 **Activate**（激活）或 **Deactivate**（停用）。如果选择**停用**，[激活或停用客户端证书](activate-or-deactivate-device-cert.md) 介绍了如何在证书注册后激活证书。
   + 选择**注册**。

在 **Certificates**（证书）对话框的 **Certificates**（证书）页上，现在将显示您注册的证书。

## 注册由未注册的 CA（控制台）签发的客户端证书


**注意**  
在执行此流程之前，请确保您拥有客户端证书 .pem 文件。

**Amazon IoT 使用控制台注册现有证书**

1. 登录 Amazon 管理控制台并打开[Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)。

1. 在左侧的导航窗格中，选择**安全**，选择**证书**，然后选择**创建**。

1. 在 **Create a certificate**（创建证书）上，找到 **Use my certificate**（使用我的证书）条目，然后选择 **Get started**（入门）。

1. 在 **Select CA**（选择 CA）上，选择 **Next**（下一步）。

1.  在 **Register exsiting device certificates**（注册现有的设备证书）上，选择 **Select certificates**（选择证书），并选择最多 10 个要注册的证书文件。

1.  关闭文件对话框后，选择在注册客户端证书时是要激活还是吊销客户端证书。

   如果您在注册证书时未激活证书，[激活客户端证书（控制台）](activate-or-deactivate-device-cert.md#activate-device-cert-console) 中介绍了以后如何激活证书。

   如果证书在注册时被吊销，则以后无法激活。

   选择要注册的证书文件，选择注册后要执行的操作，然后选择 **Register certificates**（注册证书）。

成功注册的客户端证书将显示在证书列表中。

## 注册由已注册的 CA（CLI）签发的客户端证书


**注意**  
在执行此流程之前，请确保您具有证书颁发机构（CA）.pem 和客户端证书的 .pem 文件。客户端证书必须由您[注册](manage-your-CA-certs.md#register-CA-cert)的证书颁发机构 (CA) 签名 Amazon IoT。

使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate.html) 命令注册客户端证书但不激活。

```
aws iot register-certificate \
    --certificate-pem file://device_cert_filename.pem \
    --ca-certificate-pem file://ca_cert_filename.pem
```

客户证书已在中注册 Amazon IoT，但尚未激活。有关如何在以后激活的信息，请参阅 [激活客户端证书（CLI）](activate-or-deactivate-device-cert.md#activate-device-cert-cli)。

您也可以在使用此命令注册客户端证书时进行激活。

```
aws iot register-certificate \
    --set-as-active \
    --certificate-pem file://device_cert_filename.pem \
    --ca-certificate-pem file://ca_cert_filename.pem
```

有关激活证书以使其可用于连接的更多信息 Amazon IoT，请参阅 [激活或停用客户端证书](activate-or-deactivate-device-cert.md)

## 注册由未注册的 CA（CLI）签发的客户端证书


**注意**  
在执行此流程之前，请确保您拥有证书 .pem 文件。

使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate-without-ca.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate-without-ca.html) 命令注册客户端证书但不激活。

```
aws iot register-certificate-without-ca \
    --certificate-pem file://device_cert_filename.pem
```

客户证书已在中注册 Amazon IoT，但尚未激活。有关如何在以后激活的信息，请参阅 [激活客户端证书（CLI）](activate-or-deactivate-device-cert.md#activate-device-cert-cli)。

您也可以在使用此命令注册客户端证书时进行激活。

```
aws iot register-certificate-without-ca \
    --status ACTIVE \
    --certificate-pem file://device_cert_filename.pem
```

有关激活证书以使其可用于连接的更多信息 Amazon IoT，请参阅[激活或停用客户端证书](activate-or-deactivate-device-cert.md)。

# 在客户端连接到注册时 Amazon IoT just-in-time 注册客户端证书 (JITR)


您可以将 CA 证书配置为启用已签名的客户端证书，以便在客户端首次连接时 Amazon IoT 自动注册该证书 Amazon IoT。

要在客户端首次连接时注册客户端证书，必须启用 CA 证书进行自动注册，并将客户端的第一个连接配置为提供所需的证书。 Amazon IoT 

## 配置 CA 证书以支持自动注册（控制台）


**使用 Amazon IoT 控制台配置 CA 证书以支持自动注册客户证书**

1. 登录 Amazon 管理控制台并打开[Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)。

1. 在左侧导航窗格中，选择 “**安全**”，选择**CAs**。

1. 在证书颁发机构列表中，找到要启用自动注册的颁发机构，然后使用省略号图标打开选项菜单。

1. 在选项菜单上，选择**启用自动注册**。

**注意**  
证书颁发机构列表中不显示自动注册状态。要查看证书颁发机构的自动注册状态，您必须打开证书颁发机构的**详细信息**页面。

## 配置 CA 证书以支持自动注册（CLI）


如果您已经向注册了 CA 证书 Amazon IoT，请使用[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html)命令将 CA 证书设置为`autoRegistrationStatus``ENABLE`。

```
aws iot update-ca-certificate \
--certificate-id caCertificateId \
--new-auto-registration-status ENABLE
```

如果您要在注册 CA 证书时启用 `autoRegistrationStatus`，请使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html) 命令。

```
aws iot register-ca-certificate \
--allow-auto-registration  \
--ca-certificate file://root_CA_cert_filename.pem \
--verification-cert file://verification_cert_filename.pem
```

使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html) 命令查看 CA 证书的状态。

## 配置客户端的首次连接以进行自动注册


当客户端首次尝试 Amazon IoT 连接时，在传输层安全 (TLS) 握手期间，由您的 CA 证书签名的客户端证书必须存在于客户端上。

当客户端连接到时 Amazon IoT，使用您在创建客户端证书或[创建自己的 Amazon IoT 客户端证书](https://docs.amazonaws.cn/iot/latest/developerguide/device-certs-create.html)[中创建的客户端证书](https://docs.amazonaws.cn/iot/latest/developerguide/device-certs-your-own.html)。 Amazon IoT 将 CA 证书识别为已注册的 CA 证书，注册客户端证书，并将其状态设置为`PENDING_ACTIVATION`。这意味着，已自动注册客户端证书，该证书正在等待激活。客户端证书的状态必须为 `ACTIVE`，然后才能将其用于连接到 Amazon IoT。有关激活客户端证书的信息，请参阅 [激活或停用客户端证书](activate-or-deactivate-device-cert.md)。

**注意**  
您可以使用 Amazon IoT Core just-in-time注册 (JITR) 功能配置设备，而不必在设备首次连接时发送整个信任链。 Amazon IoT Core可以出示 CA 证书，但连接时设备需要发送[服务器名称指示（SNI）](https://datatracker.ietf.org/doc/html/rfc3546#section-3.1)扩展。

当 Amazon IoT 自动注册证书或客户端提供`PENDING_ACTIVATION`状态为证书时，会向以下 MQTT 主题 Amazon IoT 发布一条消息：

`$aws/events/certificates/registered/caCertificateId`

其中 `caCertificateId` 是颁发客户端证书的 CA 证书的 ID。

发布到该主题的消息具有以下结构：

```
{
        "certificateId": "certificateId",
        "caCertificateId": "caCertificateId",
        "timestamp": timestamp,
        "certificateStatus": "PENDING_ACTIVATION",
        "awsAccountId": "awsAccountId",
        "certificateRegistrationTimestamp": "certificateRegistrationTimestamp"
}
```

您可以创建一项规则，以侦听此主题并执行一些操作。我们建议您创建一项 Lambda 规则，以验证客户端证书不在证书吊销列表（CRL）中，激活该证书，创建策略并将其附加到证书中。该策略将确定客户端能够访问的资源。如果您创建的策略需要来自连接设备的客户端 ID，您可以使用规则的 clientid() 函数来检索客户端 ID。规则定义示例如下所示：

```
SELECT *,
   clientid() as clientid
from $aws/events/certificates/registered/caCertificateId
```

在此示例中，规则订阅 JITR 主题 `$aws/events/certificates/registered/caCertificateID` 并使用 clientid() 函数检索客户端 ID。然后规则将客户端 ID 附加到 JITR 有效载荷。有关规则 clientid() 函数的更多信息，请参阅 [clientid()](https://docs.amazonaws.cn//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-clientid)。

有关如何创建监听`$aws/events/certificates/registered/caCertificateID`主题并执行这些操作的 Lambda 规则的更多信息，请参阅[just-in-time 注册客户证书](https://www.amazonaws.cn/blogs/iot/just-in-time-registration-of-device-certificates-on-aws-iot/)。 Amazon IoT

如果在自动注册客户端证书的过程中出现任何错误或异常，则会在日志中 Amazon IoT 将事件或消息发送到您的日 CloudWatch 志。有关为您的账户设置日志的更多信息，请参阅 [Amazon CloudWatch 文档](https://docs.amazonaws.cn/AmazonCloudWatch/latest/DeveloperGuide/)。

# 管理客户端证书


Amazon IoT 为您提供了管理客户证书的功能。

**Topics**
+ [

# 激活或停用客户端证书
](activate-or-deactivate-device-cert.md)
+ [

# 将事物或策略附加到客户端证书
](attach-to-cert.md)
+ [

# 吊销客户端证书
](revoke-ca-cert.md)
+ [

# 将设备证书传输到其它账户。
](transfer-cert.md)

# 激活或停用客户端证书


Amazon IoT 验证客户端证书在对连接进行身份验证时是否处于活动状态。

您可以创建和注册客户端证书但不激活，这样直到您想要使用时才让这些证书可用。您还可以停用活动的客户端证书以暂时禁用它们。最后，您可以吊销客户端证书，防止以后使用这些证书。

## 激活客户端证书（控制台）


**使用 Amazon IoT 控制台激活客户端证书**

1. 登录 Amazon 管理控制台并打开[Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)。

1. 在左侧导航窗格中，选择**安全**，然后选择**证书**。

1. 在证书列表中，找到要激活的证书，然后使用省略号图标打开选项菜单。

1. 在选项菜单中，选择**激活**。

证书应在证书列表中显示为**活动**。

## 停用客户端证书（控制台）


**使用控制台停用客户端证书 Amazon IoT**

1. 登录 Amazon 管理控制台并打开[Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)。

1. 在左侧导航窗格中，选择**安全**，然后选择**证书**。

1. 在证书列表中，找到要停用的证书，然后使用省略号图标打开选项菜单。

1. 在选项菜单中，选择**停用**。

证书应在证书列表中显示为**停用**。

## 激活客户端证书（CLI）


 Amazon CLI 提供了激活证书的[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)命令。

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status ACTIVE
```

如果命令成功，证书的状态将为 `ACTIVE`。运行 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html) 以查看证书的状态。

```
aws iot describe-certificate \
    --certificate-id certificateId
```

## 停用客户端证书（CLI）


 Amazon CLI 提供了停用证书的[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)命令。

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status INACTIVE
```

如果命令成功，证书的状态将为 `INACTIVE`。运行 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html) 以查看证书的状态。

```
aws iot describe-certificate \
    --certificate-id certificateId
```

# 将事物或策略附加到客户端证书


当您创建和注册与 Amazon IoT 事物分开的证书时，该证书将没有任何授权任何 Amazon IoT 操作的策略，也不会与任何 Amazon IoT 事物对象相关联。本节介绍如何将这些关系添加到注册的证书中。

**重要**  
要完成这些流程，您必须具有要附加到证书的已创建事物或策略。

证书用于对设备进行身份验证， Amazon IoT 以便设备可以连接。将证书附加到事物资源可建立设备（通过证书的方式）与事物资源之间的关系。要授权设备执行 Amazon IoT 操作（例如允许设备连接和发布消息），必须将相应的策略附加到设备的证书上。

## 将事物附加到客户端证书（控制台）


您需要事物对象的名称才能完成此流程。

**将事物对象附加到已注册的证书**

1. 登录 Amazon 管理控制台并打开[Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)。

1. 在左侧导航窗格中，选择**安全**，然后选择**证书**。

1. 在证书列表中，找到要附加策略的证书，选择省略号图标以打开证书的选项菜单，然后选择**附加事物**。

1. 在弹出窗口中，找到要附加到证书的事物的名称，选中其复选框，然后选择 **Attach**（附上）。

现在，事物对象应显示在证书详细信息页面上的事物列表中。

## 将策略附加到客户端证书（控制台）


您需要策略对象的名称才能完成此流程。

**将策略对象附加到已注册的证书**

1. 登录 Amazon 管理控制台并打开[Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)。

1. 在左侧导航窗格中，选择**安全**，然后选择**证书**。

1. 在证书列表中，找到要附加策略的证书，选择省略号图标以打开证书的选项菜单，然后选择**附加策略**。

1. 在弹出窗口中，找到要附加到证书的策略的名称，选中其复选框，然后选择 **Attach**（附上）。

现在，策略对象应显示在证书详细信息页面上的策略列表中。

## 将事物附加到客户端证书（CLI）


 Amazon CLI 提供了将事物对象附加到证书的[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-thing-principal.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-thing-principal.html)命令。

```
aws iot attach-thing-principal \
    --principal certificateArn \
    --thing-name thingName
```

## 将策略附加到客户端证书（CLI）


 Amazon CLI 提供了将策略对象附加到证书的[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-policy.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-policy.html)命令。

```
aws iot attach-policy \
    --target certificateArn \
    --policy-name policyName
```

# 吊销客户端证书


如果您在已注册的客户端证书上检测到可疑活动，则可以吊销该证书，使其无法再次使用。

**注意**  
证书一旦被吊销，就无法更改其状态。也就是说，证书状态不能更改为 `Active` 或任何其它状态。

## 吊销客户端证书（控制台）


**使用控制台吊销客户端证书 Amazon IoT**

1. 登录 Amazon 管理控制台并打开[Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)。

1. 在左侧导航窗格中，选择**安全**，然后选择**证书**。

1. 在证书列表中，找到要吊销的证书，然后使用省略号图标打开选项菜单。

1. 在选项菜单中，选择**吊销**。

如果证书已成功吊销，它将在证书列表中显示为**已吊销**。

## 吊销客户端证书（CLI）


 Amazon CLI 提供了吊销证书的[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)命令。

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status REVOKED
```

如果命令成功，证书的状态将为 `REVOKED`。运行 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html) 以查看证书的状态。

```
aws iot describe-certificate \
    --certificate-id certificateId
```

# 将设备证书传输到其它账户。


属于一个证书的 X.509 证书 Amazon Web Services 账户 可以转移到另一个证书。 Amazon Web Services 账户

**将 X.509 证书从一个证书转移到另一个证书 Amazon Web Services 账户**

1. [开始证书传输](#transfer-cert-init)

   在启动传输之前，必须停用证书并从所有策略和事物中分离。

1. [接受或拒绝证书传输](#transfer-cert-accept)

   接收账户必须明确接受或拒绝传输的证书。接收账户接受证书后，必须激活证书才能使用。

1. [取消证书传输](#transfer-cert-cancel)

   如果证书未被接受，原始账户可以取消传输。

## 开始证书传输


您可以使用[Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)或开始将证书转移 Amazon Web Services 账户 到另一个证书 Amazon CLI。

### 开始证书传输（控制台）


要完成此流程，您需要提供您要传输的证书 ID。

在带有要传输证书的账户执行此流程。

**开始将证书转移到另一个证书 Amazon Web Services 账户**

1. 登录 Amazon 管理控制台并打开[Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)。

1. 在左侧导航窗格中，选择**安全**，然后选择**证书**。

   选择您打算传输并带有 **Active**（活动）或者 **Inactive**（非活动）状态的证书并打开其详细信息页面。

1. 在证书**详细信息**页面的**操作**菜单中，如果**停用**选项可用，则选择**停用**选项来停用证书。

1. 在证书的 **Details**（详细信息）页面中，在左侧菜单中，选择 **Policies**（策略）。

1. 在证书的 **Policies**（策略）页面上，如果证书附加了任何策略，请打开策略的选项菜单，然后选择 **Detach**（分离）以分离各个证书。

   在您继续操作前，该证书不能附加有任何策略。

1. 在证书的 **Policies**（策略）页面中，在左侧菜单中，选择 **Thins**（事物）。

1. 在证书的 **Things**（事物）页面，如果证书附加了任何事物，请打开事物的选项菜单并选择 **Detach**（分离）以分离各个事物。

   在您继续操作前，该证书不能附加有任何事物。

1. 在证书的 **Things**（事物）页面中，在左侧菜单中，选择 **Details**（详细信息）。

1. 在证书**详细信息**页面的**操作**菜单中，选择**开始传输**来打开**开始传输**对话框。

1. 在 “**开始转移**” 对话框中，输入要接收证书的账户号和一条可选的短消息。 Amazon Web Services 账户 

1. 选择 **Start transfer**（开始传输）以传输证书。

控制台应显示一条消息，指示传输成功或失败。如果传输开始，证书的状态将更新为 **Transferred**（已传输）。

### 开始证书传输（CLI）


要完成此过程，您需要要转移*certificateArn*的证书的*certificateId*和。

在带有要传输证书的账户执行此流程。

**开始将证书转移到另一个 Amazon 账户**

1. 使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) 命令来停用证书。

   ```
   aws iot update-certificate --certificate-id certificateId --new-status INACTIVE
   ```

1. 分离所有策略。

   1. 使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-attached-policies.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-attached-policies.html) 命令列出附加到该证书的策略。

      ```
      aws iot list-attached-policies --target certificateArn
      ```

   1. 对于每个附加的策略，请使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-policy.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-policy.html) 命令予以分离。

      ```
      aws iot detach-policy --target certificateArn --policy-name policy-name
      ```

1. 分离所有事物。

   1. 使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-principal-things.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-principal-things.html) 命令列示附加到证书上的事物。

      ```
      aws iot list-principal-things --principal certificateArn
      ```

   1. 对于每个附加的事物，请使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-thing-principal.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-thing-principal.html) 命令予以分离。

      ```
      aws iot detach-thing-principal --principal certificateArn --thing-name thing-name
      ```

1. 使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/transfer-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/transfer-certificate.html) 命令启动证书传输。

   ```
   aws iot transfer-certificate --certificate-id certificateId --target-aws-account account-id
   ```

## 接受或拒绝证书传输


您可以使用[Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)或，接受或拒绝 Amazon Web Services 账户 从他 Amazon Web Services 账户 人转移给您的证书 Amazon CLI。

### 接受或拒绝证书传输（控制台）


要完成此流程，您需要提供已转移到您的账户的证书 ID。

在接收已转移证书的账户执行此流程。

**接受或拒绝已转移到您的证书 Amazon Web Services 账户**

1. 登录 Amazon 管理控制台并打开[Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)。

1. 在左侧导航窗格中，选择**安全**，然后选择**证书**。

   选择您想要接受或拒绝且状态为 **Pending transfer**（待转移）的证书，并打开其详细信息页面。

1. 在证书的 **Details**（详细信息）页面上，在 **Actions**（操作）菜单中，
   + 如要接受证书，请选择 **Accept transfer**（接受传输）。
   + 如不接受证书，请选择 **Reject transfer**（拒绝传输）。

### 接受或拒绝证书传输（CLI）


要完成此过程，您需要要接受或拒绝*certificateId*的证书转移。

在接收已转移证书的账户执行此流程。

**接受或拒绝已转移到您的证书 Amazon Web Services 账户**

1. 使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/accept-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/accept-certificate-transfer.html) 命令以接受证书。

   ```
   aws iot accept-certificate-transfer --certificate-id certificateId
   ```

1. 使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/reject-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/reject-certificate-transfer.html) 命令以拒绝证书。

   ```
   aws iot reject-certificate-transfer --certificate-id certificateId
   ```

## 取消证书传输


您可以使用 [Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)或 Amazon CLI在证书传输被接受之前将其取消。

### 取消证书传输（控制台）


要完成此流程，您需要提供要取消的证书传输的 ID。

在启动证书传输的账户执行此流程。

**取消证书传输**

1. 登录 Amazon 管理控制台并打开[Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)。

1. 在左侧导航窗格中，选择**安全**，然后选择**证书**。

   选择状态为 **Transferred**（已传输）且您想要取消传输的证书，并打开其选项菜单。

1. 在证书的选项菜单上，选择 **Revoke transfer**（撤销传输）选项来取消证书传输。
**重要**  
请谨慎处理，不要将 **Revoke transfer**（撤销传输）选项与 **Revoke**（撤销）选项混淆。  
**Revoke transfer**（撤销传输）选项用于取消证书传输，而 **Revoke**（撤销）选项使证书无法为 Amazon IoT所用，且操作不可逆。

### 取消证书传输（CLI）


要完成此过程，您需要要取消*certificateId*的证书转移。

在启动证书传输的账户执行此流程。

使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/cancel-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/cancel-certificate-transfer.html) 命令取消证书传输。

```
aws iot cancel-certificate-transfer --certificate-id certificateId
```

# 自定义客户证书验证


Amazon IoT Core 支持 X.509 客户端证书的自定义客户端证书验证，这增强了客户端身份验证管理。这种证书验证方法也称为身份验证前证书检查，在这种方法中，您可以根据自己的条件（在 Lambda 函数中定义）评估客户端证书，并吊销客户端证书或证书的签名证书颁发机构（CA）证书，以防止客户端连接到 Amazon IoT Core。例如，您可以创建自己的证书吊销检查，根据支持[在线证书状态协议（OCSP）](https://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol)或[证书吊销列表（CRL）](https://en.wikipedia.org/wiki/Certificate_revocation_list)端点的验证机构来验证证书的状态，并防止具有已吊销证书的客户端进行连接。用于评估客户端证书的条件在 Lambda 函数（也称为身份验证前 Lambda）中定义。您必须使用在域配置中设置的端点，并且[身份验证类型](protocols.md#connection-protocol-auth-mode)必须是 X.509 证书。此外，客户端在连接到时必须提供[服务器名称指示 (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) 扩展名。 Amazon IoT Core

**注意**  
 Amazon GovCloud (US) 各地区不支持此功能。

**Topics**
+ [

## 第 1 步：使用注册您的 X.509 客户端证书 Amazon IoT Core
](#client-auth-cert-verification)
+ [

## 第 2 步：创建 Lambda 函数
](#customize-client-auth-lambda)
+ [

## 第 3 步：授权调用您 Amazon IoT 的 Lambda 函数
](#customize-client-configuration-grant-permission)
+ [

## 步骤 4：为域设置身份验证配置
](#customize-client-configuration)

## 第 1 步：使用注册您的 X.509 客户端证书 Amazon IoT Core


如果您尚未执行此操作，请使用注册并激活您的 [X.509 客户端证书](https://docs.amazonaws.cn//iot/latest/developerguide/x509-client-certs.html)。 Amazon IoT Core否则，请跳到下一步。

要使用注册和激活您的客户端证书 Amazon IoT Core，请按照以下步骤操作：

1. 如果您[直接使用创建客户证书 Amazon IoT](https://docs.amazonaws.cn//iot/latest/developerguide/device-certs-create.html)。这些客户证书将自动向注册 Amazon IoT Core。

1. 如果您[创建自己的客户证书](https://docs.amazonaws.cn//iot/latest/developerguide/device-certs-your-own.html)，请按照[以下说明进行注册 Amazon IoT Core](https://docs.amazonaws.cn//iot/latest/developerguide/register-device-cert.html)。

1. 要激活您的客户端证书，请按照[以下说明](https://docs.amazonaws.cn//iot/latest/developerguide/activate-or-deactivate-device-cert.html)进行操作。

## 第 2 步：创建 Lambda 函数


您需要创建一个 Lambda 函数，该函数将执行证书验证，并且每当客户端尝试连接到配置的端点时，都会调用该函数。创建此 Lambda 函数时，请遵循[创建您的第一个 Lambda 函数](https://docs.amazonaws.cn//lambda/latest/dg/getting-started.html)中的一般性指导。此外，请确保 Lambda 函数遵循预期的请求和响应格式，如下所示：

**Lambda 函数事件示例**

```
{
	"connectionMetadata": {
		"id": "string"
	},
	"principalId": "string",
	"serverName": "string",
	"clientCertificateChain": [
		"string",
		"string"
	]
}
```

`connectionMetadata`  
与客户端连接到 Amazon IoT Core相关的元数据或其他信息。

`principalId`  
在 TLS 连接中与客户端关联的主体标识符。

`serverName`  
[服务器名称指示（SNI）](https://www.rfc-editor.org/rfc/rfc3546#section-3.1)主机名字符串。 Amazon IoT Core 要求设备将 [SNI 扩展](https://www.rfc-editor.org/rfc/rfc3546#section-3.1)发送到传输层安全性（TLS）协议，并在 `host_name` 字段中提供完整的端点地址。

`clientCertificateChain`  
代表客户端 X.509 证书链的字符串数组。

**Lambda 函数响应示例**

```
{
	"isAuthenticated": "boolean"
}
```

`isAuthenticated`  
一个布尔值，指示是否已对请求进行身份验证。

**注意**  
在 Lambda 响应中，`isAuthenticated` 必须为 `true`，才能继续进行进一步身份验证和授权。否则，会禁用物联网客户端证书，并会阻止 X.509 客户端证书进行自定义身份验证，从而无法进行进一步的身份验证和授权。

## 第 3 步：授权调用您 Amazon IoT 的 Lambda 函数


创建 Lambda 函数后，必须使用 add-permissi Amazon IoT on CLI 命令授予调用该函数的[权限](https://docs.amazonaws.cn//cli/latest/reference/lambda/add-permission.html)。请注意，每当尝试连接到您配置的端点时，都将调用此 Lambda 函数。有关更多信息，请参阅[授权 Amazon IoT 调用您的 Lambda](custom-auth-authorize.md) 函数。

## 步骤 4：为域设置身份验证配置


以下部分介绍如何使用 Amazon CLI为自定义域设置身份验证配置。

### 为域设置客户端证书配置（CLI）


如果您没有域配置，请使用 [https://docs.amazonaws.cn//cli/latest/reference/iot/create-domain-configuration.html](https://docs.amazonaws.cn//cli/latest/reference/iot/create-domain-configuration.html) CLI 命令创建一个。如果您已有域配置，请使用 [https://docs.amazonaws.cn//cli/latest/reference/iot/update-domain-configuration.html](https://docs.amazonaws.cn//cli/latest/reference/iot/update-domain-configuration.html) CLI 命令更新域的客户端证书配置。您必须添加您在上一步中创建的 Lambda 函数的 ARN。

```
aws iot create-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type AWS_X509|CUSTOM_AUTH_X509 \
    --application-protocol SECURE_MQTT|HTTPS \
    --client-certificate-config 'clientCertificateCallbackArn":"arn:aws:lambda:us-east-2:123456789012:function:my-function:1"}'
```

```
aws iot update-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type AWS_X509|CUSTOM_AUTH_X509 \
    --application-protocol SECURE_MQTT|HTTPS \
    --client-certificate-config '{"clientCertificateCallbackArn":"arn:aws:lambda:us-east-2:123456789012:function:my-function:1"}'
```

`domain-configuration-name`  
域配置的名称。

`authentication-type`  
域配置的身份验证类型。有关更多信息，请参阅[选择身份验证类型](protocols.md#connection-protocol-auth-mode)。

`application-protocol`  
设备用来与 Amazon IoT Core进行通信的应用程序协议。有关更多信息，请参阅[选择应用程序协议](protocols.md#protocol-selection)。

`client-certificate-config`  
为域指定客户端身份验证配置的对象。

`clientCertificateCallbackArn`  
建立新连接时在 TLS 层中 Amazon IoT 调用的 Lambda 函数的亚马逊资源名称 (ARN)。要自定义客户端身份验证以执行自定义客户端证书验证，您必须添加您在上一步中创建的 Lambda 函数的 ARN。

有关更多信息，请参阅 *Amazon IoT API 参考[UpdateDomainConfiguration](https://docs.amazonaws.cn//iot/latest/apireference/API_UpdateDomainConfiguration.html)*中的[CreateDomainConfiguration](https://docs.amazonaws.cn//iot/latest/apireference/API_CreateDomainConfiguration.html)和。有关域配置的更多信息，请参阅[域配置](https://docs.amazonaws.cn//iot/latest/developerguide/iot-custom-endpoints-configurable.html)。