首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将带有curl、echo cert值的cert下载到openssl中

将带有curl、echo cert值的cert下载到openssl中
EN

Stack Overflow用户
提问于 2019-02-22 23:50:02
回答 1查看 1.6K关注 0票数 0

我试图使用curl获得一个中间证书,并在不将证书写入文件的情况下处理证书。

我已经想出了如何处理一个叶子证书并得到分发点,但这就是我被困的地方。

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

在交互式shell中,我可以这样做,将证书的值存储到变量中:

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

然后,我可以通过这样的操作来检查证书的值:

echo "$DigiCertIntermediateCert“\ openssl x509 -inform DER -outform PEM

这输出良好和友好的PEM形成的证书。看起来是这样的:

代码语言:javascript
复制
-----BEGIN CERTIFICATE-----
MIIEsTCCA5mgAwIBAgIQBOHnpNxc8vNtwCtCuF0VnzANBgkqhkiG9w0BAQsFADBs
...
cPUeybQ=
-----END CERTIFICATE-----

(注意:当中间证书发生变化时,这将发生变化,如果这不是您所看到的值,请不要惊慌)

整洁!看来这应该能行。让我们将所有这些逻辑放入一个脚本中,其中包含一些基本的案例处理(例如,如果cert是一个不同的形式,那么我们应该将它解释为该形式),我们应该完成,对吗?

代码语言:javascript
复制
#! /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

当我们输入url时,这个输出是什么?

代码语言:javascript
复制
...
[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:

因此,很容易看到证书的形式(因为“转换”行),但是看起来证书还不完整--注意错误:

代码语言:javascript
复制
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表单证书?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-22 23:50:02

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54836752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档