Openssl

如何從 Linux 中的證書鏈中提取根 CA 和從屬 CA?

  • October 29, 2021

我有一個具有中間證書和根證書的終端實體/伺服器證書。當我cat在最終實體證書上時,我只看到一個BEGINEND標籤。它是唯一的最終實體證書。

有什麼方法可以查看中間證書和根證書內容。我只需要BEGINEND標籤的內容。

在 Windows 中,我可以從“證書路徑”中看到完整的證書鏈。下面是 Stack Exchange 證書的範例。

在此處輸入圖像描述

從那裡我可以執行查看證書並導出它們。我可以為 Windows 中的 root 和中級執行此操作。我正在 Linux 中尋找同樣的方法。

在此處輸入圖像描述

從網站上,您可以執行以下操作:

openssl s_client -showcerts -verify 5 -connect stackexchange.com:443 < /dev/null

這將顯示證書鍊和伺服器提供的所有證書。

現在,如果我將這兩個證書保存到文件中,我可以使用openssl verify

$ openssl verify -show_chain -untrusted dc-sha2.crt se.crt 
se.crt: OK
Chain:
depth=0: C = US, ST = NY, L = New York, O = "Stack Exchange, Inc.", CN = *.stackexchange.com (untrusted)
depth=1: C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 High Assurance Server CA (untrusted)
depth=2: C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA

-untrusted選項用於提供中間證書;se.crt是要驗證的證書。depth=2 結果來自系統信任的 CA 儲存。

如果您沒有中間證書,則無法執行驗證。這就是 X.509 的工作原理。

根據證書,它可能包含從中獲取中間體的 URI。例如,openssl x509 -in se.crt -noout -text包含:

       Authority Information Access: 
           OCSP - URI:http://ocsp.digicert.com
           CA Issuers - URI:http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt

該“CA 頒發者”URI 指向中間證書(以 DER 格式,因此您需要使用openssl x509 -inform der -in DigiCertSHA2HighAssuranceServerCA.crt -out DigiCertSHA2HighAssuranceServerCA.pem它來轉換它以供 OpenSSL 進一步使用)。

如果你執行openssl x509 -in /tmp/DigiCertSHA2HighAssuranceServerCA.pem -noout -issuer_hash你得到244b5494,你可以在系統根 CA 儲存中查找它/etc/ssl/certs/244b5494.0(只需附加.0到名稱)。

我認為沒有一個很好、簡單的 OpenSSL 命令可以為您完成所有這些工作。

引用自:https://unix.stackexchange.com/questions/368123