Openssl

Openssl 使用中間證書將 pem 轉換為 crt

  • June 19, 2019

使用 Firefox,很容易將頁面使用的 SSL 證書導出為 x509,並將所有中間證書導出為 *.crt。

我需要通過使用 openssl 將 *.pem 文件轉換為 *.crt 作為非二進制格式來做同樣的事情。

這些是apache目前使用的證書:

SSLCertificateFile /etc/apache2/ssl/cert-start.pem
SSLCertificateKeyFile /etc/apache2/ssl/key-no-pw.pem
SSLCACertificateFile /etc/apache2/ssl/cert-bundle.pem

我可以使用以下方法輕鬆地將其轉換SSLCertificateFile為 crt:

openssl x509  -in cert-start.pem -out cert-start.crt

為了建構帶有完整鏈的crt,我嘗試過-chain-clcerts但沒有運氣。

包含所有中間證書的正確方法是什麼SSLCACertificateFile /etc/apache2/ssl/cert-bundle.pem

cat cert-start.pem cert-bundle.pem > chain.pem

如果它還包含密鑰(在某些情況下它是必需的,但取決於使用情況)

cat cert-start.pem cert-bundle.pem key-no-pw.pem > full_chain.pem

如果您檢查輸出,您會看到類似這樣的內容(如果是 chain.pem):

-----BEGIN CERTIFICATE-----
... <base64 encoded server cert> ...
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
... <base64 encoded intermediate cert> ...
-----END CERTIFICATE-----

如果是 full_chain.pem,它將是這樣的:

-----BEGIN CERTIFICATE-----
... <base64 encoded server cert> ...
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
... <base64 encoded intermediate cert> ...
-----END CERTIFICATE-----

-----BEGIN PRIVATE KEY-----
... <base64 encoded key>
-----END PRIVATE KEY-----

如果您使用它“檢查”它,openssl x509 -in chain.pem您只會看到第一個(在這種情況下是伺服器)證書。其餘所有將作為註釋處理 - 被忽略。您必須將其分隔為額外的文件,或者僅通過管道將特定的行範圍列印到 openssl 以查看內容。可以使用 cat 或您喜歡的某些文本編輯器“直覺地”完成真正的檢查…一旦應用程序期望 pem / crt 文件,這就是您所需要的。

如果您想將其作為“容器”處理,則正確的形式是 pkcs12。在那裡,您可以將其作為一組證書處理並以這種方式處理並查看/導入它。該命令將在這種情況下

openssl pkcs12 -export -in cert-start.pem -inkey key-no-pw.pem -certfile cert-bundle.pem -out full_chain.p12 -nodes

可以使用命令檢查 pkcs12 輸出

openssl pkcs12 -in full_chain.p12 -nodes

請注意,“正確”格式(p12 或 pem / crt)取決於使用情況。

引用自:https://serverfault.com/questions/971878