基于gmssl实现国密证书签发验证

本次实现的系统为 Linux环境,在Windows下的 gmssl 安装应该也差不多,所以环境影响不大。

1.根CA的生成

系统建立CA时,需要先在离线状态下建立一个根CA。根CA所需要的文件夹有certs(证书文件夹)、crl(吊销数据文件夹)、newcerts(新生成的证书文件夹)、private(私有数据文件夹)。同时还需要在本地生成数据记录文件index.txt,用以记录对证书的操作,需要初始化设定序列号。

执行的初始化操作如下:

mkdir certs clr newcerts private
touch index.txt
echo “01” > serial

 随后,便可以生成根 CA 的 sm2 公私钥对,使用命令如下,生成的密钥文件为 root-cakey.pem

gmssl ecparam -genkey -name sm2p256v1 -out private/root-cakey.pem

然后,生成根 CA 的证书请求。使用的算法为 sm3 签名算法,生成的证书请求为 root-cacsr.pem.

gmssl req -new -sm3 -key private/root-cakey.pem -out root-cacsr.pem

最后让根 CA 对自己的证书请求进行自签名生成证书文件,生成的证书有效期为365天,证书文件名称为 root-cacert.pem。

gmssl req -x509 -sm3 -days 365 -key private/root-cakey.pem -out root-cacert.pem

生成的根CA证书信息如下,我们可以看到该证书的公私钥为SM2算法生成,对证书的签名算法采用SM3。证书的发布者和证书主体信息一致,说明该证书是由自签名生成。

       到此,根CA建立完成,可为二级CA的证书进行签发。

2. 二级 CA 的生成

二级CA生成SM2公私钥的命令为,使用的算法为sm2。生成的密钥文件为sub-cakey.pem。

gmssl ecparam -genkey -name sm2p256v1 -out private/sub-cakey.pem

生成证书请求的命令为,使用的签名算法为sm3。生成的证书请求为sub-cacsr.pem。

gmssl req -batch -new -sm3 -key private/sub-cakey.pem -out sub-cacsr.pem 

根CA生成二级CA证书命令如下,使用sm3算法。生成的二级CA证书名称为sub-cacert.pem。

gmssl ca -md sm3 -extensions v3_ca -in sub-cacsr.pem -out newcerts/sub-cacert.pem -days 365 -cert root-cacert.pem -keyfile ./private/root-cakey.pem

生成的二级CA证书如下图所示,可以看到证书的发布者信息与根CA信息一致,说明该证书由根CA签发。同时该证书主体信息与我们管理界面输入的信息一致。

        自此,一个二级CA的初始化已经完成。

3.用户证书的签发

用户私钥对生成:

gmssl ecparam -genkey -name sm2p256v1 -out thirdkey.pem

用户证书请求生成:

gmssl req -new -sm3 -key thirdkey.pem -out thirdcsr.pem

随后二级CA签发用户证书请求:

gmssl ca -batch -md sm3 -extensions v3_ca -in thirdcsr.pem -out thirdcert.pem -days 365 -cert sub-cacert.pem -keyfile private/sub-cakey.pem

生成的用户证书如下:

4. 证书吊销

吊销用户证书如下,所示:

openssl ca -keyfile ./private/sub-cakey.pem -cert ./sub-cacert.pem -revoke thirdcert.pem

吊销之后的index.txt的内容变化如下图所示,可以看到证书的状态从已经验证状态“V”转换到已经吊销状态“R”。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值