gmssl 生成CRL、OSCP以及证书格式编码格式

1、首先配置环境,修改配置文件生成的证书存放在当前环境下

cd /etc/ssl
sudo gedit openssl.cnf

2、新建上面对应的目录

mkdir  demoCA
cd  demoCA
mkdir certs crl newcerts private
touch index.txt
touch index.txt.attr
touch serial
touch crlnumber
echo "01" > serial
echo "01" > crlnumber

root证书 

gmssl ecparam -genkey -name sm2p256v1 -out Root.key
gmssl req -x509 -sm3 -days 3650 -key Root.key -out RootCA.crt

 

 写成脚本:下面生成root 证书相关、server证书相关以及client证书以及CRL相关内容

#!/bin/bash
 
set -e
dir=`dirname $0`
expire_days=3650
subj=/C="CN"/ST="Beijing"/L="Beijing"/O="Nine"/OU="tester"/CN="nineR"
subji=/C="CN"/ST="Beijing"/L="Beijing"/O="Nine"/OU="tester"/CN="nineI"
subjs=/C="CN"/ST="Beijing"/L="Beijing"/O="Nine"/OU="tester"/CN="nineS"
subj2=/C="CN"/ST="Beijing"/L="Beijing"/O="Nine"/OU="tester"/CN="nine"
subj3=/C="CN"/ST="Beijing"/L="Beijing"/O="Nine"/OU="tester"/CN="nine1"
server="test_sign"
param=$server

if [ -d $param ]; then
            rm -r $param
    fi
    mkdir -p $param
    cd $param
    ca_name=ca-root-$param
    root_cacer=$ca_name.cer
    root_capem=$ca_name.pem
    root_cakey=$ca_name.key
    #ca
    ca_name=ca-server-$param
    sub1_cacer=$ca_name.cer
    sub1_capem=$ca_name.pem
    sub1_cakey=$ca_name.key

    # client level
    client=client-$param
    cer=$client.cer
    pem=$client.pem
    csr=$client.csr
    key=$client.key

    #chain
    chain_cer=chain-$server.cer
    chain_crt=chain-$server.crt

    #crl
    crl=$server.crl

    mkdir -p $dir/demoCA/{private,newcerts}
    touch $dir/demoCA/index.txt
    touch $dir/demoCA/index.txt.attr
    echo 15 > $dir/demoCA/serial
    echo 15 > $dir/demoCA/crlnumber
    cd demoCA
    ln -sf ../$root_cacer cacert.pem
    cd -
    cd demoCA/private
    ln -sf ../../$root_cakey cakey.pem
    cd -


    #Root CA
    gmssl ecparam -genkey -name sm2p256v1 -out $root_cakey
    gmssl req -x509 -sm3 -key $root_cakey -out $root_cacer -subj $subj -days $expire_days
    gmssl x509 -in $root_cacer -out $root_capem
    echo "===================Gen Root CA OK===================="

    #Server CA
    gmssl ecparam -genkey -name sm2p256v1 -out $sub1_cakey
    gmssl req -new -sm3 -extensions v3_req -key $sub1_cakey -out $csr -subj $subji -days $expire_days
    gmssl ca -md sm3 -extensions v3_ca -batch -notext -in $csr -out $sub1_cacer
    gmssl x509 -in $sub1_cacer -out $sub1_capem
    echo "===================Gen Sub1 CA OK===================="

    #Client cert
    gmssl ecparam -genkey -name sm2p256v1 -out $key
    gmssl req -new -key $key -out $csr -subj $subj2 -days $expire_days
    gmssl ca -md sm3 -batch -notext -in $csr -out $cer -cert $sub1_cacer -keyfile $sub1_cakey  
    gmssl x509 -in $cer -out $pem
    #rm -f *.csr *.srl  
    echo "===================Gen client cert OK===================="  
     
    cat $cer $root_cacer | tee $chain_cer
    gmssl x509 -in $chain_cer -out $chain_crt  
    echo "===================Gen Chain OK===================="  
   
    gmssl ca -revoke $sub1_cacer
    gmssl ca -gencrl -out $crl
    gmssl ca -gencrl -crldays 7 -cert $sub1_cacer-keyfile $sub1_cakey-out $crl
    gmssl crl -in $crl -noout -text
    echo "===================Gen crl OK===================="
    cat $cer $cacer $sub1_cacer |tee $param.pem  
    echo "===================Gen All OK===================="

3、不同格式证书的编码含义:

.der:用二进制DER编码的证书(.der 后缀的证书都是二进制格式)

.pem:用ASCLL(Base64)编码的证书(.pem 后缀的证书都是base64编码)
.cer:存放公钥,没有私钥;.crt .cer 后缀的文件都是证书文件(编码方式不一定,有可能是.pem,也有可能是.der)

.pfx:存放公钥和私钥(.pfx 主要用于windows平台,浏览器可以使用,也是包含证书和私钥,获取私钥需要密码才可以)X509文件扩展名(x509 这种证书只有公钥,不包含私钥。))

进一步理解DER格式是二进制的,PEM则是文本格式(实际上,PEM格式的内容在去掉"---BEGIN"的内容,采取BASE64解码,得到的BLOG内容,就是DER格式的内容,实际上在GMSSL、OPENSSL中,都是以ASN.1格式进行编码)

4、不同格式的转换

当前用到了DER格式,所以将上述生成的.key文件转换成der编码格式方法:使用openssl(1.1.1f版本)

openssl ec -in ec_prikey.pem -outform der -out ec_prikey.der

gmssl ec -in ec_prikey.pem -outform der -out ec_prikey.der

如果需要转换成其他格式:

gmssl sm2 -inform der -in priv.der -out priv.key

4、gmssl 证书命令了解

gmssl help 可查看gmssl支持的所有的命令

 

参考链接:gmssl 生成证书、生成crl以及生成证书链 - 一如年少de模样 - 博客园

gmssl 生成证书以及生成crl - 码农教程

Openssl ec命令 - 走看看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值