Ich versuche, einen Zertifikatüberprüfungsfehler openssl s_client
wie folgt zu erhalten:
$ 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
Das Zertifikat des web.de-Servers ist von der Deutschen Telekom CA zertifiziert, nicht von TURKTRUST. Daher sollte der obige Befehl fehlschlagen, oder?
Aber es berichtet:
Verify return code: 0 (ok)
Warum?
Ich meine, ein analoger gnutls-cli-Befehl schlägt wie erwartet fehl:
$ { 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...
Wenn --x509cafile /etc/ssl/certs/ca-certificates.crt
ich einen Crosscheck mache, dh stattdessen mit gnutls-cli benutze, bekomme ich:
[..]
- The hostname in the certificate matches 'mx-ha03.web.de'.
- Peer's certificate is trusted
(was auch erwartet wird)
Openssl s_client druckt für ca-certificates.crt:
Verify return code: 0 (ok)
Das gleiche Ergebnis wie für TURKTRUST ...
Zuerst vermutete ich openssl mit einer Standardeinstellung für -CApath
(dh / etc / ssl / certs) - aber wenn ich strace
den Prozess durchführe, sehe ich nur den open
Syscall für das Argument von CAfile
.
(alle Tests auf einem Ubuntu 10.04 Server durchgeführt)
Update: Ich habe das TURKTRUST-Zertifikat auf ein Fedora 20-System kopiert und die erste openssl-Anweisung ausgeführt - dort erhalte ich ein anderes Ergebnis:
Verify return code: 19 (self signed certificate in certificate chain)