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