OpenSSL continua me dizendo 'não é possível obter o certificado do emissor local'

OpenSSL continua me dizendo 'não é possível obter o certificado do emissor local'

Estou usando o CentOS, que possui o OpenSSL 1.0.2k-fips instalado, e criei e instalei a versão 1.1.0g junto com ele como parte de uma instalação HTTP2 descrita aqui:https://www.tunetheweb.com/performance/http2/

Tenho usado o 1.1.0g bem, mas ultimamente renovei os certificados e agora parece perdido ao tentar verificar o CA. A localização do arquivo CA não mudou, a versão 1.0.2k-fips parece boa com ele, mas 1.1.0g não deixa de reclamar:

Verify return code: 20 (unable to get local issuer certificate)

Então, verifiquei que os certificados estão bons, o local não mudou, não alterei manualmente nenhuma configuração.

Achei que talvez devesse reconstruir o 1.1.0g, mas isso não muda nada. Também tentei usar a -CApathopção do opensslcomando, assim (usando o mesmo diretório que 1.0.2k-fips usa):

echo | /usr/local/ssl/bin/openssl s_client -connect example.com:443 -CApath /etc/pki/tls

Também tentei -CAfile, apontando diretamente para o ca-bundle.crtque sei que tem os certificados corretos (1.0.2k-fips os usa sem problemas), ainda sem alterações.

Não tenho ideia de por que ele não pega meus certificados e me pergunto se esse problema já existia antes de eu alterar os certificados (verifiquei se eles funcionaram depois de alterá-los, pode ser possível que 1.1.0g já estivesse quebrado em esse ponto).

Estou pensando que pode ser devido a atualizações realizadas no sistema, quebrando algum link ou arquivo, mas onde procurar quando o certificado parece normal? Ou está faltando em 1.1.0g alguns outros/mais certificados que preciso apontar para ele?

Responder1

Você pode fazer com que s_client mostre a cadeia de certificados com -showcerts:

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

Isso começará com a cadeia de certificados e, em seguida, mostrará outras informações sobre o certificado do servidor e a conexão TLS. Tudo isso deve ajudá-lo a descobrir onde está o problema. Pode estar em um certificado intermediário, não na CA.

Você pode obter um resumo rápido da cadeia de certificados filtrando a saída:

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'

informação relacionada