如何从其他证书中提取颁发者证书

wbe*_*rry 9 openssl

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

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

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

wbe*_*rry 11

  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确认结果.根据需要在证书链中一直重复上述过程.

  • [本文](https://www.sslshopper.com/article-most-common-openssl-commands.html)关于常见的OpenSSL命令包含有关这些命令的更多详细信息. (2认同)
  • 如果里面没有颁发者证书 URL 怎么办?例如,来自 https://www.digicert.com/digicert-root-certificates.htm 的所有中间证书都由根证书签名,但它们的证书颁发机构信息访问扩展不包含 CA 颁发者的证书 URI。 (2认同)

小智 11

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

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

对于上面的“查找签名证书的 URL”的 1.,您可以运行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:链接(假设有一个)并将其放入 issueser_url 变量中。您可以将 $filename 替换为 /path/to/your/pem/certificate。如果您的证书采用 DER 格式,则需要将其包含-inform DER在第一个 openssl 命令中。

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

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

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