2017-09-19 168 views
0

我发现此服务https://whatsmychaincert.com/通过粘贴证书生成一个链(与根)。OpenSSL生成证书链

有什么办法可以用OpenSSL生成链?

我发现这个命令:

openssl s_client -connect example.com:443 -showcerts 

,显示所有证书链,但需要证书已经在网上。

有什么办法可以用本地文件证书生成链?

+0

Stack Overflow是编程和开发问题的网站。这个问题似乎与题目无关,因为它不涉及编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[超级用户](http://superuser.com/)或[Unix&Linux堆栈交换](http://unix.stackexchange.com/)会是一个更好的地方。 – jww

回答

2

s_client -showcerts显示由服务器提供的链;这应该是全链可选较少的根,但该网站说,一些服务器配置不正确。它也有一个链接“这是如何工作”,这正如人们所预料解释它是如何工作的:

mkcertchain是构建中间证书 链的SSL证书的实用程序。它从证书的“CA颁发者”字段中指定的URL 下载链式证书,直到 遇到在所有主要浏览器中受信任的根证书。 如果找到多个证书链,则使用最短的证书链。

鉴于在文件中的开始证书,或可输出由一些程序(例如,或许一个数据库查询),在PEM或“DER”(二进制)格式,openssl x509 -text [-inform pem|der]输出所有的证书数据包括“CA的发行人。任何数量的文本处理程序,比如awk,perl,grep,bash之类的shell或PowerShell,都应该能够提取该行及其值,并且由于通常是http :,因此任何数量的HTTP请求程序wget可以获取证书。任何像perl,shell或PowerShell这样的脚本语言都可以根据需要迭代这个过程,当通过比较Subject和Issuer命中一个根时停止。如果你想停留在一个不是更复杂一点的锚点上,但我不认为目前主流浏览器已经接受了这样的锚点,因此不需要为了构建一个被接受的链接通过浏览器。

FWIW,即使你的证书在AIA的CA发行领域,大多数公共CA包括中间体现在已经由证书透明度日志,这是在https://crt.sh易于搜索捕获;你可以通过点击链接轻松地浏览链接,所以我没有想过试图自动化它,尽管可能有大量'驱动'或模拟Web浏览器与网站进行交互的工具可以在这里工作。

当然,首先颁发你的证书的CA应该总是能够提供所需的连锁证书;这是他们工作的一部分。