
Estou trabalhando na máquina CentOS7 e estou tentando atualizar o openssl da minha máquina versão 1.0.2k -> 1.1.0l. Parece que o processo de handshake com meu servidor (que não mudou) falhou após a atualização e estou tentando descobrir a causa.
Executando o seguinte comando com ambas as versões do openssl:
openssl s_client -showcerts -connect servidor:porta
Resultou em falha com o mais recente (se eu fornecer a validação -CAfile funciona com ambos). Uma diferença do resultado:
Antigo 1.0.2k (aperto de mão bem-sucedido):
Chave temporária do servidor: ECDH, P-256, 256 bits Novo, TLSv1/SSLv3, Cifra é ECDHE-RSA-AES128-GCM-SHA256 Novo 1.1.0l (falha no handshake):
Chave temporária do servidor: X25519, 253 bits Novo, TLSv1.2, a cifra é ECDHE-RSA-AES128-GCM-SHA256 Verifique o código de retorno: 20 (não foi possível obter o certificado do emissor local) Agradeceria se me ajudasse a entender a diferença e por que eles são diferentes.
para sua informação, comecei uma ameaça semelhante aqui: https://stackoverflow.com/questions/68763253/openssl-upgrade-fail-validating-certificate?noredirect=1#comment121583146_68763253 sem muita sorte.
Obrigado :)
Responder1
no Centos 7 você também pode corrigir esse problema com os seguintes comandos:
#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
Responder2
Para referência futura, adicione solução aqui.
Depois de começar a trabalhar com a versão openssl> 1.0.2ksobremáquinas centos7, parece haver uma mudança comportamental no caminho de resolução raiz.
O Openssl passa por uma lista predefinida de locais de armazenamento de certificados, no entanto, ao encontrar um arquivo cert.pem em /val/ssl, ele o testará e falhará se não for capaz de validar seu controle remoto.
Meu certificado "bom" estava em /etc/ssl e como era uma máquina de cliente não pude pedir para ele remover o arquivo /var/ssl.
Minha solução foi escolher programaticamente o cert.pem correto caso o openssl falhasse (sem alterar a versão do openssl da máquina, o que era proibido).