【问题标题】:how to extract issuer certificate from other certificate如何从其他证书中提取颁发者证书
【发布时间】:2021-03-04 04:02:26
【问题描述】:

我有一个 X.509 格式的证书。使用 openssl 我想将颁发者的证书提取到一个文件中,也是 X.509 格式(这样我就可以在我的 Web 服务中将颁发者列入白名单)。

我该怎么做?以下命令不起作用,它只是以文本形式打印发行者信息。

openssl x509 -in cert.x509 -issuer -out issuer.x509

【问题讨论】:

    标签: openssl


    【解决方案1】:
    1. openssl x509 -in cert.x509 -text 找到签名证书的 URL。
    2. curl (url) >signer.der 将签名证书下载到文件(在我的例子中为 DER 格式)。
    3. openssl x509 -inform der -in signer.der -out signer.pem 将签名证书转换为 PEM (X.509) 格式。
    4. openssl x509 -in signer.pem -text 确认您的结果。根据需要重复整个证书链上的过程。

    【讨论】:

    • This article on common OpenSSL commands 包含有关这些命令的更多详细信息。
    • 如果里面没有颁发者证书URL怎么办?例如,digicert.com/digicert-root-certificates.htm 中的所有中间证书都由根证书签名,但它们的证书颁发机构信息访问扩展不包含 CA 颁发者的证书 URI。
    • 我认为您应该就此提出一个新问题。浏览器必须以某种方式做到这一点。也许浏览器可以从其根证书列表中识别出根级签名证书的指纹,而无需通过 url 检索它。
    【解决方案2】:

    可接受的答案是正确的,但我可以进一步详细说明。

    证书通常有一个 AIA 字段,该字段提供一个 URL,可以在其中下载颁发者证书,并且根据 CA 必须遵循的标准,它们通常也是 DER 格式。

    对于上面的 1.“查找签名证书的 URL”,您可以运行 issuer_url=$(openssl x509 -noout -text -in $filename | grep "Authority Information Access" -A 3 | grep "CA Issuers" | head -1 | tr spaces | sed 's/CA Issuers - URI://g' | sed 's/ //g')

    这个命令基本上是在证书上运行 openssl 并剪下证书中的 CA Issuer - URI: 链接(假设有一个)并放入 issuer_url 变量中。您可以将 $filename 替换为 /path/to/your/pem/certificate。如果您的证书是 DER 格式,则需要在第一个 openssl 命令中包含 -inform DER

    完成后,您可以使用 wget 来获取它: wget $issuer_url -O outputfile.crt

    这将获取颁发者文件。此文件通常为 DER 格式,因此您可以从她那里提供文件或将其转换为 PEM:

    openssl x509 -inform DER -in outputfile.crt -out pem_outputfile.crt

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-13
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-09
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多