使用OpenSSL CLI从x509证书获取链或CA颁发者
我正在尝试使用OpenSSL从证书构建一个链(或者只是从某处获取),最好使用命令行界面 我在互联网上找到了一些例子,但我一直在问“我从何处获得证书颁发者?” 例如,检查此网站,您将找到该命令 openssl s_客户端-showcerts-host example.com-端口443 去拿链子。您可以使用使用OpenSSL CLI从x509证书获取链或CA颁发者,openssl,x509certificate,x509,x509certificatevalidator,Openssl,X509certificate,X509,X509certificatevalidator,我正在尝试使用OpenSSL从证书构建一个链(或者只是从某处获取),最好使用命令行界面 我在互联网上找到了一些例子,但我一直在问“我从何处获得证书颁发者?” 例如,检查此网站,您将找到该命令 openssl s_客户端-showcerts-host example.com-端口443 去拿链子。您可以使用www.google.com而不是example.com进行尝试。 输出应该为您提供链。其他网站迟早会使用相同的命令 因此,我无法直接从证书中获取链,但我应该向某个地方索取链 现在我的问题是:从
www.google.com
而不是example.com
进行尝试。
输出应该为您提供链。其他网站迟早会使用相同的命令
因此,我无法直接从证书中获取链,但我应该向某个地方索取链
现在我的问题是:从哪里获得主机名,从哪里可以发送链请求
我看了两张证书
OpenSSL
,我可以使用命令询问发卡机构
openssl x509-在certFile-noout-issuer中
我分别得到
openssl
…我可能会使用wget
,但我没有从stackexchange获得的相同格式
最后,我的问题是:
- 我应该如何处理这些差异
- 有没有更好的方法从证书中获取链,而无需询问CA颁发者
- CA发行人是友邦保险的延伸,我认为它不是强制性的,我可以依赖它吗
- 如何使用
获取CA颁发者,而不必自己解析输出?(类似于openssl x509-caIssuer-in-certFile)OpenSSL
PS:我在最后尝试实现的是验证证书,完成整个链,检查链中每个证书的所有OCSP或CRL……如果你在C++中有工作实例,或者仅仅使用OpenSSL CLI,我将非常感激: 编辑:
我现在正在做的是自己创建链 使用AIA扩展,我获得CA颁发者URI,下载CA颁发者证书(如果需要,转换为PEM),等等,直到我再也找不到CA颁发者为止。那么,可能是根CA之后,我手动收集所有pem并创建链。似乎互联网上的许多示例都考虑了SSL证书。在SSL证书中,您只需连接到网站并下载完整的链。我认为服务器应该在SSL协议本身中为您提供完整的链 我是为SMIME证书这样做的,这就是为什么我感到困惑,因为我不能使用与SSL证书相同的方法 在与我的同事们交谈之后,并将我正在做的事情与互联网上的一些类似项目进行了比较,看来AIA扩展是正确的做法。也许X509标准中没有强制要求,但它似乎被广泛使用(我从未见过没有AIA扩展的SMIME证书) 然后,我手动创建链,使用AIA扩展返回,直到找到没有此类扩展的证书 此时,这应该是一个根证书,我将尝试使用机器中安装的证书验证它 (当然,不要忘记通过CRL或OCSP检查吊销状态)
到目前为止,一切正常:)您可以使用
opensslx509-in cert.pem-noout-issuer
获取证书的本地颁发者。例如:echo'| openssl s_client-connect google.com:443 2>/dev/null | openssl x509-noout-issuer
。是的,关于权限信息访问
,您是对的,它是一个x509扩展,不是强制性的。嗨,皮卡努。谢谢你的评论,但问题是:在你的例子中,你是从哪里得到“google.com”主机名的?不是每个证书的主题中都有主机名,我也不知道该证书来自何处……嗨,n3mo,我对此有点困惑,您至少需要一个CN证书才能开始。如果它是CN,那么您可以获得证书。如果您有证书,您可以从主题或SAN名称获得CN。要回答这个问题,如果您不需要询问CA就可以获得整个链,这取决于服务器呈现的内容,理想情况下,服务器应该呈现整个链直到根CA,但是如果没有,您需要解析最后一个证书并获取它的颁发者,可能还有它的URL。嗨,pikaynu,问题是,它们并不总是SSL证书。在SSL证书中,CN通常是一个网站,但在我的情况下,CN可以只是一个名称…或一封电子邮件…例如,在电子邮件的情况下,我有CN个人的姓名…或像我写的示例一样,公司的名称或代码…最后,在与同事讨论后,我们决定使用AIA扩展(即使不是强制性的,它们似乎总是存在的)并使用CA颁发者URI构建我们自己的链,直到我们到达根CA(没有CA颁发者URI)