Openssl
如何以 PEM 格式從 PFX 導出 CA 證書鏈,沒有包屬性
我有一個包含完整證書鍊和私鑰的 PKCS12 文件。我需要將它分解為 3 個文件用於應用程序。我需要的 3 個文件如下(PEM 格式):
- 未加密的密鑰文件
- 客戶端證書文件
- CA 證書文件(根證書和所有中間證書)
這是我必須執行的一項常見任務,因此我正在尋找一種無需手動編輯輸出即可完成此任務的方法。
我嘗試了以下方法:
openssl pkcs12 -in <filename.pfx> -nocerts -nodes -out <clientcert.key> openssl pkcs12 -in <filename.pfx> -clcerts -nokeys -out <clientcert.cer> openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain -out <cacerts.cer>
這很好用,但是,輸出包含應用程序不知道如何處理的包屬性。
經過一番搜尋,我找到了一個建議的解決方案,通過 x509 傳遞結果以去除包屬性。
openssl x509 -in <clientcert.cer> -out <clientcert.cer>
這可行,但我在 cacert 文件上遇到了問題。輸出文件僅包含鏈中的 3 個證書之一。
有沒有辦法避免在 pkcs12 命令的輸出中包含包屬性,或者讓 x509 命令輸出包含所有證書?此外,如果通過 x509 執行它是最簡單的解決方案,有沒有辦法將 pkcs12 的輸出通過管道傳輸到 x509 而不是兩次寫出文件?
我最終得出的解決方案是通過 sed 進行管道傳輸。
openssl pkcs12 -in <filename.pfx> -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > <clientcert.key> openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <clientcert.cer> openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <cacerts.cer>
另一個沒有的解決方案
sed
:openssl pkcs12 -in <filename.pfx> -nocerts -nodes | openssl pkcs8 -nocrypt -out <clientcert.key> openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | openssl x509 -out <clientcert.cer> openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | openssl x509 -out <cacerts.cer>