จากเว็บไซต์คุณสามารถทำได้:
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
ตัวเลือกที่จะใช้ในการให้ใบรับรองระดับกลาง (s); 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
URI "CA Issuers" นั้นชี้ไปที่ใบรับรองระดับกลาง (ในรูปแบบ DER ดังนั้นคุณต้องใช้openssl x509 -inform der -in DigiCertSHA2HighAssuranceServerCA.crt -out DigiCertSHA2HighAssuranceServerCA.pem
เพื่อแปลงเพื่อใช้งานต่อไปโดย OpenSSL)
หากคุณเรียกใช้openssl x509 -in /tmp/DigiCertSHA2HighAssuranceServerCA.pem -noout -issuer_hash
คุณจะได้รับ244b5494
ซึ่งคุณสามารถค้นหาได้ในที่เก็บ root ของระบบ CA ที่/etc/ssl/certs/244b5494.0
(เพียงต่อท้าย.0
ชื่อ)
ฉันไม่คิดว่าจะมีคำสั่ง OpenSSL ที่ดีและง่ายต่อการทำสิ่งนั้นเพื่อคุณ