4. 证书生成与申请:密钥对生成与CSR创建

好,咱们进入第四章。这一章讲的是证书生命周期里最基础、也最容易出岔子的环节——密钥对生成和CSR申请。说白了,就是给设备办一张“数字身份证”的流程。

我见过不少项目,证书申请流程走得磕磕绊绊,最后查下来,问题往往出在最开始的密钥生成和CSR字段填写上。所以这一章,咱们把每个细节都掰开揉碎了讲清楚。

4.1 密钥对生成:RSA vs ECC

密钥对,就是一把公钥和一把私钥。私钥自己藏着,公钥放到证书里给别人用。生成密钥对,是证书申请的第一步。

目前工业场景里,主流就两种算法:RSA 和 ECC。我个人的习惯是,新项目优先考虑 ECC,但老系统改造时,得先看看设备支不支持。

对比项 RSA ECC
密钥长度 2048 / 4096 位 256 / 384 位
安全强度 2048位 ≈ 112位对称 256位 ≈ 128位对称
计算开销 高(尤其签名) 低(约快3-5倍)
证书体积 大(约1-2KB) 小(约0.5-1KB)
工业设备兼容性 极好(几乎所有设备支持) 较好(新设备基本支持)

生成RSA密钥对(OpenSSL示例):

# 生成2048位RSA私钥
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out device_private.pem

# 从私钥提取公钥
openssl pkey -in device_private.pem -pubout -out device_public.pem

生成ECC密钥对(OpenSSL示例):

# 生成prime256v1(即secp256r1)椭圆曲线私钥
openssl ecparam -genkey -name prime256v1 -out device_ec_private.pem

# 提取公钥
openssl ec -in device_ec_private.pem -pubout -out device_ec_public.pem

我的经验: 工业PLC和RTU这类资源受限设备,我强烈建议用ECC。有一次给一个老旧SCADA系统升级证书,设备CPU跑RSA 4096签名,每次握手耗时超过3秒,现场直接报警。换成ECC 256后,降到200毫秒以内。

4.2 证书签名请求(CSR)的创建

密钥对生成后,下一步就是创建CSR。CSR里包含了你的公钥和身份信息,然后发给CA去签名。CA签完,证书就生效了。

创建CSR时,最关键的是把身份字段填对。我见过最离谱的一次,有人把CN字段填成了设备型号,结果证书验证时域名对不上,整个产线断连了两小时。

创建CSR的命令:

# 使用RSA私钥创建CSR
openssl req -new -key device_private.pem -out device.csr -subj "/CN=plc-01.factory-a.example.com/O=FactoryA/OU=ProductionLine1/C=CN"

# 使用ECC私钥创建CSR
openssl req -new -key device_ec_private.pem -out device_ec.csr -subj "/CN=rtu-03.site-b.example.com/O=FactoryB/OU=RemoteTerminal/C=CN"

4.3 CSR字段解析

CSR里的字段,每一个都有讲究。咱们一个一个看。

字段 全称 含义 工业场景填写建议
CN Common Name 设备唯一标识名 建议使用FQDN:plc-01.factory-a.example.com
O Organization 组织名称 填写企业法定全称,如"FactoryA Co., Ltd."
OU Organizational Unit 部门/单元 填写产线编号或区域,如"ProductionLine1"
C Country 国家代码 两位ISO代码,如"CN"
ST State/Province 省/州 可选,如"Beijing"
L Locality 城市 可选,如"Beijing"
SAN Subject Alternative Name 主题备用名称 强烈建议填写,用于多域名/IP支持

避坑指南: 我曾经遇到一个项目,所有PLC证书的CN都填成了"PLC-001"这种短名称。结果设备上线后,TLS握手时浏览器和中间件都报域名不匹配。后来全部重新签发,浪费了整整一周。记住:CN一定要用完整的FQDN。

4.4 SAN字段的重要性

SAN字段,说白了就是给证书多绑几个“名字”。比如你的PLC既有IPv4地址,又有IPv6地址,还有多个域名,SAN就能把这些全写进去。

现在的浏览器和TLS库,基本都优先看SAN,不再只看CN了。所以SAN字段,我建议必填。

带SAN的CSR创建(通过配置文件):

# 创建csr.conf配置文件
cat > csr.conf <

4.5 知识体系总览

下面这张图,把证书生成和申请的核心流程串起来了。你跟着走一遍,心里就有谱了。

证书生成与申请核心流程 步骤1:密钥对生成 RSA 2048 / ECC 256 步骤2:创建CSR 填写身份信息 步骤3:提交CA签名 获取正式证书 密钥类型选择 RSA:兼容性好,体积大 ECC:性能好,体积小 工业设备推荐ECC CSR核心字段 CN:设备FQDN O:组织名称 OU:部门/产线 SAN扩展字段 DNS:多域名 IP:多IP地址 强烈建议填写 关键原则:私钥永不离开设备,CSR只包含公钥和身份信息 常见错误与避坑 1. CN使用短名称而非FQDN → 证书验证失败 2. 忘记填写SAN → 多域名/IP场景无法使用 3. 密钥长度选错 → 资源受限设备性能瓶颈 4. 私钥未安全存储 → 证书被吊销,安全事件

4.6 实操建议

最后,给你几个我这些年总结出来的实操建议:

  • 密钥生成一定要在设备本地做。 别在PC上生成再拷过去,私钥一旦泄露,整个信任链就崩了。
  • CSR字段填写前,先跟网络团队对齐。 尤其是CN和SAN里的域名、IP,必须跟实际网络配置一致。
  • 保存好CSR和私钥的备份。 我习惯把CSR文件归档到版本控制里,方便追溯。私钥则用HSM或加密U盘保存。
  • 测试环境先跑一遍。 正式签发前,先在测试CA上走一遍流程,确认所有字段都能通过验证。

核心要点: 证书生成和申请,看似简单,但细节决定成败。密钥对选型、CSR字段填写、SAN扩展配置,这三步走扎实了,后面的证书部署和运维才能顺风顺水。