我正在尝试产生证书验证错误,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)
为什么?
我的意思是模拟gnutls-cli命令按预期失败:
$ { 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
gnutls-cli 代替我得到:
[..]
- The hostname in the certificate matches 'mx-ha03.web.de'.
- Peer's certificate is trusted
(这也是预期的)
Openssl s_client打印ca-certificates.crt:
Verify return code: 0 (ok)
与TURKTRUST的结果相同...
首先,我怀疑openssl使用的默认设置是-CApath
(即/ etc / ssl / certs)-但是当我执行strace
该过程时,我只看到open
syscall作为参数CAfile
。
(所有测试均在Ubuntu 10.04服务器上完成)
更新:我已经将TURKTRUST证书复制到Fedora 20系统并执行了第一个openssl语句-在那里我得到了不同的结果:
Verify return code: 19 (self signed certificate in certificate chain)