openssl 和 OCSP

openssl 和 OCSP

我正在尝试检查脚本中证书的吊销,但收到以下错误:

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

以下是步骤(以 www.google.com 为例)。

  1. 获取证书

    $ echo 'Q' | openssl s_client -connect www.google.com:443 > google.crt
    
  2. 提取发行者的 URI

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

    这给出了http://pki.google.com/GIAG2.crt

  3. 获取颁发者证书

    $ curl --silent http://pki.google.com/GIAG2.crt > issuer.crt
    
  4. 提取 OCSP URI

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

    这给出了http://clients1.google.com/ocsp

现在是最后一步:

$ 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

我究竟做错了什么?

编辑

我刚刚看到它http://pki.google.com/GIAG2.crt是 DER 格式。将其转换为 PEM

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

让我更进一步,但是

$ 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

这个错误是有道理的,因为http://clients1.google.com/ocsp提供 404,但 URL 是存储在原始证书中的 URL ...

下一个问题也是如何自动检测颁发者证书的格式,但我可以使用file并查看该文件是二进制还是 ASCII。

答案1

您需要设置一个Host标题。有一个未记录的命令行标志。尝试:

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

相关内容