Từ một trang web, bạn có thể làm:
openssl s_client -showcerts -verify 5 -connect stackexchange.com:443 < /dev/null
Điều đó sẽ hiển thị chuỗi chứng chỉ và tất cả các chứng chỉ mà máy chủ đã trình bày.
Bây giờ, nếu tôi lưu hai chứng chỉ đó vào tệp, tôi có thể sử dụng 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
Các -untrustedtùy chọn được sử dụng để cung cấp cho các chứng chỉ trung gian (s); se.crtlà giấy chứng nhận để xác minh. Độ sâu = 2 kết quả đến từ cửa hàng CA đáng tin cậy của hệ thống.
Nếu bạn không có (các) chứng chỉ trung gian, bạn không thể thực hiện xác minh. Đó chỉ là cách X.509 hoạt động.
Tùy thuộc vào chứng chỉ, nó có thể chứa URI để lấy trung gian. Ví dụ, openssl x509 -in se.crt -noout -textchứa:
Authority Information Access:
OCSP - URI:http://ocsp.digicert.com
CA Issuers - URI:http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt
URI "Nhà phát hành CA" đó trỏ đến chứng chỉ trung gian (ở định dạng DER, vì vậy bạn cần sử dụng openssl x509 -inform der -in DigiCertSHA2HighAssuranceServerCA.crt -out DigiCertSHA2HighAssuranceServerCA.pem để chuyển đổi nó để sử dụng thêm bởi OpenSSL).
Nếu bạn chạy openssl x509 -in /tmp/DigiCertSHA2HighAssuranceServerCA.pem -noout -issuer_hashbạn nhận được 244b5494, cái mà bạn có thể tìm kiếm trong cửa hàng CA gốc của hệ thống tại /etc/ssl/certs/244b5494.0(chỉ cần thêm .0vào tên).
Tôi không nghĩ rằng có một lệnh OpenSSL dễ dàng, tốt đẹp để làm tất cả điều đó cho bạn.