国密SM2  CSR(PKCS#10)关键字段填写规范指南

依据  GM/T  0015-2023《SM2数字证书格式》、GM/T  0092《证书申请语法规范》、GM/T  0043  证书互操作规范  整理,覆盖DN主体字段、扩展字段、双证书区分、密评合规要求、GmSSL实操模板。

一、基础前置强制规则(不满足直接被CA驳回、密评不通过)

1.  算法硬性约束

        私钥:SM2(曲线sm2p256v1),禁止RSA/ECC国际曲线

        CSR签名摘要:SM3,禁止SHA256/SHA1

        签名算法OID:`1.2.156.10197.1.501`(sm2-with-sm3)

        生成命令必须携带参数:`-sm3  -sigopt  ec_param_enc:named_curve`

2.  私钥主权合规

      密评/等保三级场景禁止平台一键生成CSR,必须本地GmSSL生成,私钥PKCS#8加密存储,不提交CA、不上传第三方平台。

3.  文件标准

      CSR为标准PKCS#10  PEM格式,仅上传CSR文本,私钥本地离线保管。

4.  SM2  UserID固定规则

      SM2签名计算Z值默认UserID:`1234567812345678`;全链路必须统一,前后端、CA、加密机保持一致,否则验签失败。

二、DN可分辨名称(Distinguished  Name)必填/可选字段完整规范

DN结构顺序固定:`C  >  ST  >  L  >  O  >  OU  >  CN`,字段禁止中文、特殊符号(*  #  "  /  \  &),全部使用英文/拼音。

字段标识      名称      必填性      标准填写规范      合规示例      错误示范  

C      Country  国家代码          强制必填        仅两位大写字母,中国固定`CN`,不允许CHN/China        CN      China、ZH、中国  

ST      State/Province  省份          强制必填        省份完整拼音,无简写,不带省字      Guangdong、Beijing      GD、BJ、广东省  

  L      Locality  城市          强制必填          城市完整拼音      Shenzhen、Haidian      SZ、海淀  

  O        Organization  机构全称        强制必填          营业执照完整英文译名,有限公司统一`LTD.`,事业单位`INSTITUTE`      China  Telecom  Co.,LTD.      电信、测试公司  

OU        Organizational  Unit  部门      推荐必填(密评强制)    业务/安全/IT部门,多部门用逗号分隔    Information  Security  Dept      运维、IT部(中文)  

  CN      Common  Name  通用名      强制必填        分场景严格区分      见下方分场景细则  |  www*、IP、中文域名  

emailAddress      联系邮箱      可选      机构安全运维邮箱      sec@company.com      个人私人邮箱  

  CN(Common  Name)分场景填写细则(国密核心易错点)

1.  网站/服务端HTTPS证书(单域名/泛域名)

        单域名:主业务域名  `api.xxx.com`

        泛域名:`*.xxx.com`

        关键:CN仅填1个主域名,所有域名/IP必须写入SAN扩展,现代浏览器只校验SAN,CN仅做兼容

2.  设备/硬件加密机证书

      CN填设备唯一SN编号:`HSM-20260701-001`

3.  个人客户端/操作员证书

      CN填实名拼音:`Zhang  San`,不可填账号ID

4.  机构根CA/二级CA证书

      CN填机构完整名称:`China  Commercial  CA`

三、关键扩展字段规范(v3_req,国密CSR必须配置)

扩展通过`gmssl.conf`的`req_extensions  =  v3_req`加载,缺失会导致证书无权限、TLS握手失败、密评扣分。

  1.  subjectAltName(SAN  主题备用名称,网站证书强制)

用途:承载多域名、内网IP、泛域名,RFC2818强制校验项

格式规范:

[v3_req]

subjectAltName  =  @alt_names

[alt_names]

DNS.1  =  www.xxx.com

DNS.2  =  api.xxx.com

DNS.3  =  *.inner.xxx.com

IP.1  =  192.168.1.10

IP.2  =  10.0.0.5

  域名前缀`DNS.x`,IP前缀`IP.x`,序号连续从1开始

  内网IP、公网域名、泛域名全部写入,不可遗漏

  客户端身份证书(操作员/APP)可省略SAN

  2.  keyUsage(密钥用途,国密双证书核心区分)

国密标准分**签名证书、加密证书**两套CSR,keyUsage完全不同,不可混用:

  (1)SM2签名证书(签名/验签、TLS握手签名)

keyUsage  =  digitalSignature,  nonRepudiation

  国密专用扩展OID,标记SM2签名用途

1.2.156.10197.1.301  =  ASN1:NULL

  (2)SM2加密证书(密钥协商、数据加解密)

keyUsage  =  keyEncipherment,  dataEncipherment,  keyAgreement

1.2.156.10197.1.301  =  ASN1:NULL

  3.  basicConstraints

服务端/终端证书固定:`basicConstraints  =  CA:FALSE`

自建二级CA根证书:`basicConstraints  =  CA:TRUE,  pathlen:0`

  4.  privateKeyUsagePeriod(可选,密评推荐)

限定私钥有效周期,格式UTC时间:

`privateKeyUsagePeriod  =  20260701000000Z/20270701000000Z`

四、国密双证书CSR填写差异(金融/政务必看)

国密TLS双向认证要求同一主体生成2套CSR,DN主体信息完全一致,仅CN后缀、keyUsage区分:

1.  签名证书CSR

        CN:`api.company.com-SIGN`

        keyUsage:digitalSignature,  nonRepudiation

2.  加密证书CSR

        CN:`api.company.com-ENC`

        keyUsage:keyEncipherment,  keyAgreement

>  禁止两套CSR  DN信息不一致,CA会判定主体不匹配,签发失败。

五、字段字符编码与禁止规则(高频驳回原因)

1.  字符集:仅允许ASCII英文、数字、横杠`-`、点`.`、逗号`,`;严禁中文、全角符号、星号、引号、斜杠、括号、空格首尾

        错误示例:`OU=信息安全部`、`O=XX科技(北京)有限公司`

        修正:`OU=Information  Security`、`O=XX  Technology  (Beijing)  Co.,LTD.`

2.  长度限制

        C:固定2字符

        ST/L/O/OU:≤64字符

        CN:≤64字符(泛域名、长域名放SAN,不要塞CN)

3.  禁止空字段

      C/ST/L/O/CN不允许留空,CA表单、GmSSL交互生成时必须完整填写。

4.  Challenge  Password(挑战密码)

      CSR生成时的密码字段**留空不填写,无业务用途,填写无意义。

六、合规配置文件完整模板(gmssl-san.conf,生产标准)

ini

[req]

default_md  =  sm3

distinguished_name  =  req_distinguished_name

req_extensions  =  v3_req

prompt  =  no

[req_distinguished_name]

C  =  CN

ST  =  Shanghai

L  =  Pudong

O  =  National  Tech  Security  Co.,LTD.

OU  =  R&D  &  Security  Dept

CN  =  api.secure-system.com

[v3_req]

basicConstraints  =  CA:FALSE

keyUsage  =  digitalSignature,  nonRepudiation

  国密SM2专用OID标识

1.2.156.10197.1.301  =  ASN1:NULL

subjectAltName  =  @alt_names

[alt_names]

DNS.1  =  api.secure-system.com

DNS.2  =  admin.secure-system.com

DNS.3  =  *.inner.secure-system.com

IP.1  =  10.1.0.20

IP.2  =  120.92.xxx.xxx

  生成CSR标准命令

bash

  1.  生成SM2签名私钥(PKCS8加密)

gmssl  sm2  -genkey  -out  sign.key

  2.  生成带完整扩展的国密CSR

gmssl  req  -new  -key  sign.key  -out  server_sign.csr  -config  gmssl-san.conf  -sm3  -sigopt  ec_param_enc:named_curve

、密评/等保专项填写要求

1.  O机构名称必须与营业执照英文译名完全一致,CA会核验工商信息,不一致直接拒签;

2.  OU必须标注安全/密码相关部门(Security/Crypto  Dept),无OU密评扣分项;

3.  必须携带SM2专用OID扩展`1.2.156.10197.1.301`,证明CSR为国密算法生成;

4.  网站业务强制配置SAN扩展,仅CN无SAN属于不合规;

5.  双证书场景必须分开生成两套独立CSR,密钥用途严格隔离,禁止一证两用。

八、校验CSR字段是否合规命令

bash

  完整打印CSR  DN、扩展、算法信息

gmssl  req  -in  server_sign.csr  -text  -noout

  校验签名算法是否为sm2-with-sm3

gmssl  req  -in  server_sign.csr  -verify

九、常见填写错误与后果

1.  CN填中文/内网IP,无SAN  →  浏览器证书域名告警、TLS握手失败

2.  CSR使用SHA256而非SM3  →  国密CA拒绝签发,密评不通过

3.  缺少SM2专用OID扩展  →  判定为国际算法证书,不符合商密改造要求

4.  签名/加密证书keyUsage混用  →  加密机、国密网关验签/加密报错

5.  DN字段含中文、特殊符号  →  CA表单校验直接驳回

6.  私钥由云平台生成CSR  →  私钥第三方托管,等保三级、密评不通过