一、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):秘鑰證書管理、對稱加密和非對稱加密等功能历帚。
二滔岳、對稱加密
- 創(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位編碼格式
- 簡單示例:
加密:
[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
- 對稱加密應(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ù)私鑰提取出公鑰
- 生成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-----
- 從文件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-----
- 用公鑰匙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
- 使用私鑰匙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
- 用私鑰匙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:
- 用公鑰匙rsapublickey.pem驗(yàn)證簽名signature.bin,輸出到文件plain.txt
[root@localhost ~]# openssl rsautl -verify -pubin -inkey rsapublickey.pem -in signature.bin -out plain
- 從X.509證書文件cert.pem中獲取公鑰匙凯肋,用3DES加密mail.txt,輸出到文件mail.enc
[root@localhost ~]# openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem
- 從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
- 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
- 驗(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)信息都做了定義企巢。
- 生成自簽名證書
生成 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)與上述命令相同。
- 生成簽名請求及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ù)輸入.
- 證書查看及轉(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