什麼是證書鏈
證書鏈簡單來說是域名鑰證書、CA公鑰、根證書形成的一個頒發鏈條,屬於公鑰的一部分。
更白話一點,就是證書鏈文件包含一系列CA機構公鑰的證書。
證書鏈格式
一般證書鏈格式是.chain
,證書定義順序是倒序的,即先權威CA再根CA。
以根CA+一個權威CA舉例:
-----BEGIN CERTIFICATE-----
權威CA公鑰
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
根CA公鑰
-----END CERTIFICATE-----
證書鏈中也可包含主體與簽發信息,僅用於便於確定證書所屬不參與認證,舉例:
subject=C = CN, O = XXXX, CN = XXXX RSACA
issuer=C = CN, O = XXXX, CN = XXXX ROOT RSACA
-----BEGIN CERTIFICATE-----
權威CA公鑰
-----END CERTIFICATE-----
subject=C = CN, O = XXXX, CN = XXXX ROOT RSACA
issuer=C = CN, O = XXXX, CN = XXXX ROOT RSACA
-----BEGIN CERTIFICATE-----
根CA公鑰
-----END CERTIFICATE-----
合併域名證書與證書鏈
Nginx等web服務器需要將證書鏈與域名證書合併成PEM文件,作爲公鑰直接使用。
域名證書內容如下:
-----BEGIN CERTIFICATE-----
域名公鑰
-----END CERTIFICATE-----
證書鏈如下:
-----BEGIN CERTIFICATE-----
權威CA公鑰
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
根CA公鑰
-----END CERTIFICATE-----
其合併證書鏈方法,即以 域名證書、權威CA證書、根CA證書 順序,將證書內容複製到同一文件中。
合併結果如下:
-----BEGIN CERTIFICATE-----
域名公鑰
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
權威CA公鑰
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
根CA公鑰
-----END CERTIFICATE-----
合併出的證書直接作爲公鑰證書代替證書。
擴展閱讀
P7B提取證書鏈與公鑰證書
P7B格式是同時包含證書鏈和域名公鑰證書的,可以通過openssl命令提取。
以下命令輸出證書的順序是不對的,需要按subject和issuer描述調整順序,域名證書->權威CA->根CA
## p7b可指定PEM或DER格式,也可以經過base64加密
## 以下列出常見幾條命令:
# PEM格式未base64
openssl pkcs7 -inform PEM -print_certs -in xxx.p7b -out public.pem
# DER格式未base64
openssl pkcs7 -inform DER -print_certs -in xxx.p7b -out public.pem
# PEM+base64
base64 -d xxx.p7b | openssl pkcs7 -inform PEM -print_certs -out public.pem
# DER+base64
base64 -d xxx.p7b | openssl pkcs7 -inform DER -print_certs -out public.pem
校驗PEM證書與密鑰是否配套
# 兩者輸出同樣的md5值說明配套
openssl x509 -noout -modulus -in public.pem |openssl md5
openssl rsa -noout -modulus -in private.key |openssl md5