用 OpenSSL 自制 SM2 证书
在做国密 TLS 联调时,往往没有现成的合规 CA 环境,这时可以用 OpenSSL 生成 SM2 自签证书,先把链路打通、把双端配置验证一遍。OpenSSL 1.1.1 及以上的版本已内置 SM2 曲线与 SM3 摘要支持。需要明确的是:自签证书只用于测试与联调,生产环境对外服务必须使用合规 CA 签发的证书。
基本信息
| 适用平台 | Linux 上的 OpenSSL 1.1.1 及以上或 3.x |
|---|---|
| 用途 | 国密 TLS 联调、配置验证与客户端兼容性测试 |
| 算法组成 | SM2 密钥与签名、SM3 摘要 |
| 证书类型 | 自签证书(测试用,不受信任链保护) |
| 注意事项 | 不同版本子命令略有差异,以 openssl 版本文档为准 |
典型使用场景
- 联调前准备:为测试网关生成一对证书,验证双证书握手
- 客户端兼容性:确认客户端能识别 SM2 证书与国密套件
- 配置验证:先在小环境验证配置语法与证书链关系
- 有效期测试:改短有效期验证证书到期告警是否生效
- 教学演示:向团队说明双证书体系的构成
生成步骤
生成步骤
# 1 生成 SM2 私钥
openssl ecparam -genkey -name SM2 -out sm2.key
# 2 生成自签证书(使用 SM3 摘要)
openssl req -new -x509 -key sm2.key -sm3 -days 365 \
-subj "/C=CN/O=Demo/CN=demo.local" -out sm2.crt
# 3 查看证书内容与算法
openssl x509 -in sm2.crt -noout -text | head -30
# 4 查看私钥曲线,确认确为 SM2
openssl ec -in sm2.key -noout -text | head -5关键参数
| 参数 | 作用 |
|---|---|
| -name SM2 | 指定生成 SM2 曲线密钥 |
| -sm3 | 证书签名使用 SM3 摘要算法 |
| -days 365 | 证书有效期,测试可设更短 |
| -subj | 指定主题信息,CN 用测试域名 |
| x509 -text | 查看证书算法、用途与有效期 |
联调时的检查动作
- 确认 openssl 版本支持 SM2 与 SM3(openssl version 与 openssl ecparam -list_curves)
- 核对证书主题与备用名称是否覆盖实际访问的域名或 IP
- 用客户端抓包确认协商结果落在国密套件上,而非仅看配置文件
- 记录双证书的序列号、生效时间与到期时间,纳入到期提醒
- 把生成的测试证书与私钥单独存放,避免误用或误提交到代码库
自签证书仅用于测试:生产环境应使用合规 CA 签发的证书,并纳入有效期监控与轮换计划。