当前位置: 首页 > news >正文

【国密证书】CentOS 7 安装 GmSSL 并生成国密证书

1. 安装 GmSSL

GitHub - guanzhi/GmSSL at GmSSL-v2
本篇仅在 CentOS 7 虚拟机上安装 GmSSL 并生成国密证书,可以当做一个工具,日后需要生成国密证书时可以参考本例操作。

官网有三个版本:v1、v2和v3,分别对应GmSSL-v1、GmSSL-v2和master分支。我们这里选择v2版本,如下图,目前v2版本是主流,v3版本与前两个版本相差较大(目前相关资料较少)。
在这里插入图片描述

1.1 安装依赖

sudo yum install -y gcc make cmake perl git openssl-devel

1.2 下载并编译 GmSSL

安装官方文档:http://gmssl.org/docs/install.html
文末附安装过程

下载安装GmSSL的核心命令如下:

git clone https://github.com/guanzhi/GmSSL.git
cd GmSSL
git branch -a
git checkout -b GmSSL-v2 remotes/origin/GmSSL-v2
./config
make
make test
sudo make install
gmssl version -a
sudo ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
sudo ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
gmssl version -a

1.3 配置环境变量

echo 'export PATH=/usr/local/bin/gmssl:$PATH' >> ~/.bashrc
source ~/.bashrc

1.4 验证安装

gmssl version -a
# 输出应包含 "GmSSL 2.x" 或类似版本信息

例如:

[vagrant@vbox ssl]$ gmssl version -a
GmSSL 2.5.4 - OpenSSL 1.1.0d  19 Jun 2019
built on: reproducible build, date unspecified
platform: linux-x86_64
compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DGMI_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/usr/local/ssl\"" -DENGINESDIR="\"/usr/local/lib64/engines-1.1\""  -Wa,--noexecstack
OPENSSLDIR: "/usr/local/ssl"
ENGINESDIR: "/usr/local/lib64/engines-1.1"

2. 生成 SM2 密钥对

gmssl ecparam -genkey -name sm2p256v1 -out sm2.key
  • 参数说明:
    • sm2p256v1:国密 SM2 椭圆曲线名称。
    • sm2.key:生成的私钥文件,需妥善保管
  • 验证私钥:
    gmssl pkey -in sm2.key -text -noout
    
    检查输出是否包含 SM2 曲线标识。
    ⚠️ 注意​:私钥文件(.key)是核心安全资产,切勿泄露或丢失。

3. 创建国密 CSR 文件

使用 SM2 私钥生成证书签名请求(CSR),需包含国密特定参数:

gmssl req -new -sm3 -key sm2.key -out sm2.csr
  • 关键参数:
    • -sm3:指定使用国密 SM3 哈希算法(替代 SHA-256)。
    • sm2.csr:生成的证书签名请求文件
  • 填写 CSR 信息(交互式或非交互式):
    • 交互式:运行命令后按提示输入信息(示例):
      Country Name (2 letter code) []: CN  
      State or Province Name []: Beijing  
      Locality Name []: Beijing  
      Organization Name []: Your Company  
      Organizational Unit Name []: IT  
      Common Name []: yourdomain.com  # 必须与域名一致  
      Email Address []: admin@yourdomain.com  
      
    • 非交互式:
      gmssl req -new -sm3 -key sm2.key -out sm2.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Your Company/OU=IT/CN=yourdomain.com"
      
  • 验证 CSR 内容:
    gmssl req -in sm2.csr -noout -text
    
    确认以下字段:
    • Signature Algorithm: sm2sign-with-sm3
    • Subject 中的域名信息(如 CN=yourdomain.com

4. 生成国密 HTTPS 证书

测试环境可用自签证书,生产环境要向CA机构申请签发。

4.1 方案一:自签名证书(测试用途)

gmssl req -x509 -sm3 -days 365 -key sm2.key -in sm2.csr -out sm2.crt
  • 参数说明:
    • -x509:生成自签名证书。
    • -days 365:证书有效期(天)

4.2 方案二:向 CA 机构申请(生产环境)

  1. 提交 CSR 文件
    sm2.csr 提交至支持国密的 CA 机构(如 CFCAJoySSL)。
  2. 完成域名验证
    • DNS 验证​:在域名解析中添加 CA 指定的 TXT 记录。
    • 文件验证​:在网站根目录放置验证文件。
  3. 下载证书
    审核通过后,CA 会签发国密证书(格式通常为 .crt.pem

5. 生成整套国密HTTPS证书

文末附证书签发过程

5.1 生成根证书(Root CA)

5.1.1 生成根证书私钥

gmssl ecparam -genkey -name sm2p256v1 -out root.key
  • 参数说明​:
    -name sm2p256v1 指定国密 SM2 曲线;-out root.key 输出私钥文件。

5.1.2 创建根证书配置文件 root.cnf

[ req ]
distinguished_name = req_distinguished_name
prompt = no
[ req_distinguished_name ]
C = CN
ST = Beijing
L = Beijing
O = MyRootCA
OU = CA
CN = RootCA
[ root_ext ]
basicConstraints = critical,CA:TRUE
keyUsage = critical,keyCertSign,cRLSign
  • 关键字段​:CA:TRUE 声明为根证书,keyCertSign 允许签发子证书。

5.1.3 生成自签名根证书

gmssl req -new -x509 -sm3 -key root.key -out root.crt \-config root.cnf -extensions root_ext -days 3650
  • 验证根证书:
    gmssl x509 -in root.crt -text -noout
    # 输出应含:X509v3 Basic Constraints: critical CA:TRUE
    
    例如:
    Certificate:Data:Version: 3 (0x2)Serial Number:be:8e:d6:40:89:1d:f6:10Signature Algorithm: sm2sign-with-sm3Issuer: C = CN, ST = Beijing, L = Beijing, O = MyRootCA, OU = CA, CN = RootCAValidityNot Before: Aug 26 14:36:16 2025 GMTNot After : Aug 24 14:36:16 2035 GMTSubject: C = CN, ST = Beijing, L = Beijing, O = MyRootCA, OU = CA, CN = RootCASubject Public Key Info:Public Key Algorithm: id-ecPublicKeyPublic-Key: (256 bit)pub:04:e4:9f:24:e2:be:dc:a0:f9:ee:d6:ff:37:94:e3:15:e1:d4:43:16:3d:2c:6c:13:0e:dc:7f:c3:4e:c8:35:b5:b9:50:0d:f0:73:6e:3d:04:a5:d3:d4:80:70:94:0e:57:bf:1a:0c:fa:14:c8:36:13:9b:64:6f:eb:51:6b:e6:ce:6cASN1 OID: sm2p256v1NIST CURVE: SM2X509v3 extensions:X509v3 Basic Constraints: criticalCA:TRUEX509v3 Key Usage: criticalCertificate Sign, CRL SignSignature Algorithm: sm2sign-with-sm330:44:02:20:06:6c:d4:fa:2f:d8:5b:56:14:60:db:37:b7:be:f5:90:62:35:e6:8b:b2:83:75:2d:9d:40:e1:a7:6c:72:0d:c0:02:20:73:86:6b:7b:bd:15:71:4f:af:75:7a:cc:a0:39:70:e0:34:78:77:5f:7a:d2:7b:cb:e9:af:28:5f:de:61:b4:0e
    

5.2 生成服务器证书(Server Certificate)

5.2.1 生成服务器私钥

gmssl ecparam -genkey -name sm2p256v1 -out server.key

5.2.2 生成服务器证书请求(CSR)​

gmssl req -new -sm3 -key server.key -out server.csr \-subj "/C=CN/ST=Beijing/L=Beijing/O=MyServer/OU=IT/CN=server.example.com"
  • 注意​:CN 为服务器域名(如 server.example.com)。

5.2.3 使用根证书签发服务器证书

gmssl x509 -req -days 365 -sm3 -in server.csr -CA root.crt -CAkey root.key -CAcreateserial -out server.crt \-extfile <(echo "keyUsage=digitalSignature,keyEncipherment")  # 服务器证书用途
  • 参数说明​:
    • -CA-CAkey 指定根证书及私钥;-extfile 定义密钥用途(加密与签名)。
    • -CAcreateserial 生成序列号文件;keyEncipherment 启用加密功能。
      例如:
      Signature ok
      subject=C = CN, ST = Beijing, L = Beijing, O = MyServer, OU = IT, CN = server.example.com
      Getting CA Private Key
      

5.3 生成客户端证书(Client Certificate)

5.3.1 生成客户端私钥

gmssl ecparam -genkey -name sm2p256v1 -out client.key

5.3.2 生成客户端证书请求(CSR)​

gmssl req -new -sm3 -key client.key -out client.csr \-subj "/C=CN/ST=Beijing/L=Beijing/O=MyClient/OU=IT/CN=client.example.com"

5.3.3 使用根证书签发客户端证书

gmssl x509 -req -days 365 -sm3 -in client.csr -CA root.crt -CAkey root.key -CAcreateserial -out client.crt \-extfile <(echo "keyUsage=digitalSignature")  # 客户端证书仅需签名功能

5.4 验证证书链

5.4.1 验证服务器证书

gmssl verify -CAfile root.crt server.crt
  • 输出 server.crt: OK 表示验证通过。

5.4.2 验证客户端证书

gmssl verify -CAfile root.crt client.crt

5.4.3 查看证书详情

gmssl x509 -in server.crt -text -noout | grep "Signature Algorithm"

检查输出是否为 sm2sign-with-sm3,确认国密算法生效
这里请您看下gmssl x509 -in server.crt -text -noout命令的原文:

Certificate:Data:Version: 3 (0x2)Serial Number:e0:da:85:d5:da:1b:1a:01Signature Algorithm: sm2sign-with-sm3Issuer: C = CN, ST = Beijing, L = Beijing, O = MyRootCA, OU = CA, CN = RootCAValidityNot Before: Aug 26 14:39:05 2025 GMTNot After : Aug 26 14:39:05 2026 GMTSubject: C = CN, ST = Beijing, L = Beijing, O = MyServer, OU = IT, CN = server.example.comSubject Public Key Info:Public Key Algorithm: id-ecPublicKeyPublic-Key: (256 bit)pub:04:14:f0:7f:b2:62:2d:76:81:78:8b:71:d1:c4:0b:f7:e3:d2:b2:a7:ec:7d:9c:b2:51:77:1c:d3:38:8c:a8:3f:de:a7:7b:73:9b:91:5b:1d:20:cc:31:49:de:b1:0e:7d:31:59:21:88:32:9f:e0:d8:a3:ec:6f:70:d4:5f:a3:bb:beASN1 OID: sm2p256v1NIST CURVE: SM2X509v3 extensions:X509v3 Key Usage:Digital Signature, Key EnciphermentSignature Algorithm: sm2sign-with-sm330:45:02:21:00:86:16:08:80:94:90:bd:a7:eb:8c:37:cc:63:ce:d8:ed:34:11:7c:3b:8a:ea:79:d2:e9:2c:f7:fb:31:0a:a2:87:02:20:75:63:21:ea:3b:20:31:d1:33:27:1a:35:b8:23:cc:23:96:d4:09:39:ba:6c:0a:98:af:a9:02:84:45:f1:29:d3

5.5 导出PKCS12格式

5.5.1 服务器证书链

gmssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 \-name server -CAfile root.crt -passout pass:"密码"

5.5.2 客户端证书链

gmssl pkcs12 -export -in client.crt -inkey client.key -out client.p12 \-name client -CAfile root.crt -passout pass:"密码"

6. 注意事项

  1. .key.csr.crt.pemSSL/TLS 证书管理中的核心文件,区别如下:
文件类型核心作用内容保密性格式特点典型用途
.key服务器私钥加密算法的私钥数据(如 RSASM2绝对私密通常为 PEM 格式(文本),以 -----BEGIN PRIVATE KEY----- 开头解密数据、生成签名
.csr证书签名请求公钥 + 申请人信息(域名、组织等) + 数字签名公开PEM 编码,以 -----BEGIN CERTIFICATE REQUEST----- 开头CA 申请证书
.crtCA 签发的证书公钥 + 持有者信息 + CA 签名 + 有效期公开支持 PEM(文本)或 DER(二进制),以 -----BEGIN CERTIFICATE----- 开头(PEM 格式)客户端验证服务器身份
.pem通用容器(可存储多种加密对象)证书、私钥、CSR 等(取决于内容标识)可能含私钥Base64 编码的文本,以 -----BEGIN XXX----- 开头(如 CERTIFICATEPRIVATE KEY跨平台传输、合并存储多对象
  1. 文件权限
    私钥权限设为 600,避免未授权访问:
    chmod 600 *.key
    
  2. 生产环境建议
    • 自签名证书仅用于测试,生产环境需向合规 CA(如 CFCA、JoySSL)申请国密证书。
    • 部署时启用双向认证(服务端验证客户端证书),并配置 CRL(证书吊销列表)
  3. 浏览器兼容性
    主流浏览器(Chrome/Firefox)不支持国密证书,需使用 国密浏览器(如 360安全浏览器)

7. 总结

步骤核心命令
根证书生成gmssl req -new -x509 -sm3 -key root.key -out root.crt
服务器证书签发gmssl x509 -req -sm3 -in server.csr -CA root.crt -CAkey root.key -out server.crt
客户端证书签发gmssl x509 -req -sm3 -in client.csr -CA root.crt -CAkey root.key -out client.crt
验证证书链gmssl verify -CAfile root.crt server.crt
导出 PKCS12gmssl pkcs12 -export -in server.crt -inkey server.key -out server.p12

执行完毕后,将得到完整的国密证书链:

  • 根证书​:root.crt
  • 服务器证书​:server.crt + server.key
  • 客户端证书​:client.crt + client.key
    部署到 Spring Boot 时,将 server.p12client.p12 分别放入服务端与客户端的 resources 目录,并配置 application.yml

资料下载

  1. GmSSL安装过程
  2. 基于GmSSL进行国密SSL证书签发过程

参考资料

http://gmssl.org/docs/quickstart.html
https://github.com/guanzhi/GmSSL/tags
https://blog.csdn.net/markximo/article/details/128124885

http://www.dtcms.com/a/351344.html

相关文章:

  • SpringBoot启动优化
  • 肌肉力量训练
  • 【C语言练习】汉诺塔
  • 金融市场微观行为分析结合深度学习的大单过滤与短期价格预测框架
  • 【资源分享】破解极域电子教室
  • 【云计算】云原生(Cloud Native)
  • 三、显示3D文字
  • 【车载开发系列】CS+ for CC开发环境IDE
  • 探索 3D 模型格式:综合指南glTF/GLB 格式
  • CVPR论文速递 | DL3DV-10K:10K+真实场景,打破三维视觉数据荒!
  • Maya绑定基础:创建骨骼和蒙皮、蒙皮权重控制的两种方法
  • 当自然语言遇上数据库:Text2Sql.Net的MCP革命如何重新定义开发者与数据的交互方式
  • 腾讯云DTS数据库迁移底层原理与实战解析
  • 云上“安全管家”|移动云以云安全中心为企业数字化升级保驾护航
  • MySQL 面试题系列(三)
  • 模块 PCB 制造:高频场景下的工艺难点与猎板质量管控体系
  • CentOS 7 服务器初始化完整流程
  • 文献阅读笔记【雷达辐射源识别】:Recognition of Unknown Radar Emitters with Machine Learning
  • 2025.8.26周二 在职老D渗透日记day26:pikachu文件上传漏洞 前端验证绕过
  • Hive高阶函数之行转列JSON数据解析
  • php程序设计之基于PHP的手工艺品销售网站/基于php在线销售系统/基于php在线购物商城系统
  • Redis之Keys命令和Scan命令
  • 后端Web实战-部门管理开发
  • BA 楼宇自控系统 + AI:重构楼宇设备管理的 “智能决策” 体系
  • 『专利好药用力心脑血管健康』——爱上古中医(28)(健康生活是coder抒写优质代码的前提条件——《黄帝内经》伴读学习纪要)
  • 阿里云 ECS 可观测性最佳实践
  • 【Canvas与旗帜】上三常之中国
  • PMP项目管理知识点-⑧ 项⽬质量管理
  • 【传奇开心果系列】Flet框架实现的图形化界面的PDF转word转换器办公小工具自定义模板
  • sed截取慢SQL大文件并导出指定时间范围内容