国密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算法的证书申请语法规范》要求。