本文介紹 SSL 證書相關(guān)標(biāo)準(zhǔn)冯遂、格式及轉(zhuǎn)換命令。
證書標(biāo)準(zhǔn)
X.509
是密碼學(xué)中公鑰證書的格式標(biāo)準(zhǔn)谒获,主要定義了證書中應(yīng)該包含哪些內(nèi)容蛤肌,如:公鑰、身份信息(比如網(wǎng)絡(luò)主機名批狱,組織的名稱或個體名稱等)和簽名信息(可以是證書簽發(fā)機構(gòu) CA 的簽名裸准,也可以是自簽名),可以參考 RFC5280赔硫。
編碼格式
同樣的 X.509
證書可能有不同的編碼格式炒俱,目前有以下兩種編碼格式:
-
PEM
:Privacy Enhanced Mail,以-----BEGIN...
開頭爪膊、-----END...
結(jié)尾的文本格式权悟,內(nèi)容為BASE64
編碼。Apache 和 Nginx 服務(wù)器偏向于使用這種編碼格式推盛。 -
DER
:Distinguished Encoding Rules峦阁,二進制格式(不可讀),Java 和 Windows 服務(wù)器偏向于使用這種編碼格式小槐。
證書格式
PEM
PEM
編碼格式證書拇派,通常用于數(shù)字證書認(rèn)證機構(gòu)(Certificate Authorities,CA)凿跳〖悖可保存證書,也可保存私鑰控嗜,有時也將PEM
格式的私鑰后綴修改為.key
以區(qū)別證書和私鑰茧彤。
OpenSSL
查看命令:openssl x509 -in certificate.pem -text -noout
DER
DER
編碼格式證書,所有類型的認(rèn)證證書和私鑰都可以存儲為DER
格式疆栏。只保存證書曾掂,不保存私鑰惫谤。
OpenSSL
查看命令:openssl x509 -in certificate.der -inform der -text -noout
KEY
通常用來存放一個公鑰或者私鑰,并非X.509
證書珠洗,編碼可能是PEM
溜歪,也可能是DER
。
OpenSSL
查看命令:openssl rsa -in mykey.key -text -noout
如果是DER
格式:openssl rsa -in mykey.key -text -noout -inform der
CER
可能是PEM
編碼许蓖,也可能是DER
編碼蝴猪,大多數(shù)應(yīng)該是DER
編碼。常見于Windows系統(tǒng)膊爪。CRT
Certificate 的簡稱自阱,可能是PEM
編碼,也可能是DER
編碼米酬,大多數(shù)應(yīng)該是PEM
編碼沛豌。常見于 *NIX 系統(tǒng)。與DER
相同不保存私鑰赃额。CSR
這不是證書加派,可以簡單理解成公鑰,生成證書時要把這個提交給權(quán)威的證書頒發(fā)機構(gòu)爬早。其核心內(nèi)容是一個公鑰(當(dāng)然還附帶了一些別的信息)哼丈,在生成這個申請的時候,同時也會生成一個私鑰启妹。
OpenSSL
查看命令:openssl req -noout -text -in my.csr
(如果是DER
格式需要加上-inform der
)PKCS#7/P7B
(1) 只能存儲認(rèn)證證書或證書路徑中的證書(就是存儲認(rèn)證證書鏈筛严,本級,上級饶米,到根級都存到一個文件中),不能存儲私鑰桨啃。
(2) 文件擴展名:.p7b
或.p7c
。
(3) 內(nèi)容:以-----BEGIN PKCS7-----
開頭檬输,以-----END PKCS7-----
結(jié)尾照瘾,中間內(nèi)容為BASE64
編碼。
(4) 使用場景:Windows 或 Tomcat丧慈。PKCS#12/PFX
(1) Predecessor of PKCS#12析命,同時包含證書和私鑰,一般有密碼保護逃默。
(2) 內(nèi)容:二進制格式鹃愤。
(3) 使用場景:一般用于 Windows 上的 IIS 服務(wù)器。
(4)OpenSSL
查看命令:openssl pkcs12 -in for-iis.pfx
參考:Public Key Cryptographic StandardsJKS
(1) Java Key Storage完域,Java 專屬格式软吐,同時包含證書和私鑰,一般有密碼保護吟税“及遥可以使用keytool
工具進行格式轉(zhuǎn)換姿现。
(2) 內(nèi)容:二進制格式。
(3) 使用場景:一般用于 Tomcat 服務(wù)器肖抱。
證書生成命令
-
PEM
:openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
-
PFX
:openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
-
CSR
:openssl req -newkey rsa:2048 -new -nodes -keyout my.key -out my.csr
證書轉(zhuǎn)換命令
方法:使用 OpenSSL
命令行工具在不同證書格式之間轉(zhuǎn)換备典。
-
PEM
>DER
:openssl x509 -outform der -in certificate.pem -out certificate.der
-
PEM
>P7B
:openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
-
PEM
>PFX
:openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
-
DER
>PEM
:openssl x509 -inform der -in certificate.cer -out certificate.pem
-
P7B
>PEM
:openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
-
PFX
>PEM
:openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
注意:PFX
轉(zhuǎn)PEM
后certificate.cer
文件包含認(rèn)證證書和私鑰,需要把它們分開存儲才能使用意述。