如何解决我应该采取什么步骤像浏览器一样手动验证SSL证书?
Chrome之类的浏览器如何检查SSL证书?
他们有使用的在线数据库或网站吗?
浏览器采取了哪些步骤来验证SSL证书?
我可以不使用浏览器手动完成操作吗?
解决方法
Chrome之类的浏览器如何检查SSL证书?
证书和链由服务器在SSL握手期间发送。浏览器将基于证书颁发者,提供的链证书和本地根证书创建信任链。它将检查证书的到期和目的,还检查主题的替代名称(可能还有主题),以确保为URL中的域实际颁发了证书。它还可能会对证书吊销做一些检查。
有关详细信息,请参见SSL Certificate framework 101: How does the browser actually verify the validity of a given server certificate?和How Do Browsers Handle Revoked SSL/TLS Certificates?。
他们有使用的在线数据库或网站吗?
不是。必要的信任库是本地的。他们可能会根据某些在线资源检查撤销。参见Is Certificate validation done completely local?。
我可以不使用浏览器手动完成操作吗?
当然,从理论上讲,浏览器的操作可以手动复制。例如,您可以访问站点并使用openssl s_client -showcerts ...
获取叶子和中间证书。然后,您可以使用openssl verify
来验证证书链,另请参见Verify a certificate chain using openssl verify。然后,您需要查看带有openssl x509 -text ...
的叶子证书,以检查目的,有效期和主题。撤销很棘手,但可以借助openssl crl和openssl ocsp来完成,尽管这并不能真正反映出what browsers do。
用于验证任何SSL / TLS证书的官方算法是defined by PKIX为modified by OCSP。对于当今的TLS,OCSP令牌通常是通过TLS握手中的“装订”来传输的,而不是通过单独的连接来传输的,这需要其他几个RFC,但是这只会影响传输,而不会影响实际的验证。对于 HTTPS ,客户端还必须将服务器身份(也称为“主机名”)检查为defined by rfc2818。
实际上,浏览器可能有所不同。 Chrome浏览器大多使用Google确定的方案来“推送”他们选择的吊销数据,但是这种情况不时发生变化。上次听说,Firefox使用了自己的“ one-CRL”方案。另外,尽管标准和传统做法是根据SAN检查主机名(如果存在),否则回落到Subject.CN,但自几年前Chrome开始需要且从不使用CN;您会在几个堆栈中找到许多关于“我的自签名证书或其他不是来自真正CA的DIY证书停止在Chrome上运行”的问题。
如果“手动完成”实际上是指手动,那么这将是很多工作。如果您的意思是使用脱机浏览器以外的工具,则会稍微容易一些; OpenSSL(如果已安装)最多可以做到这一点,尽管您需要的功能比Steffen链接中所示的更多,才能正确使用。
如果您的意思是使用浏览器 online 以外的工具,则绝对可以。在最近的几十年中,WWW变得非常流行,并且有无数的程序和库可以访问它,几乎所有程序和库都包括HTTPS(尽管在20年前这种情况并不常见),其中包括验证证书(至少默认情况下是这样) ;许多都具有禁用,绕过或覆盖验证的选项。有curl
和wget
之类的独立工具-或openssl s_client
可以执行SSL / TLS和证书部分,而无需首先执行HTTP。有无数的库和中间件,例如python中的ssl
(或使用它的requests
),nodejs中的tls
,(较旧的)HttpsURLConnection
和(较新的)java.net.http
Java以及Apache HttpComponents
之类的第三方;尽管我不熟悉perl和dotnet,但我肯定还有。以及Powershell,这在程序/库的区分上是模糊的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。