2013-07-11 3 views
16

Я скопировал файл 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: сертификат не удалось». Это происходит, даже если я использую параметр -cacert curl, как описано в http://curl.haxx.se/docs/sslcerts.html, чтобы сообщить, какой сертификат использовать.Почему скручивание не распознается самоподписанным сертификатом SSL?

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

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

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

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

ответ

14

Когда мы используем 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, и оно должно работать сейчас.

Source