J'essaye de produire une erreur de vérification de certificat avec openssl s_client
comme ceci:
$ 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
Le certificat du serveur web.de est certifié par la Deutsche Telekom CA, pas TURKTRUST, donc la commande ci-dessus devrait échouer, non?
Mais il rapporte:
Verify return code: 0 (ok)
Pourquoi?
Je veux dire qu'une commande analogique gnutls-cli échoue comme prévu:
$ { 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...
Faire un recoupement, c'est à dire utiliser à la place --x509cafile /etc/ssl/certs/ca-certificates.crt
avec gnutls-cli j'obtiens:
[..]
- The hostname in the certificate matches 'mx-ha03.web.de'.
- Peer's certificate is trusted
(ce qui est également prévu)
Openssl s_client imprime pour ca-certificats.crt:
Verify return code: 0 (ok)
Le même résultat que pour TURKTRUST ...
J'ai d'abord suspecté openssl en utilisant un paramètre par défaut pour -CApath
(ie / etc / ssl / certs) - mais quand je strace
le processus, je vois juste le open
syscall pour l'argument de CAfile
.
(tous les tests effectués sur un serveur Ubuntu 10.04)
Mise à jour: j'ai copié le certificat TURKTRUST sur un système Fedora 20 et exécuté la première instruction openssl - là, j'obtiens un résultat différent:
Verify return code: 19 (self signed certificate in certificate chain)