我应该采取哪些步骤来像浏览器那样手动验证SSL证书



Chrome等浏览器如何检查SSL证书?

有他们使用的在线数据库或网站吗?

浏览器采取了哪些步骤来验证SSL证书?

我可以在不使用浏览器的情况下手动完成吗?

Chrome等浏览器如何检查SSL证书?

证书和链由服务器在SSL握手期间发送。浏览器将根据证书颁发者、提供的链证书和本地根证书创建信任链。它将检查证书的有效期和用途,还检查使用者的替代名称(可能还有使用者(,以确保证书实际上是为URL中的域颁发的。它还可能对证书吊销进行一些检查。

有关详细信息,请参阅SSL证书框架101:浏览器如何实际验证给定服务器证书的有效性?以及浏览器如何处理吊销的SSL/TLS证书?。

他们是否使用任何在线数据库或网站?

不是。必要的信任存储是本地的。他们可能会根据一些在线资源检查吊销。请参阅证书验证是否完全在本地完成?。

我可以在不使用浏览器的情况下手动完成吗?

当然,浏览器的功能理论上可以手动复制。例如,您可以访问该站点并使用openssl s_client -showcerts ...获得叶证书和中间证书。然后可以使用openssl verify验证证书链,另请参阅使用openssl验证验证证书链。然后,您需要查看带有openssl x509 -text ...的叶证书,以检查用途、过期时间和主题。撤销是很棘手的,但可以在openssl-crl和openssl-ocsp的帮助下完成,尽管这并不能真正反映浏览器的功能

验证任何SSL/TLS证书的官方算法由PKIX定义,并由OCSP修改。对于现在的TLS,OCSP令牌通常通过TLS握手中的"装订"传输,而不是通过单独的连接传输,这需要其他几个RFC,但这只会影响传输,而不会影响中继方的实际验证。特别是对于HTTPS,客户端还必须检查服务器标识,也就是rfc2818定义的"主机名"。

在实践中,浏览器可能会有所不同。Chrome主要使用谷歌决定的方案来"推送"他们选择的吊销数据,但这种情况不时发生变化。我最后听说的Firefox使用了他们自己的"一个CRL"方案。此外,尽管标准和传统的做法是根据SAN检查主机名(如果存在(,否则就回到Subject.CN,但Chrome从几年前开始就需要SAN,并且从不使用CN;你可以在几个堆栈上找到几十个关于";我的自签名或其他不是来自真正CA的DIY证书停止在Chrome上工作";。

如果你所说的"手动"真的是指手动,那将是一项大量的工作。如果你的意思是离线使用浏览器以外的工具,那就更容易了;OpenSSL(如果安装了(可以完成大部分操作,尽管您需要比Steffen的链接中显示的更多选项才能正确操作。

如果你的意思是使用浏览器以外的工具在线,那绝对是。近几十年来,WWW变得非常流行,有无数的程序和库可以访问WWW,几乎所有这些程序和库都包括HTTPS(尽管20年前这还不太常见(,其中包括验证证书——至少在默认情况下是这样;许多具有禁用、绕过或覆盖验证的选项。有像curlwget这样的独立工具,或者openssl s_client可以在不执行HTTP的情况下执行SSL/TLS和证书部分。python中的ssl(或使用它的requests(、nodejs中的tls、Java中的(旧的(HttpsURLConnection和(新的(java.net.http等库和中间件不计其数,还有ApacheHttpComponents等第三方;虽然我不熟悉perl和dotnet,但我确信它们是对等的。以及powershell,它在程序/库的区别上是模糊的。

相关内容

  • 没有找到相关文章

最新更新