安全通信--OpenSSL

一、OpenSSL 簡介

??OpenSSL包含一個(gè)命令行工具用來完成OpenSSL庫中的所有功能,更好的是屎蜓,它可能已經(jīng)安裝到你的系統(tǒng)中了翼悴。
??OpenSSL是一個(gè)強(qiáng)大的安全套接字層密碼庫,Apache使用它加密HTTPS,OpenSSH使用它加密SSH,但是,你不應(yīng)該只將其作為一個(gè)庫來使用隧出,它還是一個(gè)多用途的、跨平臺(tái)的密碼工具阀捅。
OpenSSL有許多的特征胀瞪,而且還有SSL客戶端和服務(wù)端特征,OpenSSL還有:

美國聯(lián)邦政府NIST FIPS 140-2一級(jí)評估確認(rèn)
TLS饲鄙,下一代SSL協(xié)議
X.509密鑰和證書的生成
X.509證書權(quán)力
S/MIME加密
文件加密和粉碎
打亂UNIX密碼
9個(gè)不同的商業(yè)密碼硬件設(shè)備
密碼性能測試
36個(gè)命令
6個(gè)消息摘要算法
9個(gè)密碼算法
多個(gè)加密協(xié)議

OpenSSL一共實(shí)現(xiàn)了4種非對稱加密算法:

DH算法:一般用于密鑰交換凄诞。
RSA算法:既可以用于密鑰交換,也可以用于數(shù)字簽名忍级,當(dāng)然帆谍,如果你能夠忍受其緩慢的速度,那么也可以用于數(shù)據(jù)加密轴咱。
DSA算法:一般只用于數(shù)字簽名汛蝙。
橢圓曲線算法(ECC):ECC的這些特點(diǎn)使它必將取代RSA烈涮,成為通用的公鑰加密算法。

信息摘要
OpenSSL實(shí)現(xiàn)了5種信息摘要算法:MD2窖剑、MD5坚洽、MDC2、SHA(SHA1)和RIPEMD西土。SHA算法事實(shí)上包括了SHA和SHA1兩種信息摘要算法讶舰。
此外,OpenSSL還實(shí)現(xiàn)了DSS標(biāo)準(zhǔn)中規(guī)定的兩種信息摘要算法DSS和DSS1翠储。

密鑰證書管理
密鑰和證書管理是PKI的一個(gè)重要組成部分 。PKI:Public Key Infrastructure的首字母縮寫橡疼,翻譯過來就是公鑰基礎(chǔ)設(shè)施援所;PKI是一種遵循標(biāo)準(zhǔn)的利用公鑰加密技術(shù)為電子商務(wù)的開展提供一套安全基礎(chǔ)平臺(tái)的技術(shù)和規(guī)范。

OpenSSL 是一個(gè)開源項(xiàng)目欣除,其組成主要包括一下三個(gè)組件:

openssl:多用途的命令行工具
libcrypto:加密算法庫
libssl:加密模塊應(yīng)用庫住拭,實(shí)現(xiàn)了ssl及tls
openssl可以實(shí)現(xiàn):秘鑰證書管理、對稱加密和非對稱加密等功能历帚。

二滔岳、對稱加密

  1. 創(chuàng)建文件:
[root@manager ~]# vi file.txt
# 內(nèi)容為
123

對稱加密需要使用的標(biāo)準(zhǔn)命令為 enc ,用法如下:

openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64]
       [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md]
       [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]

常用選項(xiàng)有:
-in filename:指定要加密的文件存放路徑
-out filename:指定加密后的文件存放路徑
-salt:自動(dòng)插入一個(gè)隨機(jī)數(shù)作為文件內(nèi)容加密挽牢,默認(rèn)選項(xiàng)
-e:可以指明一種加密算法谱煤,若不指的話將使用默認(rèn)加密算法
-d:解密,解密時(shí)也可以指定算法禽拔,若不指定則使用默認(rèn)算法刘离,但一定要與加密時(shí)的算法一致
-a/-base64:使用-base64位編碼格式

  1. 簡單示例:
    加密:
[root@manager ~]# openssl dgst -sha1 file.txt
SHA1(file.txt)= a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0
[root@manager ~]# openssl enc -e -des3 -a -salt -in file.txt -out jiami
# 輸入加密密鑰
enter des-ede3-cbc encryption password:
# 再次輸入加密密鑰
Verifying - enter des-ede3-cbc encryption password:

解密:

[root@manager ~]# openssl enc -d -des3 -a -salt -in jiami -out result.txt
enter des-ede3-cbc decryption password:
[root@manager ~]# cat result.txt
123
  1. 對稱加密應(yīng)用
    用DES3算法的CBC模式加密文件plaintext.txt,#加密結(jié)果輸出到文件ciphertext.txt睹栖。
# 創(chuàng)建文件
[root@node2 ~]# echo "123456">>plaintext.txt
[root@node2 ~]# cat plaintext.txt 
123456

[root@node2 ~]# openssl enc -des3 -salt -in plaintext.txt -out ciphertext.txt
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:

# 解密 加參數(shù)-d硫惕,加密密鑰為1234
[root@node2 ~]# openssl enc -des3 -salt -d -in ciphertext.txt -out result.txt -pass pass:1234
[root@node2 ~]# cat result.txt 
123456

用DES3算法的OFB模式解密文件ciphertext.txt,提供的口令為1234野来,輸出到文件result.txt
注意:因?yàn)槟J讲煌粘撁畈荒軐σ陨系奈募M(jìn)行解密

# 加密
[root@node2 ~]# openssl enc -des-ede3-ofb -in plaintext.txt -out ciphertext.txt
enter des-ede3-ofb encryption password:
Verifying - enter des-ede3-ofb encryption password:

# 解密
[root@node2 ~]# rm -f result.txt 
[root@node2 ~]# openssl enc -des-ede3-ofb -d -in ciphertext.txt -out result.txt -pass pass:1234
[root@node2 ~]# cat result.txt 
123456

用Blowfish的CFB模式加密plaintext.txt,口令為1234曼氛,輸出到文件ciphertext.txt

#   加密
[root@node2 ~]# rm -f ciphertext.txt 
[root@node2 ~]# openssl bf-cfb -salt -in plaintext.txt -out ciphertext.txt -pass pass:1234
#   解密
[root@node2 ~]# rm -f  result.txt 
[root@node2 ~]# openssl bf-cfb -salt -d -in ciphertext.txt -out result.txt -pass pass:1234
[root@node2 ~]# cat result.txt 
123456

給文件result.txt用base64編碼豁辉,輸出到文件base64.txt

[root@node2 ~]# openssl base64 -in result.txt -out base64.txt
[root@node2 ~]# cat base64.txt 
MTIzNDU2Cg==

用RC4算法的CBC模式加密文件plaintext.txt, 輸出到文件ciphertext.txt

# salt、key和初始化向量(iv)在命令行指定
[root@node2 ~]# openssl rc4 -in plaintext.txt -out ciphertext.txt -S C62CB1D49F158ADC -iv E9EDACA1BD7090C6 -K 89D4B1678D604FAA3DBFFD030A314B29
[root@node2 ~]# cat ciphertext.txt 

# 解密
[root@node2 ~]# openssl rc4 -d -in ciphertext.txt -out result.txt -S C62CB1D49F158ADC -iv E9EDACA1BD7090C6 -K 89D4B1678D604FAA3DBFFD030A314B29
[root@node2 ~]# cat result.txt 
123456

三舀患、單向加密

單向加密需要使用的標(biāo)準(zhǔn)命令為 dgst
用法如下:

openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-c] [-d] [-hex] [-binary]
       [-out filename] [-sign filename] [-keyform arg] [-passin arg] [-verify filename] [-prverify
       filename] [-signature filename] [-hmac key] [file...]

常用選項(xiàng)有:

[-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] :指定一種加密算法
-out filename:將加密的內(nèi)容保存到指定文件中秋忙。

用SHA1算法計(jì)算文件file.txt的哈西值,輸出到stdout

[root@node2 ~]# openssl dgst -sha1 plaintext.txt
SHA1(plaintext.txt)= c4f9375f9834b4e7f0a528cc65c055702bf5f24a

用SHA1算法計(jì)算文件plaintext.txt的哈西值,輸出到文件digest.txt

[root@node2 ~]# openssl sha1 -out digest.txt plaintext.txt
[root@node2 ~]# cat digest.txt 
SHA1(plaintext.txt)= c4f9375f9834b4e7f0a528cc65c055702bf5f24a

用DSS1(SHA1)算法為文件plaintext.txt簽名,輸出到文件dsasign.txt
必須有dsakey.pem文件

# 簽名的private key必須為DSA算法產(chǎn)生的构舟,保存在文件dsakey.pem中
# openssl dgst -dss1 -sign dsakey.pem -out dsasign.txt plaintext.txt

# 用dss1算法驗(yàn)證plaintext.txt的數(shù)字簽名dsasign. txt 灰追,
# 驗(yàn)證的private key為DSA算法產(chǎn)生的文件dsakey.pem
# openssl dgst -dss1 -prverify dsakey.pem -signature dsasign.txt  plaintext.txt

用sha1算法為文件plaintext.txt簽名,輸出到文件rsasign.txt

# 簽名的private key為RSA算法產(chǎn)生的文件rsaprivate.pem
# openssl sha1 -sign rsaprivate.pem -out rsasign.txt plaintext.txt

# 用sha1算法驗(yàn)證plaintext.txt的數(shù)字簽名rsasign.txt堵幽,
# 驗(yàn)證的public key為RSA算法生成的rsapublic.pem
# openssl sha1 -verify rsapublic.pem -signature rsasign.txt  plaintext.txt

單向加密除了 openssl dgst 工具還有:

md5sum,sha1sum弹澎,sha224sum朴下,sha256sum ,sha384sum苦蒿,sha512sum

四殴胧、生成密碼

生成密碼需要使用的標(biāo)準(zhǔn)命令為 passwd ,用法如下:

openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}

常用選項(xiàng)有:
-1:使用md5加密算法
-salt string:加入隨機(jī)數(shù)佩迟,最多8位隨機(jī)數(shù)
-in file:對輸入的文件內(nèi)容進(jìn)行加密
-stdion:對標(biāo)準(zhǔn)輸入的內(nèi)容進(jìn)行加密

# 生成MD5的加密
[root@node2 ~]# openssl passwd -1 -salt '12345678'   
Password: 
$1$12345678$a4ge4d5iJ5vwvbFS88TEN0

五团滥、生成隨機(jī)數(shù)

生成隨機(jī)數(shù)需要用到的標(biāo)準(zhǔn)命令為 rand ,用法如下:

openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num

常用選項(xiàng)有:
-out file:將生成的隨機(jī)數(shù)保存至指定文件中
-base64:使用base64 編碼格式
-hex:使用16進(jìn)制編碼格式

使用生成因子2和隨機(jī)的1024-bit的素?cái)?shù)產(chǎn)生D0ffie-Hellman參數(shù),輸出保存到文件dhparam.pem报强。

[root@node2 ~]#  openssl dhparam -out dhparam.pem -2 1024
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time

從dhparam.pem中讀取Diffie-Hell參數(shù)灸姊,以C代碼的形式輸出到stdout

[root@node2 ~]# openssl dhparam -in dhparam.pem -noout -C
#ifndef HEADER_DH_H
#include <openssl/dh.h>
#endif
DH *get_dh1024()
    {
    static unsigned char dh1024_p[]={
        0x9A,0xD7,0xBF,0x77,0xBD,0x3C,0x46,0x39,0xBB,0xD7,0x33,0xC4,
        0x87,0xF2,0x4F,0xC6,0xA7,0xC6,0xD4,0xFA,0x9D,0x9F,0x8F,0x7A,
        0x38,0x5F,0xEE,0xDD,0xDE,0xE6,0xE7,0x70,0x44,0xA1,0x49,0xDF,
        0x71,0x53,0xBA,0x03,0x32,0xEC,0xEB,0x26,0x81,0xBB,0xD5,0x6A,
        0xF3,0x89,0xF7,0x77,0x33,0x10,0x2E,0x2D,0x69,0xED,0x8E,0x03,
        0x8A,0xDF,0x07,0xBF,0xF8,0xD9,0x88,0x9C,0x5C,0x74,0x81,0x21,
        0xD3,0xC1,0x16,0x85,0xBD,0x1F,0x0E,0x83,0x85,0xA0,0x30,0x4A,
        0xF1,0x41,0x61,0x88,0x31,0x2C,0x50,0x2C,0x68,0xEA,0xA7,0xF3,
        0xD3,0x59,0xEF,0x98,0xD3,0xC0,0x89,0x4E,0x61,0xE0,0xFD,0x3A,
        0xFE,0x0A,0x6E,0xF3,0x80,0x3B,0x04,0x44,0x5D,0xD4,0x1B,0x40,
        0x9C,0x10,0xAB,0x9E,0x5B,0xAE,0xAB,0x03,
        };
    static unsigned char dh1024_g[]={
        0x02,
        };
    DH *dh;

    if ((dh=DH_new()) == NULL) return(NULL);
    dh->p=BN_bin2bn(dh1024_p,sizeof(dh1024_p),NULL);
    dh->g=BN_bin2bn(dh1024_g,sizeof(dh1024_g),NULL);
    if ((dh->p == NULL) || (dh->g == NULL))
        { DH_free(dh); return(NULL); }
    return(dh);
    }

六、生成秘鑰對

首先需要先使用 genrsa 標(biāo)準(zhǔn)命令生成私鑰秉溉,然后再使用 rsa 標(biāo)準(zhǔn)命令從私鑰中提取公鑰力惯。
genrsa 的用法如下:

openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits]

常用選項(xiàng)有:
-out filename:將生成的私鑰保存至指定的文件中
-des|-des3|-idea:不同的加密算法
numbits:指定生成私鑰的大小,默認(rèn)是2048
一般情況下秘鑰文件的權(quán)限一定要控制好召嘶,只能自己讀寫父晶,因此可以使用 umask 命令設(shè)置生成的私鑰權(quán)限。

ras 的用法如下:

openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg]
       [-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id]

常用選項(xiàng):
-in filename:指明私鑰文件
-out filename:指明將提取出的公鑰保存至指定文件中
-pubout:根據(jù)私鑰提取出公鑰

  1. 生成1024位RSA私匙弄跌,用3DES加密它甲喝,口令為1234,輸出到文件rsaprivatekey.pem
[root@localhost ~]# openssl genrsa -out rsaprivatekey.pem -passout pass:trousers -des3 1024
Generating RSA private key, 1024 bit long modulus
.......++++++
.............++++++
e is 65537 (0x10001)

[root@localhost ~]# cat rsaprivatekey.pem 
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,3785CCA5BA2BE5A2

btDUdAcmSUnS9w96QXaYJu9CoyqkqK1fpDEwApPjfKym/KFVWSiGjZ0PgpG8Ig7M
DYXoyXUSwTB5Q7ivbW4HSCGH2JO+CGFf+YwPzfUo0ecAxx132guM8FBYovoP2zbJ
n4hPUBTuWeZUpdrg77fb6DvxbIXuO5hrpsRuVpD2jPiMHIFLNX3G24xl4dt78NMv
MdHitD7rp/zXLnzbcTYJp/x78Qihy0uZaenOaRqyET4U7nXKevd8B8McM2L2Od2B
CSugx9dUl5Wx4xH3L7a8eenLjXlL2L7K1zpkYqvbIBaMH0qgAz8UxpPlkQIrDCa3
dhBr4pcPT6d4mQbUOq97w29OTYAY/Kt6t4uDoEpUi2G1G2j86MdtzckYpo8Pytdz
1Nal8Rt4BI/hFJh1EZI21W+DOPViD6sPPHR+V//Q39ZnwwBfKp6ICvLMHg88nxtp
FDZv2mRQ4JGMiJ1Q/rbOpQ07o6kARnxYMTKEg1Hixb2x1sXFfO+44AUoK1GtHVOd
3+dwO9q1qijeypfq+fvCnUgyS1bgVV/Cl2EpqGWMbBFlT3xXXES2+W/wJHSu63b6
XiWI47pwa5CkdutPzL5vLJLCfhOA+hTblq5YlhO+IvKyV9/buuKDSj5Xzgy/GtgR
kCKcPNjTLmGFKc5zS51ujyQCbztwCZqTHQezUBD6+vsl9zeBDjKSXj432rVi9FBD
0dVMOUmltYETVmcVrxGbFnFQMBIKpDFpYJmojKNGO0sG2mlF+blddxAop/++siru
ycWqt8XhM5WbO6AGjxN1XwOAgP5ieX52lY0FZ1hUpuvHt82ngom8gw==
-----END RSA PRIVATE KEY-----

  1. 從文件rsaprivatekey.pem讀取私匙铛只,用口令1234解密俺猿,生成的公鑰匙輸出到文件rsapublickey.pem
[root@localhost ~]#  openssl rsa -in rsaprivatekey.pem -passin pass:trousers -pubout -out rsapubckey.pem
writing RSA key

[root@localhost ~]# cat rsapubckey.pem 
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD6wAaCknpNy7ak9ppttplvdf4K
KYHpUCEmFRH79jXAK/xaa6uS0aOJ1TPVOpwW6QFXvgBzDr8E58fhOsVjP0FhTVWm
Foe8svi9Rd6+Fhz/3Qpg4C1/drD6axRZ+7YxLxVTFBoKnhdUILuAXJp3U7KgNoV5
51LR3ku6/SXJ7OPngQIDAQAB
-----END PUBLIC KEY-----

  1. 用公鑰匙rsapublickey.pem加密文件plain.txt, 輸出到文件cipher.txt
[root@localhost ~]# vi plain.txt
admin

[root@localhost ~]# openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in plain.txt -out cipher.txt

  1. 使用私鑰匙rsaprivatekey.pem解密密文cipher.txt格仲,輸出到文件plain.txt
[root@localhost ~]# openssl rsautl -decrypt -inkey rsaprivatekey.pem -in cipher.txt -out plain.txt
Enter pass phrase for rsaprivatekey.pem:
# 輸入密碼 rousers

[root@node1 ~]# cat plain.txt 
admin

  1. 用私鑰匙rsaprivatekey.pem給文件plain.txt簽名押袍,輸出到文件signature.bin
[root@localhost ~]# openssl rsautl -sign -inkey rsaprivatekey.pem -in plain.txt -out signature.bin
Enter pass phrase for rsaprivatekey.pem:

  1. 用公鑰匙rsapublickey.pem驗(yàn)證簽名signature.bin,輸出到文件plain.txt
[root@localhost ~]#  openssl rsautl -verify -pubin -inkey rsapublickey.pem -in signature.bin -out plain
  1. 從X.509證書文件cert.pem中獲取公鑰匙凯肋,用3DES加密mail.txt,輸出到文件mail.enc
[root@localhost ~]#  openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem
  1. 從X.509證書文件cert.pem中獲取接收人的公鑰匙谊惭,用私鑰匙key.pem解密S/MIME消息mail.enc,結(jié)果輸出到文件mail.txt
[root@localhost ~]#  openssl smime -decrypt -in mail.enc -recip cert.pem -inkey key.pem -out mail.txt
  1. cert.pem為X.509證書文件侮东,用私匙key,pem為mail.txt簽名圈盔,證書被包含在S/MIME消息中,輸出到文件mail.sgn
[root@localhost ~]#  openssl smime -sign -in mail.txt -signer cert.pem -inkey key.pem -out mail.sgn
  1. 驗(yàn)證S/MIME消息mail.sgn悄雅,輸出到文件mail.txt 簽名者的證書應(yīng)該作為S/MIME消息的一部分包含在mail.sgn中
[root@localhost ~]#  openssl smime -verify -in mail.sgn -out mail.txt

DSA:DSA只是一種算法驱敲,和RSA不同之處在于它不能用作加密和解密,也不能進(jìn)行密鑰交換宽闲,只用于簽名,比RSA要快很多众眨,和RSA加密解密過程相反握牧,在DSA數(shù)字簽名和認(rèn)證中,發(fā)送者使用自己的私鑰對文件或消息進(jìn)行簽名娩梨,接受者收到消息后使用發(fā)送者的公鑰來驗(yàn)證簽名的真實(shí)性沿腰。

# 生成1024位DSA參數(shù)集,并輸出到文件dsaparam.pem
[root@localhost ~]#  openssl dsaparam -out dsaparam.pem 1024

# 使用參數(shù)文件dsaparam.pem生成DSA私鑰匙狈定,
# 采用3DES加密后輸出到文件dsaprivatekey.pem
[root@localhost ~]#  openssl gendsa -out dsaprivatekey.pem -des3 dsaparam.pem

# 使用私鑰匙dsaprivatekey.pem生成公鑰匙颂龙,
# 輸出到dsapublickey.pem
[root@localhost ~]#  openssl dsa -in dsaprivatekey.pem -pubout -out dsapublickey.pem

# 從dsaprivatekey.pem中讀取私鑰匙,解密并輸入新口令進(jìn)行加密纽什,
# 然后寫回文件dsaprivatekey.pem
[root@localhost ~]#  openssl dsa -in dsaprivatekey.pem -out dsaprivatekey.pem -des3 -passin

七措嵌、創(chuàng)建CA和申請證書

使用openssl工具創(chuàng)建CA證書和申請證書時(shí),需要先查看配置文件芦缰,因?yàn)榕渲梦募袑ψC書的名稱和存放位置等相關(guān)信息都做了定義企巢。

  1. 生成自簽名證書
    生成 RSA 私鑰和自簽名證書:
openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 365 -out cert.crt

req是證書請求的子命令,-newkey rsa:2048 -keyout private_key.pem 表示生成私鑰(PKCS8格式)饺藤,-nodes 表示私鑰不加密包斑,若不帶參數(shù)將提示輸入密碼流礁;
-x509表示輸出證書涕俗,-days365 為有效期,此后根據(jù)提示輸入證書擁有者信息神帅;若執(zhí)行自動(dòng)輸入再姑,可使用-subj選項(xiàng):

openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 365 -out cert.crt -subj "/C=CN/ST=GD/L=SZ/O=vihoo/OU=dev/CN=vivo.com/emailAddress=yy@vivo.com"

使用 已有RSA 私鑰生成自簽名證書

openssl req -new -x509 -days 365 -key rsa_private.key -out cert.crt

-new 指生成證書請求,加上-x509 表示直接輸出證書找御,-key 指定私鑰文件元镀,其余選項(xiàng)與上述命令相同。

  1. 生成簽名請求及CA 簽名
    使用 RSA私鑰生成 CSR 簽名請求
openssl genrsa -aes256 -passout pass:111111 -out server.key 2048
openssl req -new -key server.key -out server.csr

此后輸入密碼霎桅、server證書信息完成栖疑,也可以命令行指定各類參數(shù):

openssl req -new -key server.key -passin pass:111111 -out server.csr -subj "/C=CN/ST=GD/L=SZ/O=vihoo/OU=dev/CN=vivo.com/emailAddress=yy@vivo.com"

此時(shí)生成的 csr簽名請求文件可提交至 CA進(jìn)行簽發(fā)。
使用 CA 證書及CA密鑰 對請求簽發(fā)證書進(jìn)行簽發(fā)滔驶,生成 x509證書:

openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -passin pass:111111 -CAcreateserial -out server.crt

其中 CAxxx 選項(xiàng)用于指定CA 參數(shù)輸入.

  1. 證書查看及轉(zhuǎn)換
    查看證書細(xì)節(jié)
openssl x509 -in cert.crt -noout -text

轉(zhuǎn)換證書編碼格式

openssl x509 -in cert.cer -inform DER -outform PEM -out cert.pem

合成 pkcs#12 證書(含私鑰)

# 將 pem 證書和私鑰轉(zhuǎn) pkcs#12 證書
openssl pkcs12 -export -in server.crt -inkey server.key -passin pass:111111 -password pass:111111 -out server.p12

其中-export指導(dǎo)出pkcs#12 證書遇革,-inkey 指定了私鑰文件,-passin 為私鑰(文件)密碼(nodes為無加密)揭糕,-password 指定 p12文件的密碼(導(dǎo)入導(dǎo)出).
將 pem 證書和私鑰/CA 證書 合成pkcs#12 證書:

openssl pkcs12 -export -in server.crt -inkey server.key -passin pass:111111 \
    -chain -CAfile ca.crt -password pass:111111 -out server-all.p12

其中-chain指示同時(shí)添加證書鏈萝快,-CAfile 指定了CA證書,導(dǎo)出的p12文件將包含多個(gè)證書著角。(其他選項(xiàng):-name可用于指定server證書別名揪漩;-caname用于指定ca證書別名)。

pcks#12 提取PEM文件(含私鑰)

openssl pkcs12 -in server.p12 -password pass:111111 -passout pass:111111 -out out/server.pem

其中-password 指定 p12文件的密碼(導(dǎo)入導(dǎo)出)吏口,-passout指輸出私鑰的加密密碼(nodes為無加密)
導(dǎo)出的文件為pem格式奄容,同時(shí)包含證書和私鑰(pkcs#8)冰更。
僅提取私鑰:

 openssl pkcs12 -in server.p12 -password pass:111111 -passout pass:111111 -nocerts -out out/key.pem

僅提取證書(所有證書):

openssl pkcs12 -in server.p12 -password pass:111111 -nokeys -out out/key.pem

僅提取ca證書

openssl pkcs12 -in server-all.p12 -password pass:111111 -nokeys -cacerts -out out/cacert.pem 

僅提取server證書

openssl pkcs12 -in server-all.p12 -password pass:111111 -nokeys -clcerts -out out/cert.pem 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嫩海,隨后出現(xiàn)的幾起案子冬殃,更是在濱河造成了極大的恐慌,老刑警劉巖叁怪,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件审葬,死亡現(xiàn)場離奇詭異,居然都是意外死亡奕谭,警方通過查閱死者的電腦和手機(jī)涣觉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來血柳,“玉大人官册,你說我怎么就攤上這事∧寻疲” “怎么了膝宁?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長根吁。 經(jīng)常有香客問我员淫,道長,這世上最難降的妖魔是什么击敌? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任介返,我火速辦了婚禮,結(jié)果婚禮上沃斤,老公的妹妹穿的比我還像新娘圣蝎。我一直安慰自己,他們只是感情好衡瓶,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布徘公。 她就那樣靜靜地躺著,像睡著了一般哮针。 火紅的嫁衣襯著肌膚如雪关面。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天诚撵,我揣著相機(jī)與錄音缭裆,去河邊找鬼。 笑死寿烟,一個(gè)胖子當(dāng)著我的面吹牛澈驼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播筛武,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼缝其,長吁一口氣:“原來是場噩夢啊……” “哼挎塌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起内边,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤榴都,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后漠其,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嘴高,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年和屎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拴驮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柴信,死狀恐怖套啤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情随常,我是刑警寧澤潜沦,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站绪氛,受9級(jí)特大地震影響唆鸡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钞楼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一喇闸、第九天 我趴在偏房一處隱蔽的房頂上張望袄琳。 院中可真熱鬧询件,春花似錦、人聲如沸唆樊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逗旁。三九已至嘿辟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間片效,已是汗流浹背红伦。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淀衣,地道東北人昙读。 一個(gè)月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像膨桥,于是被迫代替她去往敵國和親蛮浑。 傳聞我的和親對象是個(gè)殘疾皇子唠叛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容