参考:http://gmssl.org/docs/quickstart.html

GmSSL的编译、安装

下载源代码(zip),解压缩至当前工作目录

$ unzip GmSSL-master.zip

编译与安装

Linux平台

$ mkdir build
$ cd build
$ cmake ..
$ make
$ make test
$ sudo make install

安装之后可以执行gmssl命令行工具检查是否成功

$ gmssl version
GmSSL 3.1.0 Dev

证书创建

COMMOMARG="-C CN -ST Beijing -O KylinSoft -OU kylincloud -pass 1234"
# 1.1 生成 SM2 根 CA 私钥(密码 1234,存储为 rootcakey.pem)
gmssl sm2keygen -pass 1234 -out rootca.key

# 1.2 生成根 CA 自签名证书(有效期 10 年,支持签发证书和 CRL)
gmssl certgen $COMMOMARG\
  -days 3650 \
  -CN "KylinSoft SM2 Root CA" \
  -key rootca.key \
  -out rootca.cert \
  -key_usage keyCertSign \
  -key_usage cRLSign

# 1.3 解析根 CA 证书,验证信息(可选,确认生成正确)
gmssl certparse -in rootca.cert


# 2.1 生成二级 CA 私钥(密码 1234,存储为 cakey.pem)
gmssl sm2keygen -pass 1234 -out ca.key

# 2.2 生成二级 CA 的证书请求(CSR,向根 CA 申请签名)
gmssl reqgen $COMMOMARG\
  -CN "KylinSoft SM2 Root CA" \
  -key ca.key \
  -out ca.csr       # 输出 CSR 文件

# 2.3 用根 CA 签名二级 CA 请求,生成二级 CA 证书
gmssl reqsign \
  -in ca.csr  \
  -days 3650    \
  -key_usage keyCertSign \
  -path_len_constraint 0  \
  -cacert rootca.cert  \
  -key rootca.key   \
  -pass 1234          \
  -out ca.cert          # 输出二级 CA 证书

# 2.4 解析二级 CA 证书,验证信息(可选)
gmssl certparse -in ca.cert


# 3.1 生成服务端 SM2 私钥(密码 1234,存储为 nginx-sm2-key.pem)
gmssl sm2keygen -pass 1234 -out nginx-sm2.key

# 3.2 生成服务端证书请求(CSR,关键:CN 填主域名,支持多 DNS 名称)
#                        # 主域名(必须正确,匹配服务端域名)  关联服务端私钥           输出服务端 CSR
gmssl reqgen $COMMOMARG -CN "nginx.example1.kylinos.cn"      -key nginx-sm2.key   -out nginx-sm2.csr

# 3.3 用二级 CA 签名服务端请求,生成服务端证书
gmssl reqsign \
  -in nginx-sm2.csr \
  -subject_dns_name "nginx.example1.kylinos.cn" \
  -subject_dns_name "server1.nginx.local" \
  -days 365 \
  -key_usage digitalSignature \
  -key_usage keyEncipherment \
  -cacert ca.cert   \
  -key ca.key   \
  -pass 1234      \
  -out nginx-sm2.cert

# 3.4 解析服务端证书,验证域名和用途(关键!确认配置正确)
gmssl certparse -in nginx-sm2.cert

# 3.5 验证证书
gmssl certverify -in nginx-sm2.cert -cacert ca.cert