当前位置: 首页 > 知识库问答 >
问题:

使用OpenSSL CLI从x509证书获取链或CA颁发者

施自明
2023-03-14

我试图使用OpenSSL从证书中构建一个链(或者只是从某个地方获取它),最好使用命令行界面。

我在internet上找到了一些例子,但我被这样一个问题所困扰:“我从哪里获得证书的CA颁发者?”

例如,检查本网站的openssl命令cheatsheet,您会发现该命令

openssl s_client-showcerts-host example.com-端口443

因此,我不能直接从证书中获得链,但我应该向某处索取链。

现在我的问题是:我从哪里获得主机名,我可以在哪里发送对链的请求?

我看了两张证书。

  1. StackExchange.com
  2. Google.com

使用openssl,我可以使用以下命令询问发行者:

openssl x509-incertfile-noout-isslisher

而我分别得到

  1. 发行方=c=美国,O=让我们加密,CN=让我们加密权限x3
  2. issuer=c=美国,O=谷歌信托服务,CN=GTS CA 1o1

老实说,我不知道如何处理这些结果....

然后,用命令调查

openssl x509-text-in certFile

我找到了友邦保险的扩展:

    null

但是使用google,我不知道如何使用OpenSSL....我可能可以使用wget,但我没有从StackExchange获得的相同格式...

所以,最后,我的问题是:

  • 如何处理这些差异?
  • 是否有更好的方法从证书中获取链,而不要求CA颁发者?
  • CA颁发者是AIA的扩展,我认为它不是强制性的,我可以依赖它吗?
  • 如何使用openssl获取CA颁发者,而无需自己解析输出?(类似于openSSL x509-causser-in certfile)

PS:我在最后试图实现的是验证一个证书,遍历完整的证书链,并检查链中每个证书的所有OCSP或CRL......如果您有C++中的工作示例,或者只是使用OpenSSL CLI,我将非常感激:)

编辑:

我现在正在做的是自己创建链。

使用AIA扩展,我获取CA颁发者URI,下载CA颁发者证书(如果需要,转换为PEM),等等,直到我再也找不到CA颁发者。那么,很可能是根CA。

之后,我手动收集所有的pem并创建链。

共有1个答案

魏鸿
2023-03-14

我知道这有点老了,已经解决了,但我想我应该添加一个小脚本,从x509输出中解析出CA颁发者:

getcaissuer() {
openssl x509 -noout -text -in $1 | awk '/^[ \t]+CA Issuers[ \t]+-[ \t]+URI:/ { print gensub(/^.*URI:(.*)$/,"\\1","g",$0); }'
}

# usage:  getcaissuer <certificate>
 类似资料:
  • 我正在使用X509Certificates实现通信,并正在努力验证证书。 下一个问题:需要验证签名的证书,并对照父证书进行检查,但在执行此操作时,如下所示: 它抛出,签名错误,java.security.SignatureException:签名不匹配。 是否有其他方法,我应该检查发行人或验证证书?我错过了什么吗? 亨里克·贝斯特

  • 我正在Windows服务器2016上的wamp上使用洋红色社区版2.2。每当我尝试登录以通过系统同步您的Magento市场购买时 “SSL 证书问题:无法获取本地颁发者证书” 我尝试了这个论坛中其他一些线程中提供的解决方案来下载cacert。pem并在php.ini中执行以下设置 curl . cainfo = " C:\ wamp 64 \ bin \ PHP \ PHP 7 . 1 . 9 \

  • 我想使用OCSP检查证书,这是来自服务器在TLS握手。 我使用Bouncy Castle作为OCSP实现的提供者,而BC验证方法一般需要X509Certificate作为参数。

  • 我正在Windows7上运行PHP版本5.6.3作为XAMPP的一部分。 当我尝试使用Mandrill API时,我得到以下错误: 未捕获异常“Mandrill_HttpError”,消息为“API调用消息/send-template失败:SSL证书问题:无法获取本地颁发者证书” 我已经尝试了在StackOverflow上读到的所有内容,包括向php.ini文件添加以下内容: 当然可以从http:

  • 问题内容: 我正在Windows 7上将PHP版本5.6.3作为XAMPP的一部分运行。 当我尝试使用Mandrill API时,出现以下错误: 消息“ API调用消息/发送模板失败”的未捕获异常“ Mandrill_HttpError”:SSL证书问题:无法获取本地颁发者证书 我已经尝试了我在StackOverflow上阅读的所有内容,包括将以下内容添加到php.ini文件中: 当然,还可以从h

  • 我正在使用和创建。我正在使用该公司的VPN。 通过kubectl create-f./rc/mongo-rc.yaml命令创建了RC。 使用kubectl describe pod mongo-5zttk命令时出现以下kubernetes事件: 当我尝试使用访问网址时: 我可以成功地从泊坞中心注册表中提取 映像。 环境信息: minikube版本:v1.14.1 kubectl 客户端版本:v1.