Sto cercando di generare un errore di verifica del certificato in openssl s_client
questo modo:
$ 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
Il certificato del server web.de è certificato dalla Deutsche Telekom CA, non da TURKTRUST, quindi il comando sopra dovrebbe fallire, giusto?
Ma riporta:
Verify return code: 0 (ok)
Perché?
Voglio dire che un comando analogico gnutls-cli fallisce come previsto:
$ { 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...
Facendo un controllo incrociato, cioè usando invece --x509cafile /etc/ssl/certs/ca-certificates.crt
con gnutls-cli ottengo:
[..]
- The hostname in the certificate matches 'mx-ha03.web.de'.
- Peer's certificate is trusted
(che è anche previsto)
Openssl s_client stampe per ca-certificati.crt:
Verify return code: 0 (ok)
Lo stesso risultato di TURKTRUST ...
Per prima cosa sospettavo che openssl usasse un'impostazione predefinita per -CApath
(es. / Etc / ssl / certs) - ma quando ho strace
il processo vedo solo la open
syscall per l'argomento di CAfile
.
(tutti i test eseguiti su un server Ubuntu 10.04)
Aggiornamento: ho copiato il certificato TURKTRUST su un sistema Fedora 20 ed eseguito la prima istruzione openssl - lì ottengo un risultato diverso:
Verify return code: 19 (self signed certificate in certificate chain)