Tôi đang cố gắng đưa ra một lỗi xác minh chứng chỉ openssl s_client
như thế này:
$ openssl s_client -crlf -verify 9 \
-CAfile /etc/ssl/certs/TURKTRUST_Certificate_Services_Provider_Root_1.pem \
-starttls smtp -host mx-ha03.web.de -port 25
Chứng chỉ của máy chủ web.de được chứng nhận bởi Deutsche Telekom CA, không phải TURKTRUST, do đó lệnh trên sẽ thất bại, phải không?
Nhưng nó báo cáo:
Verify return code: 0 (ok)
Tại sao?
Tôi có nghĩa là một lệnh gnutls-cli tương tự thất bại như mong đợi:
$ { echo -e 'ehlo example.org\nstarttls' ; sleep 1 } | \
gnutls-cli --starttls --crlf \
--x509cafile /etc/ssl/certs/TURKTRUST_Certificate_Services_Provider_Root_1.pem \
--port 25 mx-ha03.web.de
[..]
*** Verifying server certificate failed...
Thực hiện kiểm tra chéo, tức là sử dụng thay vì --x509cafile /etc/ssl/certs/ca-certificates.crt
bằng gnutls-cli tôi nhận được:
[..]
- The hostname in the certificate matches 'mx-ha03.web.de'.
- Peer's certificate is trusted
(cũng được dự kiến)
In Openssl s_client cho ca-cert.crt:
Verify return code: 0 (ok)
Kết quả tương tự như đối với TURKTRUST ...
Đầu tiên tôi nghi ngờ openssl bằng cách sử dụng cài đặt mặc định cho -CApath
(tức là / etc / ssl / certs) - nhưng khi tôi strace
xử lý, tôi chỉ thấy tòa open
nhà của đối số CAfile
.
(tất cả các thử nghiệm được thực hiện trên máy chủ Ubuntu 10.04)
Cập nhật: Tôi đã sao chép chứng chỉ TURKTRUST sang hệ thống Fedora 20 và thực hiện câu lệnh openssl đầu tiên - ở đó tôi nhận được một kết quả khác:
Verify return code: 19 (self signed certificate in certificate chain)