
Я работаю на машине CentOS7 и пытаюсь обновить openssl своей машины с версии 1.0.2k на 1.1.0l. Похоже, что процесс рукопожатия с моим сервером (который не изменился) терпит неудачу после обновления, и я пытаюсь выяснить причину.
Запустите следующую команду с обеими версиями openssl:
openssl s_client -showcerts -connect сервер:порт
Результатом стал сбой с более новым (если я предоставлю проверку -CAfile, то она будет работать с обоими). Разница результатов:
Старая версия 1.0.2k (успешное рукопожатие):
Временный ключ сервера: ECDH, P-256, 256 бит Новый, TLSv1/SSLv3, шифр ECDHE-RSA-AES128-GCM-SHA256 Новый 1.1.0l (не проходит подтверждение):
Временный ключ сервера: X25519, 253 бита, новый, TLSv1.2, шифр ECDHE-RSA-AES128-GCM-SHA256. Проверочный код возврата: 20 (невозможно получить сертификат локального эмитента). Я был бы признателен, если бы вам помогли понять разницу и то, почему они отличаются.
Кстати, я начал подобную угрозу здесь: https://stackoverflow.com/questions/68763253/openssl-upgrade-fail-validating-certificate?noredirect=1#comment121583146_68763253 без особой удачи.
Спасибо :)
решение1
В Centos 7 эту проблему можно исправить с помощью следующих команд:
#Prepare to compile
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y
yum groupinstall -y "Development Tools" "Development Libraries"
#Build from source
cd /usr/src
# --no-check-certificate because of that issue, your system will not validate letsencrypt certificate at openssl.org until finish update
wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1l.tar.gz
tar -zxf openssl-1.1.1l.tar.gz
cd openssl-1.1.1l
./config
make
make install
yum install ca-certificates -y
решение2
Для дальнейшего использования добавлю решение здесь.
После начала работы с openssl версии > 1.0.2kнаНа машинах centos7, похоже, наблюдается изменение поведения в пути разрешения корневого каталога.
Openssl просматривает предопределенный список расположений хранилищ сертификатов, однако, как только он обнаруживает файл cert.pem в /val/ssl, он проверяет его и завершает проверку с ошибкой, если не может проверить ваш удаленный сертификат.
Мой «хороший» сертификат находился в /etc/ssl, и поскольку это была машина клиента, я не мог попросить его удалить файл /var/ssl.
Моим решением было программно выбрать правильный cert.pem на случай сбоя openssl (без изменения версии openssl на машине, что было запрещено).