Я использую 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'