Saya mencoba membuat kesalahan verifikasi sertifikat dengan openssl s_client
seperti ini:
$ 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
Sertifikat server web.de disertifikasi oleh Deutsche Telekom CA, bukan TURKTRUST, sehingga perintah di atas gagal, kan?
Tapi itu melaporkan:
Verify return code: 0 (ok)
Mengapa?
Maksud saya perintah gnutls-cli analog gagal seperti yang diharapkan:
$ { 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...
Melakukan crosscheck, yaitu menggunakan --x509cafile /etc/ssl/certs/ca-certificates.crt
gnutls-cli sebagai gantinya :
[..]
- The hostname in the certificate matches 'mx-ha03.web.de'.
- Peer's certificate is trusted
(yang juga diharapkan)
Openssl s_client mencetak untuk ca-Certificate.crt:
Verify return code: 0 (ok)
Hasil yang sama seperti untuk TURKTRUST ...
Pertama saya curiga openssl menggunakan pengaturan default untuk -CApath
(yaitu / etc / ssl / certs) - tetapi ketika saya strace
prosesnya saya hanya melihat open
syscall untuk argumen dari CAfile
.
(semua tes dilakukan pada server Ubuntu 10.04)
Pembaruan: Saya telah menyalin sertifikat TURKTRUST ke sistem Fedora 20 dan menjalankan pernyataan openssl pertama - di sana saya mendapatkan hasil yang berbeda:
Verify return code: 19 (self signed certificate in certificate chain)