我希望能够从命令行确定远程域的 TLS/SSL 证书是否“受信任”。
这是我几周前玩的一个 openssl 示例,这里我使用 openssl 获取证书,然后将其通过管道传递给 openssl 的“验证”命令。我假设“验证”命令将验证证书,但是,我现在的理解是“验证”命令只是验证证书链(我认为)。(cdn.pubnub.com 只是我从 Twitter 快速搜索中找到的一个域,作为示例使用)
echo "GET /" | openssl s_client -connect cdn.pubnub.com:443 | openssl x509 -text | openssl verify
正如您从cdn.pubnub.com域中看到的(在撰写本文时),浏览器(至少 Chrome)不信任证书(因为证书域不匹配),但是,openssl 'verify'命令不输出“受信任”或“不受信任”或其他我们可以从中推断信息的内容。
我想到的另一种方法是使用无头浏览器(例如PhantomJS)并解析它们返回的任何错误。事实证明,PhantomJS 只是错误但没有给出任何细节,因此不能使用,因为错误可能是由其他原因引起的。
我不认为从命令行找出证书是否受信任会这么难,而不必解析和检查使证书自己信任的所有数据,我认为这是不明智的。
是否有库或其他方式可以判断远程域的证书是否受命令行信任?