Как обновить пакет cURL CA на RedHat?

38

Я сталкиваюсь с проблемами, когда пакет 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?

Эндрю
источник

Ответы:

50

Для 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.

Нада
источник
Это хорошо, но как я могу быть уверен, что добавленный сертификат не будет утерян при следующем обновлении ca-bundle.crt? Есть ли место, где я могу поставить новый, где он будет автоматически включен?
Эндрю Шульман
Начиная с 2006 года, обновления openssl не должны заменять файл ca-bundle.crt (см. Rhn.redhat.com/errata/RHSA-2006-0661.html ). Однако, если у вас установлен другой пакет, например, пакет ca-Certificates, рекомендованный @mgorven, то я ожидаю, что он будет перезаписан вручную.
Нада
36

Рекомендуемый способ сделать это в системах 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

lzap
источник
Привет, у тебя это работает? Я просто попытался следовать сценарию с access.redhat.com/solutions/1549003, и он не работает для меня.
Кирби
6

RHEL предоставляет сертификаты Mozilla CA как часть ca-certificatesпакета (установите его, yumесли он еще не установлен). Чтобы сказать cURL использовать их, используйте --cacertпараметр следующим образом.

curl --cacert /etc/ssl/certs/ca-bundle.crt https://google.com/
mgorven
источник
Я попытался yum install ca-certificatesи получилNo package ca-certificates available
Андрей
1
RHEL6 имеет этот пакет; Я предполагаю, что вы используете старую версию. К сожалению, список не изменился с 2010 года, спасибо, что держали нас в курсе Redhat.
Дэн Притц
Я использую RHEL7 в AWS EC2, я просто обновил свой пакет до ca-certificates.noarch 0:2014.1.98-70.0.el7_0- это, к сожалению, не решило мою проблему, но просто подумал, что добавлю эту информацию.
DuffJ
6

Вероятно, зависит, какая версия Redhat. Вы можете найти, какой пакет на самом деле обновляет файл, выполнив:

rpm -qf /etc/pki/tls/certs/ca-bundle.crt

Мой результат показал, что openssl-0.9.8e-12.el5 необходимо обновить.

Если в вашем дистрибутиве нет обновленных сертификатов, вы должны обновить вручную, согласно ответу Nada.

Пик Мастер
источник
6

После комментария Дэна Притса 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-Certificates. В 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, не будет соответствовать добавленному сертификату.

Адам Уильямсон
источник
3

Я просто должен был сделать это на старой коробке RHEL5. Я нажал на уловку 22 ... curl отклонил бы загрузку https, потому что сертификаты на машине были слишком старыми для проверки сертификатов curl.haxx.se.

Я использовал параметр --insecure для curl, чтобы принудительно загрузить https. (Да, я знаю ... это "небезопасно".)

curl https://curl.haxx.se/ca/cacert.pem --insecure -o /etc/pki/tls/certs/ca-bundle.crt

Леонард
источник
1

В RHEL 6 я смог это исправить, обновив и переустановив последний пакет сертификатов CA от Red Hat:

sudo yum update ca-certificates
sudo yum reinstall ca-certificates

(В моем случае этого было достаточно, чтобы позволить более новому сертификату подписи «Let's Encrypt Authority X3»).

Джереми
источник
Команда сработала для меня (CentOS 6), но не решила мою проблему (с сертификатом, выданным «DigiCert SHA2 Secure Server CA»)
Риного