教程:了解 X.509 公钥证书
X.509 证书是代表用户、计算机、服务或设备的数字文档。 这些证书由证书颁发机构 (CA)、从属 CA 或注册机构颁发,并包含证书使用者的公钥。 X.509 证书并不包含使用者的私钥(必须安全存储)。 公钥证书由 RFC 5280 记录。 它们已进行数字签名,并且通常包含以下信息:
- 证书使用者的信息
- 与使用者私钥相对应的公钥
- 证书颁发机构的信息
- 支持的加密和/或数字签名算法
- 用于确定证书吊销和有效性状态的信息
证书字段
久而久之,现已有三个证书版本。 每个版本都会在前一个版本的基础上添加字段。 版本 3 是最新版本,除包含自身字段外,还包含版本 1 和版本 2 字段。 版本 1 定义以下字段:
- 版本:标识证书版本号的值(1、2 或 3)
- 序列号:由 CA 颁发的每份证书的唯一编号
- CA 签名算法:CA 用于签署证书内容的算法名称
- 颁发者名称:证书颁发机构的可分辨名称 (DN)
- 有效期:证书有效的时间段
- 使用者名称:证书所代表的实体名称
- 使用者公钥信息:证书使用者所拥有的公钥
版本 2 添加了以下字段,其中包含证书颁发者的信息。 不过,这些字段很少使用。
- 颁发者唯一 ID:由 CA 定义的证书颁发机构的唯一标识符
- 使用者唯一 ID:由证书颁发机构定义的证书使用者的唯一标识符
版本 3 证书添加了以下扩展:
- 颁发机构密钥标识符:可以是以下两个值其中之一:
- 由 CA 颁发的证书的使用者和序列号
- 颁发此证书的 CA 的公钥哈希
- 使用者密钥标识符:当前证书的公钥哈希
- 密钥用法:定义可为其使用证书的服务。 该选项可以是如下一个或多个值:
- 数字签名
- 不可否认性
- 密钥加密
- 数据加密
- 密钥协议
- 密钥证书签名
- CRL 签名
- 仅加密
- 仅解密
- 私钥使用期限:密钥对的私钥部分的有效期
- 证书策略:用于验证证书使用者的策略
- 策略映射:将一个组织的策略映射到另一个组织的策略中
- 使用者可选名称:使用者的替代名称列表
- 颁发者可选名称:证书颁发机构的替代名称列表
- 使用者 Dir 属性:X 500 或 LDAP 目录的属性
- 基本约束:允许证书指定是将其颁发给 CA,还是颁发给用户、计算机、设备或服务。 此扩展还包括一个路径长度约束,用于限制可以存在的从属 CA 的数量。
- 名称约束:指定在 CA 颁发的证书中允许使用的命名空间
- 策略约束:可用于禁止 CA 之间的策略映射
- 扩展密钥用法:表示在“密钥用法”扩展中标识的目的之外如何使用证书的公钥
- CRL 分发点:包含一个或多个可在其上发布基本证书吊销列表 (CRL) 的 URL
- 禁止任何策略:禁止在从属 CA 证书中使用“所有颁发策略” OID (2.5.29.32.0)
- 最新 CRL:包含一个或多个可在其上发布证书颁发机构增量 CRL 的 URL
- 颁发机构信息访问:包含一个或多个可在其上发布 CA 证书的 URL
- 使用者信息访问:包含有关如何检索证书使用者的其他详情的信息
证书格式
可以采用多种格式保存证书。 Azure IoT 中心身份验证通常使用 PEM 和 PFX 格式。
二进制证书
该证书包含使用 DER ASN. 1 编码的原始形式二进制证书。
ASCII PEM 格式
PEM 证书(扩展名为 .pem)包含以 -----BEGIN CERTIFICATE----- 开头并以 -----END CERTIFICATE----- 结尾的 base64 编码证书。 PEM 格式非常常见,在上传某些证书时 IoT 中心需要此格式。
ASCII (PEM) 密钥
包含 base64 编码的 DER 密钥,该密钥可能包含有关用于密码保护的算法的其他元数据。
PKCS#7 证书
一种用于传输已签名或已加密数据的格式。 该证书由 RFC 2315 定义。 它可以包括整个证书链。
PKCS#8 密钥
一种私钥存储格式,由 RFC 5208 定义。
PKCS#12 密钥和证书
一种复杂的格式,可以存储和保护密钥和整个证书链。 它通常与 .pfx 扩展名一起使用。 PKCS#12 等同于 PFX 格式。
更多信息
有关详细信息,请参阅以下主题:
后续步骤
若要生成可用于对 IoT 中心的设备进行身份验证的测试证书,请参阅以下主题:
如果你有证书颁发机构 (CA) 证书或从属 CA 证书,并且想要将其上传到 IoT 中心并证明自己拥有该证书,请参阅证明对 CA 证书的所有权。