openssl e OCSP

3

Estou tentando verificar a revogação de certificados em um script, mas estou recebendo o seguinte erro:

unable to load certificate
140735258465104:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE

Aqui estão os passos (usando www.google.com como exemplo).

  1. buscar o certificado

    $ echo 'Q' | openssl s_client -connect www.google.com:443 > google.crt
    
  2. extrair o URI do emissor

    $ openssl x509 -in google.crt -text -noout | grep 'CA Issuers' | \
        sed -e "s/^.*CA Issuers - URI://
    

    isto dá http://pki.google.com/GIAG2.crt

  3. buscar o certificado do emissor

    $ curl --silent http://pki.google.com/GIAG2.crt > issuer.crt
    
  4. extrair o URI do OCSP

    $ openssl x509 -in google.crt -ocsp_uri -noout
    

    isto dá http://clients1.google.com/ocsp

E agora o último passo:

$ openssl ocsp -no_nonce -issuer issuer.crt -cert google.crt \
      -url http://clients1.google.com/ocsp
unable to load certificate
140735258465104:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE

O que estou fazendo de errado?

EDITAR

Acabei de ver que http://pki.google.com/GIAG2.crt está no formato DER. Convertendo-o para PEM com

$ openssl x509 -inform DER -outform PEM -in issuer.der -out issuer.pem

me leva um passo adiante, mas

$ openssl ocsp -no_nonce -issuer issuer.pem -cert google.crt \
      -url http://clients1.google.com/ocsp
Error querying OCSP responder
140735258465104:error:27076072:OCSP routines:PARSE_HTTP_LINE1:server response error:ocsp_ht.c:255:Code=404,Reason=Not Found

O tipo de erro faz sentido, pois o link fornece um 404, mas o URL é o armazenado no certificado original ...

A próxima pergunta também será como detectar automaticamente o formato do certificado do emissor, mas eu poderia usar file e ver se o arquivo é binário ou ASCII.

    
por Matteo 29.11.2014 / 12:12

1 resposta

5

Você precisa definir um Host header. Há um sinalizador de linha de comando não documentado para isso. Experimente:

openssl ocsp -no_nonce -issuer issuer.pem -cert google.crt \
    -url http://clients1.google.com/ocsp \
    -header Host clients1.google.com
    
por 29.07.2015 / 15:37

Tags