Я намагаюся отримати помилку підтвердження сертифікату з 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 Deutsche Telekom 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
(що також очікується)
Відкриває s_client друкує для сертифікатів ca.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)