如何從 Linux 中的證書鏈中提取根 CA 和從屬 CA?
我有一個具有中間證書和根證書的終端實體/伺服器證書。當我
cat
在最終實體證書上時,我只看到一個BEGIN
和END
標籤。它是唯一的最終實體證書。有什麼方法可以查看中間證書和根證書內容。我只需要
BEGIN
和END
標籤的內容。在 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 命令可以為您完成所有這些工作。