4. 证书类型与标准

在设备身份体系中,证书不是一张“电子身份证”那么简单,它是一份由CA签名、遵循严格语法和语义的标准数据结构。理解X.509证书的字段构成、扩展机制以及不同设备证书的用途差异,是设计证书生命周期管理策略的基础。本章从证书结构出发,逐步展开扩展字段、策略与CPS,并对比TLS客户端证书、代码签名证书等典型设备证书的差异。

一、X.509证书的核心结构

X.509 v3证书由三大部分组成:待签名证书主体(TBSCertificate)、签名算法标识和签名值。CA对TBSCertificate的DER编码做哈希后签名,验签方用相同算法重新计算并比对,从而确认证书未被篡改。

TBSCertificate内部包含以下关键字段:

  • version:版本号,v3值为2,是使用扩展字段的前提。
  • serialNumber:CA分配的唯一序列号,吊销列表(CRL)和OCSP均依赖它定位证书。
  • signature:CA使用的签名算法,必须与外层签名算法一致。
  • issuer:签发者DN,包含C、O、OU、CN等属性。
  • validity:notBefore与notAfter,定义证书有效期。
  • subject:持有者DN,设备证书通常将唯一设备标识写入CN或serialNumber。
  • subjectPublicKeyInfo:公钥算法及公钥值,是设备身份的核心凭据。
  • extensions:v3扩展字段集合,决定证书的能力边界。

关键点:证书的“身份”由subject和subjectPublicKeyInfo共同定义,而“能做什么”几乎全部由extensions决定。设备证书设计中最容易出错的地方,往往不是DN写错,而是扩展字段缺失或误配。

二、常见扩展字段及其工程含义

扩展字段分为标准扩展和私有扩展。设备证书场景中,以下字段出现频率最高:

扩展字段 OID 作用 设备场景注意点
Basic Constraints 2.5.29.19 标识是否为CA证书 终端设备证书必须CA:FALSE,否则可被滥用签发子证书
Key Usage 2.5.29.15 限定密钥用途 TLS客户端证书需digitalSignature;代码签名需digitalSignature+contentCommitment
Extended Key Usage 2.5.29.37 细化用途场景 clientAuth、codeSigning、serverAuth不可混用
Subject Alternative Name 2.5.29.17 替代身份标识 可放设备序列号、MAC、URI、IP,避免DN重名冲突
CRL Distribution Points 2.5.29.31 指定CRL下载地址 离线设备需评估CRL可达性,或改用OCSP/短有效期
Authority Key Identifier 2.5.29.35 标识签发CA公钥 CA轮换时用于快速构建信任链
Certificate Policies 2.5.29.32 声明遵循的证书策略 用于合规审计和跨域信任映射

扩展字段分为critical和非critical。标记为critical的扩展,验签方必须理解并处理,否则应拒绝证书。工程实践中,Basic Constraints和Key Usage通常设为critical,而SAN、EKU等可根据兼容性设为非critical。

三、证书策略与CPS

证书策略(Certificate Policy, CP)是一份文档化声明,描述某类证书的适用场景、身份验证强度、密钥保护要求和吊销规则。它通过Certificate Policies扩展中的OID嵌入证书,供依赖方判断该证书是否满足自身安全要求。

认证业务声明(CPS, Certification Practice Statement)则描述CA在运营层面如何落实策略:包括注册流程、身份核验方式、密钥生成与存储、审计频率、CA私钥保护措施等。CP回答“证书能用于什么”,CPS回答“CA怎么做到”。

设备证书体系中,常见做法是定义多级策略OID:如1.3.6.1.4.1.99999.1.1表示高安全等级设备证书,...1.2表示普通IoT设备证书。依赖方通过策略OID决定是否接受该设备接入。

四、不同设备证书的差异对比

同样是X.509证书,TLS客户端证书、TLS服务端证书、代码签名证书在扩展配置上有本质区别:

  • TLS客户端证书:EKU为clientAuth,Key Usage为digitalSignature,SAN可放设备唯一标识。用于mTLS双向认证,证明设备身份。
  • TLS服务端证书:EKU为serverAuth,Key Usage为digitalSignature+keyEncipherment,SAN必须包含DNS名或IP。用于设备对外提供HTTPS服务。
  • 代码签名证书:EKU为codeSigning,Key Usage为digitalSignature+contentCommitment,通常有效期较短,私钥保护要求极高,常配合时间戳服务使用。
  • 设备身份证书:EKU可自定义或省略,重点在SAN中携带硬件唯一标识,有效期可能长达数年,需配合吊销机制。
# 查看证书扩展字段的常用命令
openssl x509 -in device.crt -noout -text

# 关注输出中的以下段落:
# X509v3 extensions:
#   X509v3 Basic Constraints: critical
#     CA:FALSE
#   X509v3 Key Usage: critical
#     Digital Signature
#   X509v3 Extended Key Usage:
#     TLS Web Client Authentication
#   X509v3 Subject Alternative Name:
#     DNS:device-001.example.com, othername:1.3.6.1.4.1.99999.1.1;UTF8:SN123456

五、案例与常见误区

案例:某厂商为10万台设备签发TLS客户端证书,初期未设置EKU,导致这些证书被误用于服务端身份,攻击者可利用设备证书仿冒服务端。复盘后,在证书模板中强制加入EKU=clientAuth,并将Basic Constraints设为critical CA:FALSE。

常见误区:

  1. 认为DN中的CN足以唯一标识设备,忽视SAN和序列号的作用,导致重名或检索困难。
  2. 将所有扩展设为非critical,验签方可能忽略关键限制,造成用途越权。
  3. 混淆CP与CPS,认为写了CP就满足合规,实际审计时CPS缺失会导致策略无法落地。
  4. 设备证书有效期过长且无吊销通道,私钥泄露后无法及时止损。

设备证书设计必须遵循“最小权限”原则:Key Usage和EKU只授予业务必需的用途,Basic Constraints必须为CA:FALSE,SAN必须包含可唯一追溯的标识。任何“先签发再补扩展”的做法都会在规模化运维中付出高昂代价。

X.509 v3 证书结构与设备证书差异 TBSCertificate(待签名主体) version / serialNumber / signature issuer / validity / subject subjectPublicKeyInfo extensions(v3核心) Basic Constraints Key Usage Extended Key Usage Subject Alt Name CRL Dist Points Cert Policies signatureAlgorithm + signatureValue CA私钥对TBSCertificate签名 设备证书类型对比 TLS客户端证书 EKU: clientAuth | KU: digitalSignature 用途:mTLS双向认证,证明设备身份 TLS服务端证书 EKU: serverAuth | KU: digitalSignature+keyEncipherment 用途:设备对外提供HTTPS服务 代码签名证书 EKU: codeSigning | KU: digitalSignature+contentCommitment 用途:固件/软件签名,配合时间戳 设备身份证书 EKU: 自定义/省略 | SAN: 硬件唯一标识 用途:设备身份注册与生命周期管理 CP(证书策略)声明“能用于什么” → 通过Certificate Policies OID嵌入证书 CPS(认证业务声明)描述“CA怎么做到” → 注册、核验、密钥保护、审计

掌握X.509证书结构与扩展字段的工程含义,是设备证书模板设计、合规审计和故障排查的共同基础。不同设备证书的差异,本质上体现在扩展字段的组合方式上。只有把“身份标识”和“用途约束”同时设计到位,证书才能在设备全生命周期中既可用又可控。