मैं openssl s_client
इस तरह से एक प्रमाणपत्र सत्यापन त्रुटि प्राप्त करने की कोशिश कर रहा हूं :
$ 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 सर्वर का प्रमाण पत्र ड्यूश टेलीकॉम CA द्वारा प्रमाणित है, न कि TURKTRUST, इस प्रकार उपरोक्त कमांड विफल होना चाहिए, है ना?
लेकिन यह रिपोर्ट करता है:
Verify return code: 0 (ok)
क्यों?
मेरा मतलब है कि एक एनालॉग गटरल्स-सीएलआई कमांड उम्मीद के मुताबिक विफल है:
$ { 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...
एक --x509cafile /etc/ssl/certs/ca-certificates.crt
क्रॉसचेक कर रहा है, यानी कि मुझे मिल जाने वाले गिटर-क्ली के बजाय का उपयोग कर रहा है:
[..]
- The hostname in the certificate matches 'mx-ha03.web.de'.
- Peer's certificate is trusted
(जो अपेक्षित भी है)
ऑप-सर्टिफिकेट के लिए Openssl s_client प्रिंट।
Verify return code: 0 (ok)
TURKTRUST के समान परिणाम ...
पहले मुझे शक है कि -CApath
(यानी / etc / ssl / certs) के लिए एक डिफ़ॉल्ट सेटिंग का उपयोग करके - लेकिन जब मैं strace
इस प्रक्रिया को सिर्फ open
तर्क के लिए सिर्फ syscall देखता हूं CAfile
।
(सभी परीक्षण Ubuntu 10.04 सर्वर पर किए गए)
अद्यतन: मैंने एक Fedora 20 सिस्टम के लिए TURKTRUST प्रमाणपत्र की प्रतिलिपि बनाई है और पहले खुलने वाले कथन को निष्पादित किया है - वहां मुझे एक अलग परिणाम मिलता है:
Verify return code: 19 (self signed certificate in certificate chain)