首页/安全/等保与合规速查/用 OpenSSL 生成 SM2 自签证书(联调与验证)
密码与认证合规50 条

用 OpenSSL 生成 SM2 自签证书(联调与验证)

在无 CA 环境联调国密 TLS 时,可用 OpenSSL 生成 SM2 自签证书验证链路;测试证书不得用于生产环境对外服务。

等保与合规速查安全更新于 2026-10-13

用 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 签发的证书,并纳入有效期监控与轮换计划。

易错点

  • 缺少 -sm3 参数:默认摘要可能不符合国密套件的期望,联调时报算法不匹配
  • 把测试证书带上生产:浏览器与合规检查都会报问题,且不受信任链保护
  • 只验服务端不看客户端证书:双向认证场景下客户端证书同样需要准备
  • 忽略版本差异:不同 OpenSSL 版本子命令与选项不同,脚本直接搬用可能失败

数据来源与参考

  • OpenSSL 文档(SM2 支持章节)
  • GB/T 32918 系列标准
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌