Рейтинг:0

Ошибка Curl «Эмитент однорангового сертификата не распознан» при попытке установить связь между двумя серверами

флаг ca

у меня два сервера А и Б на которых размещаются веб-сайты, которые отлично работают в браузере с https. Значок замка в браузерах показывает активные и доверенные сертификаты SSL.

Я пытаюсь запустить curl, чтобы сервер А может говорить с сервером Б, но я сталкиваюсь с ошибкой.

- Сервер А -
$ завиток https://dev.partsvu.com
CA-файл: /etc/pki/tls/certs/ca-bundle.crt
curl: (60) Эмитент Peer's Certificate не распознан.

Я провел некоторое исследование на сайтах Stack Overflow и столкнулся со многими вопросами, однако их решения не сработали для меня.

Сначала я попытался загрузить файлы сертификатов для сервера Б из отчета SSL Labs и вручную добавил список сертификатов в /etc/pki/tls/certs/ca-bundle.crt файл на сервере А но я все еще получаю ту же ошибку.

Я также убедился, что сервер Б сертификат действителен со следующим:

- Сервер Б -
openssl x509 -dates -noout < /etc/pki/tls/certs/cloudflare.pem
notBefore=6 мая 21:25:00 2022 по Гринвичу
notAfter=2 мая 21:25:00 20:37 по Гринвичу

Я также пытался скопировать содержимое /etc/pki/tls/сертификаты/cloudflare.pem на сервере Б непосредственно к /etc/pki/tls/certs/ca-bundle.crt на сервере А но такая же ошибка.

Наконец, я попытался посетить сервер Б в Chrome и загрузил файл crt, который он показывает в https://cacerts.digicert.com/CloudflareIncECCCA-3.crt, преобразовал его в pem с помощью:

openssl x509 -inform DES -in CloudflareIncECCCA-3.crt -outoutcert.pem

и добавил это к тому же ca-bundle.crt файл на сервере А.

Та же ошибка при попытке запустить curl.

Вот цепочка сертификатов от Chrome:

введите описание изображения здесь

Binky avatar
флаг de
Команда `$ curl https://.com` проблематично. Является ли «адрес сервера B» IP-адресом или меткой DNS в разделе «.com»? Пожалуйста, опубликуйте фактическую команду и ошибку. Если это IP-адреса, команда завершается ошибкой, потому что серверу требуется информация о том, какой сертификат отправить, исходя из части URL-адреса, которая присутствует после схемы («https://») и до начала пути (« /"). Идентификационные данные сертификатов обычно представляют собой DNS-имена, а не IP-адреса. Пожалуйста, опубликуйте сертификат сервера B в форме PEM со снимком экрана цепочки сертификатов, отображаемой браузером при просмотре сервера B.
Binky avatar
флаг de
Кроме того, когда вы говорите: «Я также убедился, что сертификат сервера B действителен…», даты действия показывают, что это не сертификат сервера, если только вы не выдали сертификат из частной PKI, а не с помощью общедоступного центра сертификации. Сертификаты сервера от общедоступного ЦС не могут быть действительны более года. Таким образом, у вас либо 1) неправильный сертификат в этом файле, либо 2) несколько сертификатов, а даты notBefore/After, вероятно, принадлежат корневому сертификату.
dave_thompson_085 avatar
флаг jp
Введите `curl -V` (в верхнем регистре), чтобы узнать, какое промежуточное ПО использует ваш curl; вы, вероятно, обнаружите, что это NSS (НЕ OpenSSL), что означает, что он НЕ использует /etc/pki/tls/certs/ca-bundle.crt (_or_ ca-bundle.trust.crt). Вот почему в RH/CentOS/etc есть `update-ca-trust`, чтобы _правильно_ обновлять несколько хранилищ доверия, а не заставлять неосведомленных пользователей делать это вручную. Также обратите внимание, что работа браузера не является доказательством того, что ваш сервер в порядке, потому что браузер обычно может работать с отсутствующими сертификатами цепочки, в то время как `curl` обычно не может, но если бы у вас была эта проблема, SSLLabs сказал бы об этом.
Timothy Fisher avatar
флаг ca
@Binky Я обновил команду с фактическим доменным именем, а также скриншот цепочки сертификатов. И да, вы правы, что сертификат по срокам действия является корневым сертификатом, а не тем, который отображается в браузере. Мы используем Cloudflare. В Cloudflare есть пограничный сертификат, а затем еще один, который используется HAProxy для привязки к порту 443.
флаг in
Какую версию CentOS вы используете? Обновлены ли установленные пакеты?
Timothy Fisher avatar
флаг ca
@dave_thompson_085 Я думаю, что вы правы насчет NSS.когда я запускаю его с `-V`, я получаю `curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.53.1 zlib/1.2.7 libidn/1.28 libssh2/1.8.0`, и запуск `-v` показывает `* Инициализация NSS с помощью certpath: sql:/etc/pki/nssdb`
Timothy Fisher avatar
флаг ca
@GeraldSchneider CentOS Linux, выпуск 7.9.2009 (основной). Я убедился, что пакет ca-certificates обновлен.
флаг in
На стандартной CentOS 7.9 я могу без проблем подключиться к https://dev.partsvu.com с помощью curl.
Timothy Fisher avatar
флаг ca
@GeraldSchneider Я тоже смог это сделать, когда использовал curl на своей локальной машине. Но когда я пытаюсь с определенного сервера, я получаю нераспознанную ошибку. Интересно, где я могу начать устранение неполадок.
флаг in
Вы пробовали просто запустить `yum reinstall ca-certificates`?
Timothy Fisher avatar
флаг ca
Да, я выполнил это, а также последовал этому, чтобы попытаться вернуть все в состояние по умолчанию: https://access.redhat.com/solutions/1549003
флаг in
Ну, это довольно бесплодно. Без какого-либо способа узнать, что вы на самом деле сделали и в каком состоянии находится ваша система, на самом деле нет никакого способа помочь вам. Если бы мой сервер был в таком состоянии, я бы просто переустановил его.
Binky avatar
флаг de
@TimothyFisher Можете ли вы опубликовать вывод команд: 1) sudo ls -l /etc/pki/nssdb и 2) sudo certutil -L -d sql:/etc/pki/nssdb? У последнего может быть много продукции; если это так, направьте вывод в grep и найдите «Baltimore CyberTrust Root».

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.