openssl -showcerts com -servername fornece âncora / root errada?

1

Apesar de ler várias postagens de SO sobre esse tópico ( por exemplo e por exemplo ), openssl s_client -showcerts -servername faz o download da âncora / certificado raiz errado, enquanto meu navegador da Web mostra o certificado de âncora / raiz correto.

# get the chain of certs
[root@server dir]# openssl s_client -connect www.google.com:443 -servername www.google.com -showcerts 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > chain.pem
[root@server dir]#

# save the chain's certs to files: cert.pem (client/leaf) cert1.pem cert2.pem
[root@server dir]# cat chain.pem | awk 'split_after == 1 {n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ".pem"}'
[root@server dir]#

# verify fails
[root@server dir]# openssl verify -trusted cert2.pem -untrusted cert1.pem cert.pem                                           
cert.pem: C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
error 2 at 2 depth lookup:unable to get issuer certificate

# verify succeeds
# openssl verify -trusted ANCHOR-FROM-BROWSER.PEM -untrusted cert1.pem cert.pem
cert.pem: OK

O Firefox diz que o âncora / root PEM do Google contém "AocvmM", mas o openssl não consegue encontrá-lo (BTW, o mesmo comportamento no CentOS 7.4 e no Ubuntu 16.04.3 LTS):

[root@server dir]# openssl s_client -connect www.google.com:443 -showcerts -servername www.google.com 2>&1 < /dev/null | grep AocvmM
[root@server dir]# 

Pergunta: Por que o -showcerts não exibe o certificado de âncora / raiz correto ?  Em outras palavras, qual certificado é -showcerts, se não é a âncora / root?

    
por mellow-yellow 26.01.2018 / 00:36

1 resposta

0

A lista de certs incluídos no "bundle" (o arquivo com a cadeia de certs) é decidida pelo Web Server (provavelmente o Apache) que serve a página. Se s_client (ou openssl em geral) recebe a lista correta e completa é nada sobre o qual openssl tem algum controle.

Você precisa do certificado raiz disponível neste site .

Copie o texto incluindo de

-----BEGIN CERTIFICATE-----

até

-----END CERTIFICATE-----

para um arquivo chamado equifax.pem

Em seguida, verifique toda a cadeia:

$ openssl verify -CAfile equifax.pem -untrusted cert1.pem -untrusted cert2.pem cert.pem
cert.pem: OK

Editar

Se o certificado equifax estiver no repositório de certificados ssl local padrão (/ etc / ssl / certs /), isso também funcionará:

$ openssl verify -untrusted cert1.pem -untrusted cert2.pem cert.pem
cert.pem: OK

O certificado equifax está ou não no diretório ssl certs é um problema separado. Você pode atualizá-lo.

    
por 26.01.2018 / 06:03