Faça o download e verifique a cadeia de certificados

4

Estou tentando baixar as cadeias de certificados e verificá-las localmente à medida que novos certificados de CA são enviados aos clientes, basicamente obtendo uma visualização de quais sites funcionarão a qualquer momento. Eu uso o seguinte comando para baixar a cadeia:

echo -n | openssl s_client -showcerts -connect www.google.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > mycert.pem

Mas ao usar openssl verify , recebo uma mensagem de erro:

root@host:~# openssl version 
OpenSSL 1.1.0e  16 Feb 2017

root@host:~# echo -n | openssl s_client -showcerts -connect www.google.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > mycert.pem 
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA verify return:1 depth=1 C = US, O = Google Inc, CN
    = Google Internet Authority G2 verify return:1 depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = www.google.com verify return:1 DONE

root@host:~# openssl verify mycert.pem 
C = US, ST = California, L = Mountain View, O = Google Inc, CN = www.google.com
error 20 at 0 depth lookup: unable to get local issuer certificate
error mycert.pem: verification failed

Qual é a maneira correta de verificar uma cadeia de certificados como esta offline?

    
por s3c 27.03.2017 / 21:28

3 respostas

1

Você deve colocar o certificado que deseja verificar em um arquivo e a cadeia em outro arquivo:

openssl verify -CAfile chain.pem mycert.pem

Também é importante (é claro) que openssl saiba como encontrar o certificado raiz se não estiver incluído no chain.pem. Se você precisar fazer isso (se estiver usando sua própria autoridade de certificação), então você pode especificar um diretório alternativo e procurá-lo com -CApath

    
por 28.03.2017 / 04:54
0

Então eu encontrei a resposta para isso, o OpenSSL só verifica o primeiro certificado em um arquivo. Isso significa que, se você tiver uma cadeia válida, deverá verificar apenas o último certificado.

    
por 28.03.2017 / 13:47
0

O problema está na saída do comando -showcerts : você só tem seu certificado e o certificado que o assinou - e é provavelmente um certificado intermediário, mas não a cadeia completa. Para ter a declaração OK, você deve:

  • Coloque seu certificado (primeiro -BEGIN END- block) no arquivo mycert.crt
  • Coloque o (s) outro (s) no arquivo CAcerts.crt
  • Verifique com openssh -text -in CAcerts.crt para procurar uma CA raiz que tenha assinado isso e adicione-a a CAfile.crt .
  • Talvez repita isso se a CA ainda não for raiz (autoassinada).
  • Confirme seu certificado: openssl verify -CAfile CAcerts.crt mycert.crt

Observação: você pode obter os certificados CA bem conhecidos do armazenamento do Firefox usando a GUI de preferências (exibir certificados e depois exportar) ou na linha de comando com certutil , que está no diretório do perfil do Firefox. Por exemplo:

$ find $HOME/.mozilla/firefox -name cert8.db # point for example to abcdef.default directory
$ certutil -a -L -d $HOME/.mozilla/firefox/abcdef.default/ -n "Let's Encrypt' Authority X3"
    
por 10.02.2018 / 10:28