本次实现的系统为 Linux环境,在Windows下的 gmssl 安装应该也差不多,所以环境影响不大。
系统建立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的证书进行签发。
二级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的初始化已经完成。
用户私钥对生成:
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
生成的用户证书如下:
吊销用户证书如下,所示:
openssl ca -keyfile ./private/sub-cakey.pem -cert ./sub-cacert.pem -revoke thirdcert.pem
吊销之后的index.txt的内容变化如下图所示,可以看到证书的状态从已经验证状态“V”转换到已经吊销状态“R”。