一、设备 云端 mTLS 完整交互流程图(Mermaid,可直接粘贴VSCode、飞书渲染)
1. 整体握手+证书校验全流程时序图
sequenceDiagram
participant D as IoT设备(WiFi/蓝牙模组)
participant C as 云端服务
Note over D,C: 前置:设备固化根CA、设备证书+设备EC私钥;云端预置同一份根CA
D->>C: 1.TCP建连,发送Client Hello
Note D: 携带TLS版本、secp256r1、随机数Client Random、支持加密套件
C-->>D: 2.Server Hello + 选定套件/曲线 + Server Random
C-->>D: 3.下发云端证书链:云端叶子证书+中间CA证书
C-->>D: 4.Certificate Request:要求设备回传证书(双向mTLS)
D->>D: 设备本地校验云端整条证书链
Note D: 有效期/EC曲线/KeyUsage逐层验签,追溯本地根CA;OCSP/CRL查吊销
alt 云端证书校验失败
D--xC: 断开连接,握手终止
else 云端证书合法
D->>C: 5.上传设备证书链:设备叶子证书+中间CA证书
end
C->>C: 云端校验设备整条证书链(设备身份认证核心)
Note C: 逐层验签到可信根CA;校验SN、有效期、吊销状态、secp256r1合规
alt 设备证书非法
C--xD: 拒绝连接,流程结束
else 设备认证通过
Note over D,C: 进入ECDH密钥协商(证书校验完成后执行)
D->>D: 设备:secret=ECDH(云端公钥, 设备证书私钥)
C->>C: 云端:secret=ECDH(设备证书公钥,云端证书私钥)
Note over D,C: 双方secp256r1一致,得到完全相同secret
D->>D: HKDF(secret+两端随机数) 生成AES加密密钥、MAC密钥
C->>C: HKDF生成完全一致会话密钥
D->>C: Finished报文(新密钥加密)
C->>D: Finished报文(新密钥加密)
Note over D,C: 校验Finished,确认密钥无误
Note over D,C: TLS握手全部完成,业务加密通信正式开始
end
2. 证书链层级架构图
graph TD
A[本地可信根CA证书<br/>secp256r1,预置不联网下发] -->|根CA私钥签名|B[中间二级CA证书]
B -->|中间CA私钥签名|C[设备叶子证书<br/>内置设备EC公钥D_PubKey]
B -->|中间CA私钥签名|D[云端叶子证书<br/>内置云端EC公钥C_PubKey]
Note over A,D: 传输规则:只传叶子+中间CA;根CA本地留存
二、X.509椭圆曲线证书完整字段结构(适配secp256r1物联网证书)
分为三大块:证书基础信息、公钥区块、签名区块;所有签名使用ecdsa-with-SHA256。
整体字段清单
1. 版本 Version
默认V3(X.509 v3),只有V3支持密钥用途、吊销、扩展字段。
2. 序列号 Serial Number
证书全局唯一编号;OCSP/CRL吊销查询依靠该序列号匹配设备。
3. 签名算法 Signature Algorithm
固定:ecdsa-with-sha256,禁止SHA1、MD5、RSA签名。
4. 签发者 Issuer
签发CA的名称(根CA/中间CA);校验时用来匹配上一级证书。
5. 有效期 Validity
• NotBefore:证书生效起始时间
• NotAfter:证书过期时间
过期直接判定证书失效。
6. 主体 Subject
设备证书:写入设备SN、模组型号、厂商信息;
云端证书:写入云端域名。
7. 主体公钥信息 Subject Public Key Info(EC核心区域)
算法标识:id-ecPublicKey
椭圆曲线参数:secp256r1
公钥:EC公钥点位 (x,y),用于ECDH密钥协商
设备侧:此处为公钥D_PubKey;设备安全区单独保存对应的D_PrivKey,证书内不会存放私钥。
8. X.509 V3 扩展字段(IoT/CRA强制必填)
扩展字段 设备证书配置要求 作用
Key Usage Digital Signature + Key Agreement 签名校验、支持ECDH密钥协商,少一项TLS拒绝握手
Extended Key Usage TLS Client Auth(设备)/TLS Server Auth(云端) 限定证书只能用于TLS双向认证,防止证书挪作他用
Subject Alternative Name 设备SN/云端域名 多维度匹配设备身份,防止名称不匹配
CRL Distribution Points 填写CA吊销列表地址 支持CRL吊销校验
OCSP Responder OCSP服务器地址 支持在线吊销查询,CRA强制要求
Basic Constraints 叶子证书:CA:FALSE;中间/根CA:CA:TRUE 叶子证书禁止签发下级证书,防证书滥用
9. 签发者唯一标识、主体唯一标识
可选,用于区分重名CA。
10. 证书签名 Signature Value
上一级CA使用自身私钥,对整张证书全部内容做ECDSA签名;
校验逻辑:用上级证书公钥解密签名,比对证书哈希值,判断证书是否被篡改。
三、分层证书字段举例(三级链拆分)
1)根CA证书
• Basic Constraints:CA=TRUE,可签发下级CA
• 公钥:secp256r1根公钥,全网信任锚
• 自签名:签发者=主体,自己签自己
2)中间CA证书
• Basic Constraints:CA=TRUE,可签发设备/云端叶子证书
• 签名由根CA私钥生成;验签使用根CA公钥
3)设备叶子证书(重点)
• Basic Constraints:CA=FALSE,不能再签发任何证书
• KeyUsage必须包含Key Agreement,适配ECDH运算
• 公钥参与ECDH;私钥只存在设备安全硬件,永不入网
• 绑定设备SN,实现一设备一证书
四、关键对应关系(串联证书+ECDH)
1. 证书链校验只负责身份信任:确认证书由可信CA签发、未篡改、未吊销;
2. 证书的Subject Public Key取出椭圆公钥,用于ECDH;
3. ECDH必须搭配同曲线secp256r1,曲线不一致即便证书合法,也无法算出相同共享secret;
4. 顺序硬性规定:证书全量校验通过 → 才允许执行ECDH,杜绝中间人劫持。
五、极简结构速记
证书主体存公钥,不存私钥;
上级私钥签下级,上级公钥验签名;
一路验到本地根CA才算可信;
扩展字段管控用途,吊销字段满足CRA合规;
公钥提取出来做ECDH协商密钥。