X.509 客户端证书
X.509 证书向 AWS IoT 提供对客户端和设备连接进行身份验证的功能。客户端证书必须先注册到 AWS IoT,然后客户端才能与 AWS IoT 进行通信。可以在同一 AWS 区域 的多个 AWS 账户 中注册客户端证书,以便在同一区域的 AWS 账户 之间移动设备。请参阅 通过多账户注册在多个 AWS 账户 中使用 X.509 客户端证书 了解更多信息。
我们建议为每个设备或客户端提供一个唯一的证书,以便进行精细的客户端管理操作,包括证书吊销。设备和客户端还必须支持证书轮换和更换,以帮助确保在证书过期时平稳运行。
有关使用 X.509 证书支持多个设备的信息,请参阅 设备预调配 以查看 AWS IoT 支持的不同证书管理和预调配选项。
AWS IoT 支持以下类型的 X.509 客户端证书:
-
AWS IoT 生成的 X.509 证书
-
由注册到 AWS IoT 的 CA 签发的 X.509 证书。
-
由未注册到 AWS IoT 的 CA 签发的 X.509 证书。
本节介绍如何在 AWS IoT 中管理 X.509 证书。您可以使用 AWS IoT 控制台或 AWS CLI 执行以下证书操作:
有关执行这些操作的 AWS CLI 命令的更多信息,请参阅 AWS IoT CLI 参考
使用 X.509 客户端证书
X.509 证书对连接到 AWS IoT 的客户端和设备进行身份验证。与其它身份和身份验证机制相比,X.509 证书具有多项优势。有了 X.509 证书,可以将非对称密钥用于设备。例如,您可以将私有密钥刻录到设备上的安全存储中,这样敏感的加密材料永远不会离开设备。X.509 证书可以通过用户名和密码或持有者令牌等其它方案提供更可靠的客户端身份验证,因为私有密钥永远不会离开设备。
AWS IoT 使用 TLS 协议的客户端身份验证模式来验证客户端证书。TLS 支持适用于多种编程语言和操作系统并且通常用于为数据加密。在 TLS 客户端身份验证中,AWS IoT 请求 X.509 客户端证书并依照证书注册表验证证书的状态和 AWS 账户。随后,将要求客户端提供与证书所含公有密钥相对应的私有密钥的所有权证明。AWS IoT 要求客户端将服务器名称指示(SNI)扩展
为了便于客户端安全、一致地连接到 AWS IoT Core,x.509 客户端证书必须符合以下条件:
-
已在 AWS IoT Core 中注册。有关更多信息,请参阅 注册客户端证书。
-
状态为
ACTIVE。有关更多信息,请参阅 激活或停用客户端证书。 -
尚未达到证书到期日期。
您可以创建使用 Amazon Root CA 的客户端证书,并可以使用您自己的由其它证书颁发机构(CA)签发的客户端证书。有关使用 AWS IoT 控制台创建使用 Amazon Root CA 的证书的更多信息,请参阅 创建 AWS IoT 客户端证书。有关使用您自己的 X.509 证书的更多信息,请参阅 创建您自己的客户端证书。
对于 CA 证书签发的证书过期日期和时间,将在创建 CA 证书时设置。AWS IoT 生成的 X.509 证书在 UTC 2049 年 12 月 31 日(2049-12-31T23:59:59Z)到期。
AWS IoT Device Defender 可以对支持常见的物联网安全最佳实践的 AWS 账户 和设备执行审计。这包括管理由您的 CA 或 Amazon Root CA 签署的 X.509 证书的到期日期。有关管理证书的到期日期的更多信息,请参阅设备证书即将到期和 CA 证书即将到期。
在官方 AWS IoT 博客上,如何使用 AWS IoT 管理物联网设备证书轮换
通过多账户注册在多个 AWS 账户 中使用 X.509 客户端证书
多账户注册能够在同一区域或不同区域的 AWS 账户 之间移动设备。您可以在预生产账户中注册、测试和配置设备,然后在生产账户中注册并使用相同的设备和设备证书。您还可以在设备上注册客户端证书,或在没有已向 AWS IoT 注册的 CA 的情况下注册设备证书。有关更多信息,请参阅 Register a client certificate signed by an unregistered CA (CLI)(注册由未注册的 CA 签发的客户端证书(CLI))。
注意
用于多账户注册的证书在 iot:Data-ATS、iot:Data(旧式)、iot:Jobs 和 iot:CredentialProvider 端点类型中获得支持。有关 AWS IoT 设备端点的更多信息,请参阅 AWS IoT 设备数据和服务端点。
使用多账户注册的设备必须将 Server Name Indication(SNI)扩展host_name 字段提供完整端点地址。AWS IoT 在 host_name 中使用将端点地址将连接路由到正确的 AWS IoT 账户。未发送 host_name 中的有效端点地址的现有设备将继续工作,但它们将无法使用需要此信息的特征。有关 SNI 扩展以及如何识别 host_name 字段的端点地址的更多信息,请参阅。AWS IoT Core 中的传输安全
使用多账户注册
-
您可以向 CA 注册设备证书。您可以在
SNI_ONLY模式下在多个账户中注册签名 CA,并使用该 CA 向多个账户注册相同的客户端证书。有关更多信息,请参阅 在 SNI_ONLY 模式下注册 CA 证书(CLI)- 建议。 -
您可以在没有 CA 的情况下注册设备证书。请参阅 注册由未注册的 CA(CLI)签发的客户端证书。注册 CA 是可选的。您不需要向 AWS IoT 注册已对设备证书进行签名的 CA。
AWS IoT 支持的证书签名算法
AWS IoT 支持以下证书签名算法:
-
SHA256WITHRSA
-
SHA384WITHRSA
-
SHA512WITHRSA
-
SHA256WITHRSAANDMGF1(RSASSA-PSS)
-
SHA384WITHRSAANDMGF1(RSASSA-PSS)
-
SHA512WITHRSAANDMGF1(RSASSA-PSS)
-
DSA_WITH_SHA256
-
ECDSA-WITH-SHA256
-
ECDSA-WITH-SHA384
-
ECDSA-WITH-SHA512
有关证书身份验证和安全性的更多信息,请参阅设备证书密钥质量。
注意
证书签名请求(CSR)必须包含公有密钥。该密钥可以是长度至少为 2048 位的 RSA 密钥,或者是来自 NIST P-256、NIST P-384 或 NIST P-521 曲线的 ECC 密钥。有关更多信息,请参阅《AWS IoT API 参考指南》中的 CreateCertificateFromCsr。
AWS 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 创建证书,您可以使用支持的密钥算法为您的 CSR 生成公钥。要使用 RegisterCertificate 或 RegisterCertificateWithoutCA 注册您自己的证书,您可以使用支持的密钥算法为证书生成公钥。
有关更多信息,请参阅安全策略。