美文网首页
数字证书

数字证书

作者: Reiko士兵 | 来源:发表于2020-11-30 14:29 被阅读0次

    数字证书

    一、 知识储备
    1. 编码方式
    DER:无报头,二进制编码
    PEM:有报头,报头用ASCII编码,内容用base64编码
    

    DER 和 PEM 为文件编码方式!

    1. 文件格式
    crt:证书文件,通常为PEM编码
    cer:证书文件,通常为DER编码
    key:秘钥文件,通常为PEM编码
    csr:证书请求文件,通常为PEM编码
    jks:java证书库
    pfx/p12:Windows的IIS用,为DER编码,linux上通常密钥与证书分离,此格式文件将密钥与证书合在一起存放,提取信息需要密码,功能与jks类似
    crl:证书吊销列表
    
    二、常用命令
    1. 创建数字证书

    ​ keytool 生成CA自签名证书

    #先用keytool创建一个放入jks中的CA自签名证书
    keytool -genkeypair -alias server -keypass changeit -storepass changeit  -dname "C=CN,ST=GD,L=SZ,O=vihoo,OU=dev,CN=vihoo.com" -keyalg RSA -keysize 2048 -validity 3650 -keystore server.keystore
    #再用keytool导出其中的证书
    keytool -alias server -exportcert -keystore server.keystore -file server.cer -storepass changeit
    

    openssl生成CA自签名证书

    #使用openssl生成CA自签名证书
    # private key
    openssl genrsa -out ca.key 2048 
    # generate csr
    openssl req -new -key ca.key -out ca.csr -subj "/C=CN/ST=GD/L=SZ/O=ca/OU=dev/CN=ca.com"
    # generate certificate
    openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt
    #使用一条命令直接生成证书请求文件
    openssl req -out ca.crt -new -newkey rsa:2048 -nodes -keyout ca.key -x509 -days 3650 -subj "/C=CN/ST=GD/L=SZ/O=ca/OU=dev/CN=ca.com"
    

    openssl生成CA签名的用户证书

    #首次执行需要先创建CA目录,否则生成证书报错 "./demoCA/newcerts: No such file or directory" 
    cp /etc/ssl/openssl.cnf .
    mkdir -p ./demoCA/newcerts 
    touch demoCA/index.txt 
    touch demoCA/serial 
    echo 01 > demoCA/serial
    
    #使用openssl生成CA签名的用户证书
    # private key
    openssl genrsa -out server.key 2048
    # generate csr
    openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=GD/L=SZ/O=ca/OU=dev/CN=server.com"
    # generate certificate
    openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -batch
    
    #若报错 "failed to update database",执行以下任意一条命令,或者使用CN不同的 csr 文件
    sed -i 's/unique_subject = yes/unique_subject = no/g' demoCA/index.txt.attr
    
    cat /dev/null > demoCA/index.txt
    

    openssl生成吊销列表

    # 首次执行需要先创建目录,移入根证书文件
    mkdir -p ./demoCA/private
    cp ca.key ./demoCA/private/cakey.pem
    cp ca.crt ./demoCA/cacert.pem
    echo '00' >./demoCA/crlnumber
    
    #吊销证书
    openssl ca -revoke server.crt
    #生成吊销列表
    openssl ca -gencrl  -out server.crl 
    

    openssl生成证书链

    #生成根CA
    openssl req -out rootCA.crt -new -newkey rsa:2048 -nodes -keyout rootCA.key -x509 -days 3650 -subj "/C=CN/ST=GD/L=SZ/O=ca/OU=dev/CN=rootCA.com"
    #生成二级CA
    openssl genrsa -out secondCA.key 2048
    openssl req -new -key secondCA.key -out secondCA.csr -subj "/C=CN/ST=GD/L=SZ/O=ca/OU=dev/CN=secondCA.com"
    openssl ca -extensions v3_ca -in secondCA.csr -out secondCA.crt -cert rootCA.crt -keyfile rootCA.key -batch
    #生成三级CA
    openssl genrsa -out thirdCA.key 2048
    openssl req -new -key thirdCA.key -out thirdCA.csr -subj "/C=CN/ST=GD/L=SZ/O=ca/OU=dev/CN=thirdCA.com"
    openssl ca -extensions v3_ca -in thirdCA.csr -out thirdCA.crt -cert secondCA.crt -keyfile secondCA.key -batch
    #签名服务证书(普通私钥)
    openssl genrsa -out src.key 2048
    openssl req -new -key src.key -out src.csr -subj "/C=CN/ST=GD/L=SZ/O=ca/OU=dev/CN=src.com"
    openssl ca -in src.csr -out src.crt -cert thirdCA.crt -keyfile thirdCA.key -batch
    #签名服务证书(加密私钥)
    openssl genrsa -out src.key 2048
    openssl pkcs8 -in src.key -topk8 -out encsrc.key -passout pass:changeit
    openssl req -new -key encsrc.key -out encsrc.csr -subj "/C=CN/ST=GD/L=SZ/O=ca/OU=dev/CN=encsrc.com" -passin pass:changeit
    openssl ca -in encsrc.csr -out encsrc.crt -cert thirdCA.crt -keyfile thirdCA.key -batch
    #生成证书链
    cat rootCA.crt secondCA.crt thirdCA.crt > chain.crt
    
    2. 证书内容查看
    #使用keytool查看cer证书
    keytool -printcert -file server.cer
    #使用keytool查看crt证书
    keytool -printcert -file server.crt
    #使用openssl查看cer证书
    openssl x509 -inform DER -text -in server.cer
    #使用openssl查看crt证书
    openssl x509 -text -noout -in server.crt
    #使用openssl查看吊销列表
    openssl crl -text -in server.crl
    
    3. 证书格式转换
    #cer转crt
    openssl x509 -inform DER -in server.cer -out server1.crt
    #crt转cer
    openssl x509 -in server.crt -outform DER -out server1.cer
    
    4. 证书合并
    #合并俩crt证书
    cat server.crt server1.crt > server2.crt
    #合并俩cer证书
    cat server.cer server1.cer > server2.cer
    
    5. 将数字证书导入jks
    #导入cer证书至jks
    keytool -import -file server2.cer -noprompt -alias servercer -keystore keystore.jks -storepass changeit
    #导入crt证书至jks
    keytool -import -file server2.crt -noprompt -alias servercrt -keystore keystore.jks -storepass changeit
    #导入jks证书至jks
    keytool -importkeystore -noprompt -deststorepass changeit -destkeystore dest.keystore -srckeystore src.keystore -srcstorepass changeit -srckeypass changeit -destalias triagen -alias src.server
    #将p12证书导入jks
    keytool -importkeystore -noprompt -deststorepass changeit -destkeystore dest.keystore -srckeystore src.p12 -srcstorepass changeit -srckeypass changeit -srcstoretype PKCS12 -destalias triagen -alias src.server
    #将证书链证书导入jks
    cat chain.crt encsrc.crt > all.crt
    openssl pkcs12 -export -inkey encsrc.key -in all.crt -name chaincert -out chain.p12 -passin pass:changeit -passout pass:changeit
    keytool -importkeystore -noprompt -deststorepass changeit -destkeystore dest.keystore -srckeystore chain.p12 -srcstorepass changeit -srckeypass changeit -srcstoretype PKCS12 -destalias triagen -alias chaincert
    
    6. 证书库生成
    #jks证书库生成
    keytool -genkeypair -alias server -keypass changeit -storepass changeit  -dname "C=CN,ST=GD,L=SZ,O=vihoo,OU=dev,CN=vihoo.com" -keyalg RSA -keysize 2048 -validity 3650 -keystore server.keystore
    #pkcs12证书库生成
    keytool -genkeypair -alias server -keypass changeit -storepass changeit  -storetype PKCS12 -dname "C=CN,ST=GD,L=SZ,O=vihoo,OU=dev,CN=vihoo.com" -keyalg RSA -keysize 2048 -validity 3650 -keystore src.p12
    
    7. 证书库查看
    #keytool查看jks证书库
    keytool --list -rfc -keystore keystore -storepass changeit
    #keytool查看p12证书库
    keytool --list -v -storetype PKCS12 -keystore keystore.p12 -storepass changeit
    #keytool查看单个证书信息
    keytool --list -rfc -keystore keystore -storepass changeit -alias mykey
    
    三、参考链接:

    1、如何从不同扩展名的数字证书中提取明文信息? *.pem *.der *.crt *.cer *.key之间的区别是什么?...
    2、 生成带保护口令的私钥
    3、 Creating a password protected PKCS #12 file for certificates

    相关文章

      网友评论

          本文标题:数字证书

          本文链接:https://www.haomeiwen.com/subject/sjbrwktx.html