国密CSR生成:基于SM2私钥创建符合国密标准的证书请求文件指导说明:
一、准备工作:选择合适的工具
生成国密SM2私钥及证书请求文件(CSR),目前主流工具有两种选择:
1. GmSSL(推荐)
GmSSL是基于OpenSSL开发的国密算法库,完全支持SM2/SM3/SM4等国密标准算法,提供与OpenSSL几乎一致的命令行接口,是国密实践的首选工具。可从GitHub获取源码编译安装。
2. 支持国密的OpenSSL分支
标准OpenSSL(包括3.0版本)默认不包含SM2/SM3/SM4实现,直接运行国密相关命令会报错。如需使用OpenSSL,必须使用国产分支(如华为openEuler的openssl-gm包),或包含国密引擎的定制版本。
二、生成SM2私钥
生成CSR前,需要先生成SM2椭圆曲线私钥(基于`sm2p256v1`曲线)。
使用GmSSL:
bash
gmssl ecparam -genkey -name sm2p256v1 -out sm2.key
使用支持国密的OpenSSL:
bash
openssl ecparam -genkey -name SM2 -out sm2.key
# 或
openssl ecparam -genkey -name sm2p256v1 -out sm2.ke
三、基于现有私钥生成CSR
获得SM2私钥文件后,即可生成符合PKCS#10标准的CSR文件。密钥长度选择“SM2-256”,签名算法为SM3。
使用GmSSL(方式一:基本命令):
bash
gmssl req -new -key sm2.key -out sm2.csr -sm3
`-sm3`参数指定使用SM3哈希算法。
使用GmSSL(方式二:完整参数示例):
bash
./gmssl req -new -nodes -key sm2key.pem -sm3 -out sm2testcert.csr -subj "/C=CN/ST=Beijing/L=Haidian/O=YourOrg/OU=IT/CN=example.com/emailAddress=admin@example.com" -days 365
使用支持国密的OpenSSL:
bash
openssl req -new -key sm2.key -out sm2.csr -sm3
关键提示:使用OpenSSL生成CSR时,必须指定`-sigopt "ec_param_enc:named_curve"`参数以启用SM2签名适配,否则生成的CSR可能无法正常使用:
bash
openssl req -new -key sm2.key -out sm2.csr -subj "/CN=localhost" -sigopt "ec_param_enc:named_curve"
四、关于国密双证书的特殊说明
国密证书体系与RSA证书有所不同,通常需要分别申请签名证书和加密证书两套证书,即“双证书”体系:
签名证书:专门用于数字签名和验签
加密证书:专门用于数据加密和解密
在实际操作中,签名私钥由用户本地生成,加密私钥通常由CA生成并加密下发。CSR申请时,可分别生成两套CSR对应两个key文件,也可只生成一个CSR,签名证书与加密证书共用同一对密钥。
生成双证书请求的典型流程如下:
1. 本地生成签名公私钥对
2. 生成PKCS#10格式的证书请求文件
3. 向CA提交CSR申请签名证书
4. CA签发签名证书,并生成加密公私钥对后加密下发
五、CSR内容查看与验证
生成CSR后,建议检查其内容是否正确。
查看CSR详细信息:
bash
# 使用GmSSL或OpenSSL
gmssl req -in sm2.csr -text -noout
验证SM2公钥是否正确:
查看输出结果中的公钥信息,应显示椭圆曲线参数`SM2`或`sm2p256v1`对应的OID值。
六、典型场景示例
场景:使用脚本批量生成CSR
腾讯云提供了`cmsm2csr`工具包,执行以下命令即可自动生成四个文件:`user_sm2_sign.key`(签名私钥)、`user_sm2_sign.csr`(签名请求)、`user_sm2_tls.key`(TLS私钥)、`user_sm2_tls.csr`(TLS请求):
bash
sh sm2csr.sh
工具中核心命令为:
bash
# 生成密钥对
gmssl ecparam -name sm2p256v1 -genkey -out out.key
# 生成CSR(配合配置文件)
gmssl req -batch -config gmssl_user.cnf -key out.key -new -sm3 -out out.csr
# 转为PKCS#8格式(可选,供SDK识别)
gmssl pkcs8 -topk8 -in out.key -nocrypt -out out_sk
七、注意事项
1. 私钥保管:生成的私钥文件(.key)需妥善保存,切勿泄露。私钥丢失无法找回,证书也将无法使用。
2. 摘要算法:国密CSR必须使用SM3作为摘要算法,而非国际通用的SHA系列。
3. 椭圆曲线:必须使用SM2专用曲线(sm2p256v1或SM2),而非其他ECC曲线。
4. 签名参数:使用OpenSSL生成CSR时,务必添加`-sigopt "ec_param_enc:named_curve"`参数。
5. 双证书区分:如需申请国密双证书,注意区分签名证书和加密证书的用途,按需分别生成CSR。
6. 工具确认:操作前确认当前环境中的工具支持国密算法,可通过`gmssl version`查看版本信息,或使用`gmssl ecparam -list_curves | grep sm2`确认曲线支持情况。
7. 证书合规:生成的证书应符合《基于SM2密码算法的数字证书格式规范》及GM/T 0092-2020《基于SM2算法的证书申请语法规范》要求。