Назад | Перейти на главную страницу

OpenSSL продолжает говорить мне, что не удалось получить сертификат местного эмитента

Я использую CentOS, в которой установлен OpenSSL 1.0.2k-fips, и я собрал и установил версию 1.1.0g вместе с ней как часть установки HTTP2, описанной здесь: https://www.tunetheweb.com/performance/http2/

Я использовал штраф 1.1.0g, но недавно я обновил сертификаты, и теперь он кажется потерянным при попытке проверить ЦС. Местоположение CA-файла не изменилось, версия 1.0.2k-fips вроде бы с ней справляется, но 1.1.0g не проходит через жалобы:

Verify return code: 20 (unable to get local issuer certificate)

Итак, я проверил, что сертификаты в порядке, местоположение не изменилось, я не менял вручную никакую конфигурацию.

Я подумал, что, возможно, мне стоит пересобрать 1.1.0g, но это ничего не меняет. Я также пробовал использовать -CApath вариант для openssl команда, например (используя тот же каталог, что и 1.0.2k-fips):

echo | /usr/local/ssl/bin/openssl s_client -connect example.com:443 -CApath /etc/pki/tls

Я тоже пробовал -CAfile, прямо указывая на ca-bundle.crt который, как я знаю, имеет правильные сертификаты (1.0.2k-fips использует их без проблем), все еще без изменений.

Я не понимаю, почему он не забирает мои сертификаты, и задаюсь вопросом, могла ли эта проблема существовать до того, как я изменил сертификаты (я проверил, работали ли они после их изменения, возможно, 1.1.0g уже был сломан в этот момент).

Я думаю, это может быть связано с обновлениями, выполненными в системе, нарушением какой-то ссылки или файла, но где смотреть, когда все сертификаты выглядят нормально? Или в 1.1.0g отсутствуют какие-то другие / дополнительные сертификаты, на которые мне нужно указать?

Вы можете заставить s_client показать вам цепочку сертификатов с помощью -showcerts:

openssl s_client -connect example.com:443 -showcerts </dev/null

Это начнется с цепочки сертификатов, а затем покажет другую информацию о сертификате сервера и TLS-соединении. Все это должно помочь вам понять, в чем проблема. Это может быть промежуточный сертификат, а не ЦС.

Вы можете получить краткое описание цепочки сертификатов, отфильтровав вывод:

openssl s_client -connect example.com:443 -showcerts </dev/null 2>/dev/null |
sed -e '1,/Certificate chain/d' -e '/BEGIN CERTIFICATE/,/END CERTIFICATE/d' -e '/---/,$d'