4. 证书申请与注册:CSR生成、身份验证、注册协议

证书申请这个环节,说白了就是设备向CA证明「我是谁」的过程。我见过不少团队在证书签发后出问题,追根溯源,八成是申请阶段埋的坑。今天咱们就把CSR生成、身份验证、还有EST/SCEP/CMP这三个主流协议掰开揉碎聊一聊。

4.1 CSR生成——证书请求的「身份证草稿」

CSR(Certificate Signing Request)是设备发给CA的申请材料。它包含公钥、设备身份信息(CN、OU等),以及用私钥做的签名。CA拿到后先验签名,再签发证书。

核心要点:CSR中的公钥必须与设备本地私钥配对。私钥一旦泄露,整个信任链就崩塌了。

4.1.1 生成步骤(以OpenSSL为例)

# 1. 生成私钥(推荐ECC,性能更好)
openssl ecparam -genkey -name prime256v1 -out device.key

# 2. 生成CSR
openssl req -new -key device.key -out device.csr \
  -subj "/CN=device001.example.com/O=MyOrg/OU=IoT"

# 3. 查看CSR内容
openssl req -in device.csr -noout -text

我个人习惯在生成私钥时加上 -aes-256-cbc 加密,虽然每次重启要输密码,但安全等级高一个档次。你想想看,如果设备被物理破解,加密的私钥至少能拖住攻击者一阵子。

4.1.2 避坑指南

  • 密钥长度别偷懒:RSA至少2048位,ECC推荐P-256或更高。我曾经见过某厂商用1024位RSA,结果被暴力破解,整个产品线回炉重造。
  • CN别乱填:CN通常用设备唯一标识(如序列号或MAC地址),别用易变的主机名。我在项目中遇到过客户用IP做CN,结果网络拓扑一变,所有证书都得重新申请。
  • SAN(Subject Alternative Name)必填:现代浏览器和TLS库优先检查SAN,CN已降级为备用字段。CSR生成时务必带上 -addext "subjectAltName=DNS:device.example.com"。

4.2 身份验证——CA凭什么相信你?

CA收到CSR后,得确认「你确实是你」。不同场景验证手段不同,我按安全等级排了个序:

验证方式 安全等级 适用场景 我踩过的坑
预共享密钥(PSK) 低 内部测试、低风险IoT PSK硬编码在固件里,一泄露全完蛋
手动审批 中 企业CA、少量设备 运维人员漏审,证书过期没人管
证书挑战 高 设备已有初始证书 挑战值有效期太短,设备时钟不准导致失败
带外验证(如DNS/Email) 高 公开CA、Web服务器 DNS记录没及时更新,验证超时

注意:千万别把PSK当万能钥匙。我曾经审计过一个项目,所有设备用同一个PSK,结果一台被攻破,整个网络都能伪造证书请求。PSK必须每设备独立,且定期轮换。

4.3 注册协议——EST、SCEP、CMP怎么选?

这三个协议是设备与CA通信的「语言」。我直接说结论:新项目首选EST,遗留系统用SCEP,复杂PKI场景上CMP。下面逐个拆解。

4.3.1 SCEP——老当益壮,但别强求安全

SCEP(Simple Certificate Enrollment Protocol)是思科在90年代搞的,简单粗暴。它用HTTP传输,靠PSK或挑战密码做初始验证。

  • 优点:实现简单,几乎所有网络设备都支持。
  • 缺点:没有标准消息加密,PSK容易泄露,不支持证书续期时的密钥更新。
  • 我的建议:如果设备只支持SCEP,务必配合HTTPS传输,且PSK长度不低于32字节。
# SCEP请求示例(通过openssl模拟)
openssl scep -url http://ca.example.com/scep \
  -key device.key -cert device.crt \
  -newkey device.csr -out issued.crt

4.3.2 EST——RFC 7030,现代设备的首选

EST(Enrollment over Secure Transport)基于HTTPS,天然解决传输加密问题。它支持证书续期、密钥更新、服务端证书验证,是RFC标准。

  • 优点:安全、标准化、支持带外初始信任(如通过制造商证书)。
  • 缺点:设备需要支持HTTPS客户端,对资源受限的IoT设备稍重。
  • 我推荐的做法:用EST的 /simpleenroll 接口做初始申请,/simplereenroll 做续期,配合 ca-certs 端点同步CA证书链。

小技巧:EST支持TLS双向认证。我在项目中让设备用制造商预置的证书做初始认证,后续续期用设备自己的证书,既安全又自动化。

4.3.3 CMP——企业PKI的瑞士军刀

CMP(Certificate Management Protocol)是三个协议里最复杂的,但功能也最全。它支持证书生命周期全流程:申请、更新、撤销、密钥恢复。

特性 SCEP EST CMP
传输安全 依赖HTTP/TLS 强制HTTPS 自带PKI保护
初始认证 PSK/挑战密码 带外证书/PSK 共享密钥/证书
密钥更新 不支持 支持 支持
实现复杂度 低 中 高
适用场景 遗留网络设备 IoT、移动设备 企业PKI、CA间交互

说实话,CMP我一般只在CA间同步或大型企业PKI里用。普通设备用EST完全够用,别为了炫技上CMP,维护成本会让你头疼。

4.4 注册流程全景图

下面这张图把整个证书申请与注册的流程串起来了。从设备生成CSR,到CA验证身份,再到协议交互,最后拿到证书——每一步都环环相扣。

证书申请与注册流程 证书申请与注册流程 设备生成CSR 含公钥+身份信息 身份验证 PSK/证书/带外 注册协议 EST/SCEP/CMP CA签发证书 验证CSR签名 设备安装证书 导入信任链 证书使用 关键点: • 私钥永不离设备 • CSR签名必须验证 • 协议选择看场景

4.5 实战建议

说了这么多,最后给几条落地建议:

  • CSR生成自动化:设备首次启动时自动生成密钥对和CSR,别让运维手动操作。我在项目中用TLS模块的硬件安全芯片(HSM)生成密钥,私钥直接锁在芯片里,软件层根本拿不到。
  • 身份验证分层:初始注册用带外验证(如扫描二维码绑定),后续续期用证书挑战。这样既保证首次信任,又降低运维成本。
  • 协议选型:新设备一律用EST,别犹豫。SCEP留给存量设备,CMP只在CA间通信或复杂策略场景使用。
  • 日志与监控:所有注册请求必须记录设备ID、时间、结果。我吃过一次亏:某次CA被DDoS,日志没开,事后根本查不出哪些设备受影响。

最后提醒一句:证书申请不是一次性动作。设备生命周期内可能多次续期、密钥更新、甚至撤销重发。设计注册流程时,务必考虑全生命周期管理,别只盯着第一次申请。