openssl s_client
Böyle bir sertifika doğrulama hatası vermeye çalışıyorum :
$ 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
Web.de sunucusunun sertifikası TÜRKTRUST tarafından değil Deutsche Telekom CA tarafından onaylanmıştır, bu nedenle yukarıdaki komut başarısız olmalıdır, değil mi?
Ancak rapor ediyor:
Verify return code: 0 (ok)
Neden?
Yani analog gnutls-cli komutu beklendiği gibi başarısız oluyor:
$ { 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...
Bir çapraz kontrol yapmak, yani bunun yerine --x509cafile /etc/ssl/certs/ca-certificates.crt
gnutls-cli kullanarak :
[..]
- The hostname in the certificate matches 'mx-ha03.web.de'.
- Peer's certificate is trusted
(bu da bekleniyor)
Ca-certificate.crt için openssl s_client baskılar.
Verify return code: 0 (ok)
TÜRKTRUST ile aynı sonuç ...
Öncelikle -CApath
(örn. / Etc / ssl / certs) - için varsayılan bir ayar kullanarak openssl şüphelendim - ama ben strace
işlem sırasında sadece open
argüman için sadece syscall bakın CAfile
.
(tüm testler bir Ubuntu 10.04 sunucusunda yapılır)
Güncelleme: TÜRKTRUST sertifikasını bir Fedora 20 sistemine kopyaladım ve ilk openssl bildirimini yürüttüm - farklı bir sonuç elde ediyorum:
Verify return code: 19 (self signed certificate in certificate chain)