AWS IoT
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

使用您自己的证书

要使用您自己的 X.509 证书,必须在 AWS IoT 中注册 CA 证书。之后,CA 证书可用于签发设备证书。您可以使用相同的使用者字段为每个区域的每个 AWS 账户最多注册 10 个 CA 证书。这样,您便可以拥有多个能够签发设备证书的 CA。

注意

设备证书必须由已注册的 CA 证书签发。CA 证书通常用于创建中间 CA 证书。如果使用中间证书签发设备证书,则您必须注册中间 CA 证书。在连接到 AWS IoT 时应使用 AWS IoT 根 CA 证书,即使您注册了自己的根 CA 证书也是如此。设备使用 AWS IoT 根 CA 证书验证 AWS IoT 服务器的身份。

如果没有 CA 证书,则可以使用 OpenSSL 工具创建一个。

创建 CA 证书

  1. 生成密钥对。

    openssl genrsa -out rootCA.key 2048
  2. 使用密钥对中的私有密钥生成 CA 证书。

    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

注册您的 CA 证书

要注册您的 CA 证书,您必须:

  • 从 AWS IoT 获取注册代码。

  • 使用您的 CA 证书来签署私有密钥验证证书。

  • 将您的 CA 证书和私有密钥验证证书传递给 register-ca-certificate CLI 命令。

    必须将私有密钥验证证书中的 Common Name 字段设置为 get-registration-code CLI 命令生成的注册代码。命令会为每个 AWS 账户生成一个注册代码。您可以使用 register-ca-certificate 命令或 AWS IoT 控制台注册 CA 证书。

注意

CA 证书无法注册到同一区域中的多个账户。但是,CA 证书可以注册到不同区域中的多个账户。

注册 CA 证书

  1. 从 AWS IoT 获取注册代码。此代码用作私有密钥验证证书的 Common Name

    aws iot get-registration-code
  2. 为私有密钥验证证书生成密钥对。

    openssl genrsa -out verificationCert.key 2048
  3. 为私有密钥验证证书创建 CSR。将证书的 Common Name 字段设置为您的注册代码。

    openssl req -new -key verificationCert.key -out verificationCert.csr

    系统将提示您输入证书的一些信息,其中包括 Common Name

    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) []:XXXXXXXXXXXXMYREGISTRATIONCODEXXXXXX Email Address []:
  4. 使用 CSR 创建私有密钥验证证书。

    openssl x509 -req -in verificationCert.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out verificationCert.pem -days 500 -sha256
  5. 向 AWS IoT 注册 CA 证书。将 CA 证书和私有密钥验证证书传递给 register-ca-certificate CLI 命令。

    aws iot register-ca-certificate --ca-certificate file://rootCA.pem --verification-cert file://verificationCert.pem
  6. 使用 update-certificate CLI 命令激活 CA 证书。

    aws iot update-ca-certificate --certificate-id xxxxxxxxxxx --new-status ACTIVE

使用您的 CA 证书创建设备证书

您可以使用在 AWS IoT 中注册的 CA 证书创建设备证书。必须先在 AWS IoT 中注册设备证书,然后才能使用它。

创建设备证书

  1. 生成密钥对。

    openssl genrsa -out deviceCert.key 2048
  2. 为设备证书创建 CSR。

    openssl req -new -key deviceCert.key -out deviceCert.csr

    系统将提示您输入一些信息,如下所示。

    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 []:
  3. 使用 CSR 创建设备证书。

    openssl x509 -req -in deviceCert.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out deviceCert.pem -days 500 -sha256

    注意

    您必须使用在 AWS IoT 中注册的 CA 证书创建设备证书。如果您在自己的 AWS 账户中注册了多个 CA 证书 (具有相同的使用者字段和公有密钥),则必须在注册设备证书时指定用于创建设备证书的 CA 证书。

  4. 注册设备证书。

    aws iot register-certificate --certificate-pem file://deviceCert.pem --ca-certificate-pem file://rootCA.pem
  5. 使用 update-certificate CLI 命令激活设备证书。

    aws iot update-certificate --certificate-id xxxxxxxxxxx --new-status ACTIVE

注册设备证书

您必须使用在 AWS IoT 中注册的 CA 证书签发设备证书。如果您在自己的 AWS 账户中注册了多个 CA 证书 (具有相同的使用者字段和公有密钥),则必须在注册设备证书时指定用于签发设备证书的 CA 证书。您可以手动注册每个设备证书,也可以使用自动注册功能,利用该功能,设备可以在首次连接到 AWS IoT 时注册自己的证书。

手动注册设备证书

使用以下 CLI 命令注册设备证书:

aws iot register-certificate --certificate-pem file://deviceCert.crt --ca-certificate-pem file://caCert.crt

使用自动/即时注册功能来注册设备证书

要在设备首次连接到 AWS IoT 时自动注册设备证书,您必须启用 CA 证书的自动注册。这将在设备连接到 AWS IoT 时注册由您的 CA 证书签发的任何设备证书。

启用自动注册

使用 update-ca-certificate API 将 CA 证书的 auto-registration-status 设置为 ENABLE

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

使用 register-ca-certificate API 注册 CA 证书时,还可以将 auto-registration-status 设置为 ENABLE

aws iot register-ca-certificate --ca-certificate file://rootCA.pem --verification-cert file://privateKeyVerificationCert.crt --allow-auto-registration

当设备首次尝试连接到 AWS IoT 时,作为 TLS 握手流程的一部分,它必须提供已注册的 CA 证书和设备证书。AWS IoT 会将 CA 证书识别为已注册的 CA 证书,自动注册设备证书并将其状态设置为 PENDING_ACTIVATION。这意味着,已自动注册设备证书,该证书正在等待激活。证书必须处于 ACTIVE 状态才能用来连接到 AWS IoT。当 AWS IoT 自动注册证书时或者当处于 PENDING_ACTIVATION 状态的证书建立连接时,AWS IoT 将向以下 MQTT 主题发布消息:

$aws/events/certificates/registered/caCertificateID

其中 caCertificateID 是颁发设备证书的 CA 证书的 ID。

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

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

您可以创建一项规则,以侦听此主题并执行一些操作。我们建议您创建一项 Lambda 规则,以验证设备证书是否位于证书吊销列表 (CRL) 中,激活证书,创建策略并将其附加到证书中。该策略可确定设备能够访问的资源。有关如何创建可侦听 $aws/events/certificates/registered/caCertificateID 主题并执行这些操作的 Lambda 规则的更多信息,请参阅即时注册

停用 CA 证书

当您注册设备证书时,AWS 将检查相关的 CA 证书是否处于 ACTIVE 状态。如果 CA 证书的状态是 INACTIVE,AWS IoT 将禁止注册设备证书。通过将 CA 证书标记为 INACTIVE,可以防止在账户中注册由受损的 CA 颁发的任何新设备证书。您可以使用 update-ca-certificate API 停用 CA 证书:

$ aws iot update-ca-certificate --certificate-id certificateId --new-status INACTIVE

注意

除非您明确吊销由受损的 CA 证书签发的已注册设备证书,否则所有此类证书均将继续工作。

使用 ListCertificatesByCA API 获取由受损的 CA 签发的所有已注册设备证书的列表。对于由受损的 CA 证书签发的每个设备证书,请使用 UpdateCertificate API 吊销该设备证书以避免使用它。

吊销设备证书

如果您在已注册的设备证书上检测到可疑活动,可使用 update-certificate API 吊销该证书:

$ aws iot update-certificate --certificate-id certificateId --new-status REVOKED

如果在自动注册设备证书期间发生任何错误或异常,AWS IoT 将向您的 CloudWatch Logs 日志发送相关事件或消息。有关如何为您的账户设置日志的更多信息,请参阅 Amazon CloudWatch 文档