openssl签发证书
- 2016-11-30 21:13:00
- admin
- 原创 4489
一、openssl签发证书
1、什么是ASN.1编码?
1.1、ASN.1,Abstract Syntax Notation One,抽象语法标记,描述了一种对数据表示、编码、传输、解码的数据格式;
1.2、通常使用BER编码规则,使用TLV编码具体信息,TLV全称是Tag-Length-Value,BER常用子集有DER和CER;
1.3、编码规则:https://www.oss.com/asn1/resources/asn1-made-simple/encoding-rules.html
1.4、数据类型:https://www.oss.com/asn1/resources/asn1-made-simple/asn1-quick-reference.html
2、asn1parse工具用于解析ASN.1结构。
    openssl asn1parse -in public.pem 
    0:d=0  hl=4 l= 290 cons: SEQUENCE          
    4:d=1  hl=2 l=  13 cons: SEQUENCE          
    6:d=2  hl=2 l=   9 prim: OBJECT            :rsaEncryption
   17:d=2  hl=2 l=   0 prim: NULL              
   19:d=1  hl=4 l= 271 prim: BIT STRING
节点偏移:节点深度、节点头部长度、节点数据长度、节点类型;
节点类型:cons是结构节点,prim是数据节点;
3、openssl命令如何使用?
3.1、openssl -h,显示帮助;
3.2、openssl cmd -h,显示命令帮助;
3.3、export OPENSSL_CONF=openssl.cnf,设置配置文件;
3.4、enc和dgst包含很多扩展命令,扩展命令可以直接跟在openssl后面使用;
4、证书规范说明
4.1、证书规范:https://www.rfc-editor.org/rfc/rfc3280
4.2、AKI和SKI是为了做证书链关联,当前证书的AKI是签发证书的SKI;
4.3、V1和V3证书区别在于是否存在扩展属性,签发证书带extensions参数时生成V3证书;
5、pkcs12要求使用密码保护私钥,所以脚本需要用户输入密码,但是密码可以为空。
6、脚本下载:genkey.sh
#!/bin/bash
usage() {
    echo "usage: command gen|show|help where_to_use [key_size(default is 2048)]"
    exit
}
[ $# -ge 2 ] && {
    mkdir -p $2
    cd $2
}
key_size=2048
[ $# -ge 3 ] && {
    key_size="$3"
}
countryName="CN"
stateOrProvinceName="guangdong"
localityName="shenzhen"
organizationName="3scard Co., Ltd."
organizationalUnitName="IT Dept"
commonName="$2"
#emailAddress="feinenxiang@3scard.com"
challengePassword="123456"
unstructuredName=""
subject="\
/C=$countryName\
/ST=$stateOrProvinceName\
/L=$localityName\
/O=$organizationName\
/OU=$organizationalUnitName\
/CN="$commonName""
#/emailAddress="$emailAddress"
case "$1" in
gen)
    openssl genrsa -out private.pem "$key_size"
    openssl rsa -in private.pem -outform pem -pubout -out public.pem
    
    openssl req -new -key private.pem -sha256 -out certReq.csr -subj "$subject"
    openssl x509 -req -days 3650 -in certReq.csr -signkey private.pem -sha256 -out cert.crt
    openssl x509 -outform der -in cert.crt -out cert.der
    
    openssl pkcs12 -export -out private.p12 -inkey private.pem -in cert.crt
    cp -rf private.p12 private.pfx
    ;;
show)
    openssl x509 -text -in cert.crt
    ;;
*)
    usage
esac
