Почему скручивание не признает самоподписанный сертификат SSL?

Я скопировал файл PEM в/usr/local/share/ca-certificates/и выполнил обновления-ca-сертификаты, и я подтвердил, что полученный сертификат теперь включен в /etc/ssl/certs/ca -certificates. crt, который является файлом, напечатанным curl-config -ca. Я также подтвердил, что сертификат, напечатанный openssl s_client -connect example.com:443, был идентичен моему файлу PEM. И все же я продолжаю получать сообщение об ошибке "Ошибка: 14090086: SSL: сообщение SSL3_GET_SERVER_CERTIFICATE: сертификат не удалось". Это происходит, даже если я использую параметр curl --cacert, как описано в http://curl.haxx.se/docs/sslcerts.html, чтобы указать, какой сертификат использовать.

Он работает, если я полностью отключу проверку сертификата с помощью curl -k, но я не хочу этого делать, потому что я пытаюсь написать тестовый жгут, который должен правильно проверить SSL.

Он отлично работает, если я получаю тот же URL-адрес в lynx, который обычно жалуется на наличие ошибок SSL. Но я не могу просто использовать Lynx для этой тестовой жгуты, если только не могу найти способ заставить Tornado AsyncHTTPClient использовать Lynx вместо libcurl. И, похоже, не имеет никакого смысла, что установка самоподписанного сертификата удовлетворяет Lynx, но не завитка.

Я использую Ubuntu 12.04 LTS в VirtualBox с поддержкой Vagrant; он имеет завиток 7.22.0. Прокси-сервер, завершающий SSL, - это nginx/1.3.13, запущенный на том же компьютере, и имя домена указывается на 127.0.0.1 записью в /etc/hosts.

Любые подсказки о том, что может быть проблемой? Спасибо.

Ответы

Ответ 1

Когда мы используем cURL для извлечения сайта HTTPS, который не использует сертификат с сертификатом CA, возникает следующая проблема.

curl https://example.selfip.com
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

Конечно, это можно просто преодолеть, используя опцию -k.

Решение:

Шаг 1
Определите, какой каталог использует ваша установка OpenSSL.

[email protected]:~# openssl version -d
OPENSSLDIR: "/usr/lib/ssl"

Шаг 2
Перейдите в этот каталог и перечислите содержимое каталога. Вы должны увидеть каталог под названием "certs".

[email protected]:~# cd /usr/lib/ssl && ls -al

Шаг 3
Перейдите в этот каталог.

[email protected]:/usr/lib/ssl# cd certs

Перечислите содержимое каталога. Вы должны видеть из символических ссылок, что сертификаты фактически хранятся в /usr/share/ca-certificates.

Шаг 4
Перейдите в каталог /usr/share/ca-certificates и добавьте там самозаверяющий сертификат (например: your.cert.name.crt)

Шаг 5
Перейдите в каталог /etc и отредактируйте файл ca-certificates.conf.

[email protected]:# cd /etc
[email protected]:# nano ca-certificates.conf

Добавьте your.cert.name.crt в файл (ca-certificates.conf) и сохраните его.

Последний шаг:

Выполнить программу update-ca-certificates –fresh.
Примечание. Перед выполнением команды вам может потребоваться резервное копирование /etc/ssl/certs.

[email protected]:# update-ca-certificates --fresh
Clearing symlinks in /etc/ssl/certs...done.
Updating certificates in /etc/ssl/certs....done.
Running hooks in /etc/ca-certificates/update.d....done.

Тест с завихрением на вашем целевом сайте HTTPS, и он должен работать сейчас.

Источник