Я сталкиваюсь с проблемами, когда пакет CA, который был связан с моей версией cURL, устарел.
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
Чтение документации мне не помогло, потому что я не понимал, что мне нужно делать и как это делать. Я использую RedHat, и мне нужно обновить пакет CA. Что мне нужно сделать, чтобы обновить мой пакет CA в RedHat?
Для RHEL 6 или новее, вы должны использовать update-ca-trust, как lzap описывает в своем ответе ниже.
--- Для более старых версий Fedora, CentOS, Redhat:
Curl использует системный пакет CA по умолчанию, который хранится в /etc/pki/tls/certs/ca-bundle.crt. Перед тем, как изменить его, сделайте копию этого файла, чтобы при необходимости можно было восстановить систему по умолчанию. Вы можете просто добавить новые сертификаты CA к этому файлу или заменить весь пакет.
Вам тоже интересно, где взять сертификаты? Я (и другие) рекомендую curl.haxx.se/ca. В одной строке:
curl https://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt
Расположение Fedora Core 2: /usr/share/ssl/certs/ca-bundle.crt
.
Рекомендуемый способ сделать это в системах RHEL 6+ - использовать update-ca-trust инструмент, который теперь установлен по умолчанию.
# cat /etc/pki/ca-trust/source/README
This directory /etc/pki/ca-trust/source/ contains CA certificates and
trust settings in the PEM file format. The trust settings found here will be
interpreted with a high priority - higher than the ones found in
/usr/share/pki/ca-trust-source/.
=============================================================================
QUICK HELP: To add a certificate in the simple PEM or DER file formats to the
list of CAs trusted on the system:
Copy it to the
/etc/pki/ca-trust/source/anchors/
subdirectory, and run the
update-ca-trust
command.
If your certificate is in the extended BEGIN TRUSTED file format,
then place it into the main source/ directory instead.
=============================================================================
Please refer to the update-ca-trust(8) manual page for additional information
Поэтому вам нужно только перетащить ваш crt-файл в /etc/pki/ca-trust/source/anchors/
и запустить инструмент. Работа сделана. Это безопасно, делать резервные копии не нужно. Полную страницу руководства можно найти здесь: https://www.mankier.com/8/update-ca-trust
Наверное, зависит от того, какая версия Redhat. Вы можете узнать, какой пакет действительно обновляет файл, выполнив:
rpm -qf /etc/pki/tls/certs/ca-bundle.crt
Мой результат показал, что openssl-0.9.8e-12.el5 необходимо обновить.
Если в вашем дистрибутиве нет обновленных сертификатов, вам нужно обновить вручную, согласно ответу Nada.
RHEL предоставляет сертификаты CA Mozilla как часть ca-certificates
пакет (установите это с помощью yum
если он еще не установлен). Чтобы указать cURL использовать их, используйте --cacert
параметр вроде так.
curl --cacert /etc/ssl/certs/ca-bundle.crt https://google.com/
После комментария Дэна Притса Red Hat стала чаще обновлять пакеты сертификатов для поддерживаемых выпусков RHEL; вы можете легко увидеть это в журнале изменений пакета. Сертификаты RHEL 6 обновлялись дважды в 2013 году и дважды в 2014 году.
Все RHEL и связанные / clone / производные дистрибутивы предоставляют файл пакета по адресу /etc/pki/tls/certs/ca-bundle.crt
, и тот же файл по адресу /etc/pki/tls/cert.pem
(на старых дистрибутивах cert.pem
символическая ссылка на ca-bundle.crt
; в новых дистрибутивах оба являются символическими ссылками на файл, выводимый update-ca-trust
).
В RHEL 6 и новее пакет является частью пакета ca-сертификатов. В RHEL 5 и более ранних версиях он является частью пакета openssl.
В RHEL 6 с обновлением https://rhn.redhat.com/errata/RHEA-2013-1596.html и любой более новой версии RHEL доступна система общих системных сертификатов (вы должны запустить update-ca-trust enable
чтобы включить его), а лучший способ - это lzap. Преимущество этой системы в том, что она работает как с приложениями на базе NSS и GnuTLS, так и с приложениями на основе OpenSSL. Обратите внимание, что вы также можете не доверять сертификату, поместив его в каталог /etc/pki/ca-trust/source/blacklist/
.
В RHEL 5 и старше (и RHEL 6, если вы не хотите использовать новую систему) вы можете доверять дополнительным центрам сертификации, разместив их файлы сертификатов в формате PEM. с расширением .pem
в / etc / pki / tls / certs и работает c_rehash
(также может понадобиться yum install /usr/bin/c_rehash
). Это будет работать только для программного обеспечения, которое использует хранилища доверенных сертификатов OpenSSL по умолчанию. Это лучше, чем редактирование или замена файла пакета, потому что это позволяет вам продолжать получать официальные обновления файла пакета.
Программное обеспечение, которое напрямую использует одно из расположений файлов пакета (вместо того, чтобы запрашивать OpenSSL использовать системные хранилища доверенных сертификатов по умолчанию), не будет учитывать это изменение; если у вас есть такое программное обеспечение, вы застряли, редактируя файл пакета (или улучшая программное обеспечение). Программное обеспечение, которое вообще не использует OpenSSL, не будет уважать добавленный сертификат.
Мне просто нужно было сделать это на старой коробке RHEL5. Я нажал на уловку 22 ... curl отклонил бы загрузку https, потому что сертификаты на машине были слишком старыми для проверки сертификатов curl.haxx.se.
Я использовал параметр curl --insecure для принудительной загрузки https. (Да, я знаю ... это "небезопасно".)
завиток https://curl.haxx.se/ca/cacert.pem --insecure -o /etc/pki/tls/certs/ca-bundle.crt
Для RHEL 6, Я смог исправить это, обновив и переустановив последний пакет сертификатов CA от Red Hat:
sudo yum update ca-certificates
sudo yum reinstall ca-certificates
(В моем случае этого было достаточно, чтобы можно было доверять новому сертификату подписи «Let’s Encrypt Authority X3».)