次の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サーバーの証明書はTURKTRUSTではなくDeutsche Telekom CAによって認証されているため、上記のコマンドは失敗するはずです。
しかし、それは報告します:
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
(これも予想されます)
cas-certificates.crtのopenssl s_clientプリント:
Verify return code: 0 (ok)
TURKTRUSTと同じ結果...
最初に私はのためのデフォルト設定を使用してOpenSSLを疑われる-CApath
(つまりは/ etc / sslの/ certsの) -私はときstrace
、プロセスは、私はちょうどちょうど参照open
の引数のシステムコールをCAfile
。
(Ubuntu 10.04サーバーで行われたすべてのテスト)
更新: TURKTRUST証明書をFedora 20システムにコピーし、最初のopensslステートメントを実行しました-別の結果が得られます:
Verify return code: 19 (self signed certificate in certificate chain)