下载带有curl的证书,将证书值回显到openssl

时间:2019-02-22 23:50:03

标签: bash openssl certificate

我正在尝试使用curl获得中间证书,并在不将其写入文件的情况下对其进行处理。

我已经弄清楚了如何处理叶子证书并获得分发点,但这就是我遇到的问题。

举个例子,让我们来看一下stackoverflow(似乎相关)。 SO的第一个中间证书来自http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt

在交互式外壳中,我可以执行以下操作将证书的值存储到变量中:

  

DigiCertIntermediateCert = $(卷http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt

然后我可以通过执行以下操作来检查证书的值:

  

回显“ $ DigiCertIntermediateCert” | openssl x509-通知DER-更新PEM

这将输出漂亮且友好的PEM格式的证书。看起来像这样:

-----BEGIN CERTIFICATE-----
MIIEsTCCA5mgAwIBAgIQBOHnpNxc8vNtwCtCuF0VnzANBgkqhkiG9w0BAQsFADBs
...
cPUeybQ=
-----END CERTIFICATE-----

(注意:当中间证书更改时,这将更改,如果这与您看到的值不完全相同,请不要惊慌)

整洁!似乎这样应该工作。让我们将所有这些逻辑放入具有一些基本案例处理的脚本中(例如,如果证书采用其他形式,那么我们应该将其解释为该形式)并且应该完成,对吧?

#! /bin/bash

cert_content=$(curl -s "$1")
echo "$cert_content"

if echo "$cert_content" | openssl x509 -text -noout; then
    echo "Not converting"
    echo "$cert_content"
else
    echo "Converting"
    echo "$cert_content" | openssl x509 -inform DER -outform PEM
fi

输入网址时,输出什么?

...
[binary contents of a certificate]
...
unable to load certificate
4667577964:error:09FFF06C:PEM routines:CRYPTO_internal:no start line:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.230.1/libressl-2.6/crypto/pem/pem_lib.c:683:Expecting: TRUSTED CERTIFICATE
Converting
unable to load certificate
4421875308:error:0DFFF08E:asn1 encoding routines:CRYPTO_internal:not enough data:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.230.1/libressl-2.6/crypto/asn1/a_d2i_fp.c:251:

因此很容易看到证书为DER形式(因为“转换”行),但是证书似乎不完整-请注意错误:

unable to load certificate
4421875308:error:0DFFF08E:asn1 encoding routines:CRYPTO_internal:not enough data:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.230.1/libressl-2.6/crypto/asn1/a_d2i_fp.c:251:

说没有足够的数据。

为什么脚本和我在shell中执行的操作之间有何不同?如何通过openssl工具提供二进制证书以获取PEM形式的证书?

1 个答案:

答案 0 :(得分:0)

问题所暗示的是,我对shell的使用不够严格。 “交互式”会话是使用zsh完成的,脚本是在bash下运行的。 zsh会将EOF附加到通过其管道传递的变量中,而bash(显然)没有。现在我的任务是如何将EOF附加到bash中的变量(显然,这是不平凡的)。