OpenSSL постоянно сообщает мне: «Невозможно получить сертификат локального издателя»

OpenSSL постоянно сообщает мне: «Невозможно получить сертификат локального издателя»

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

Я нормально использовал 1.1.0g, но недавно я обновил сертификаты, и теперь он, похоже, теряется при попытке проверить CA. Расположение файла 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 не хватает каких-то других/больше сертификатов, на которые мне нужно указать?

решение1

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

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

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

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

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'

Связанный контент