SSL證書鏈及使用

什麼是證書鏈

證書鏈簡單來說是域名鑰證書、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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章