简介

这周,实习公司要我去了解一下gmssl生成证书的流程,以便之后去验证SKF的证书接口。首先就来体验一下用指令完整证书的生成操作。目前,有一些文章已经有相关的详细介绍,但还是存在一定问题,如:CA密钥文件与openssl.cnf中默认的cakey.pem不一致,导致证书生成失败;等。
本文包括使用国密gmsll命令完成sm2生成密钥 、成为CA、 生成签名请求、签名生成数字证书、验签;及其可能遇见问题的解决方法
提前安装好gmssl;查看gmssl版本指令本:

gmssl version -a

文章使用的gmssl 2.5.4.

前提准备

创建文件夹及文件

mkdir myCert
cd myCert
mkdir demoCA
cd demoCA
mkdir private
mkdir certs
mkdir crl
mkdir newcerts

touch index.txt
touch index.txt.attr
touch serial

sudo sh -c 'echo "01" > demoCA/serial'

CA:生成SM2密钥对和SM2自签证书

生成SM2密钥对

gmssl sm2 -genkey -out private/cakey.pem

生成密钥文件时会提醒输入口令,这个口令要记住哦!
密钥文件口令输入
生成SM2自签证书,作为CA根证书

gmssl req -new -x509 -key private/cakey.pem -out cacert.crt

生成根证书需要填入一些信息 ,根证书的这三类信息一定要记住,因为之后该根证书可以签名的证书的该三类信息必须一样,不然之后申请产生的证书为空。
·Country Name
·State or Province Name
·Organization Name
注意三类

生成密钥、证书请求、证书

生成SM2密钥对testUser.com.key

cd..
gmssl sm2 -genkey -out testUser.com.key
//一样需要输入一个 密钥文件使用的验证口令

生成证书请求CSR

gmssl req -new -key testUser.com.key -out testUser.com.csr
/*证书请求需要输入信息,一下三类信息必须和根证书一样哦
·Country Name
·State or Province Name
·Organization Name
*/

证书生成

gmssl ca -in testUser.com.csr -out testUser.com.crt -cert demoCA/cacert.crt  -keyfile demoCA/private/cakey.pem 

证书生成

验签

gmssl verify -verbose -x509_strict -CAfile demoCA/cacert.crt testUser.com.crt

可能出现的问题

1.生成的用户证书为空?
解决方法:将用户证书请求中Country Name、State or Province Name、Organization Name这几项的信息与CA根证书保持一致
2.生成服务器证书时报unable to load number from ./demoCA/serial错误
解决办法:因为序列号文件中的值不对。

sudo sh -c 'echo "01" > serial'

参考

1.gmssl参考文章:
参考文章一:gmssl快速上手
参考文章二:gmssl指令证书生成
2.openssl参考文章
在使用gmssl生成证书之前,就先学习了一下openssl指令生成证书。gmssl是在openssl基础上实现了,部分指令和功能的使用方法相似。
参考文章一:openss生成证书为空怎么办
参考文章二:openssl生成证书报错
参考文章三:openssl指令生成证书过程

题外话

2022年,是注册CSDN的第六个年头了,作为面向百度编程的CSDN选手,一直都在获得别人的帮助。这篇是我写的第一篇文章,希望以后好好写文章,巩固知识,提高自己。如果能再帮助到一点别人的话就太高兴了。

Logo

华为云1024程序员节送福利,参与活动赢单人4000元礼包,更有热门技术干货免费学习

更多推荐