在互联网上,当你访问一个网站时,浏览器会默默完成一项至关重要的任务——校验证书的有效性。这不仅关系到你的信息安全,也直接影响到你能否正常访问网站。今天,我们就用通俗易懂的方式,带大家了解浏览器是如何一步步完成这项工作的。
什么是SSL/TLS证书?
简单来说,SSL/TLS证书就像一张“身份证”,用来证明网站的真实身份。当你访问某个网站时,服务器会向浏览器发送一份证书,证明自己就是这个网站的合法拥有者。
例如,当我们访问https://www.baidu.com
时,百度的服务器会向浏览器发送一份证书。这份证书包含了以下关键信息:
-
网站的域名(比如 www.baidu.com
) -
证书的签发机构(比如“GlobalSign”) -
证书的有效期 -
公钥
浏览器拿到证书后,就会开始一系列复杂但标准化的校验过程,确保这张“身份证”是真的,而不是伪造的。
第一步:检查证书的基本信息
浏览器的第一步是检查证书的基本信息是否正确。这些信息包括:
-
域名匹配:证书上的域名是否与当前访问的网站一致。比如,如果你访问的是
www.baidu.com
,但证书上写的却是www.google.com
,那显然有问题。 -
有效期:证书是否有明确的生效日期和失效日期。如果当前时间不在证书的有效期内,那么这张证书就是无效的,浏览器会直接拒绝连接,并报
net::ERR_CERT_DATE_INVALID
错误。不在有效期的证书 -
状态是否吊销:有些情况下,证书可能会被撤销(比如网站泄露了私钥)。浏览器会通过“证书吊销列表”(CRL)或“在线证书状态协议”(OCSP)来检查证书的状态。
吊销的证书 注:CRL离线列表会定期更新但存在延迟,OCSP在线查询实时但可能泄露隐私(可以通过OCSP Stapling方案解决),如客户端IP。
第二步:验证证书的签名
接下来,浏览器会检查证书的签名是否有效。这里的“签名”是由证书签发机构(CA,Certificate Authority)生成的,用于证明证书的真实性。
什么是CA?
CA就像是互联网上的“公证处”(可理解为“身份证”的签发机关“公安局”),负责签发数字证书。常见的CA有DigiCert、GlobalSign、Let’s Encrypt等。每张证书都包含了一个由CA签名的哈希值,浏览器会用自己的公钥算法去验证这个签名。
具体步骤如下:
-
获取CA的公钥:浏览器会从操作系统中加载预装的可信CA根证书。这些根证书是由操作系统和浏览器内置的,确保它们是可信的。
MAC操作系统预置的根证书 Chrome预置的根证书,查看地址:chrome://certificate-manager/crscerts -
解密签名:浏览器用CA的公钥解密证书中的签名,得到一个哈希值。
-
计算哈希值:浏览器重新计算证书中未加密部分的哈希值。
-
对比哈希值:如果两个哈希值一致,说明证书确实是CA签发的;如果不一致,则证书可能被篡改。
第三步:验证证书链
很多时候,证书并不是直接由顶级CA签发的,而是经过了一条“证书链”。比如,百度的证书可能是由Let’s Encrypt签发的,而Let’s Encrypt的证书又是由DigiCert签发的。
浏览器会沿着这条证书链,逐层验证每个证书的签名,直到找到一个可信的根证书为止。如果某一层证书无法验证,整个链路都会失败。
举例说明:
假设你访问www.example.com
,服务器返回的证书链如下:
-
example.com
的证书 → 签发机构是“Let’s Encrypt” -
“Let’s Encrypt”的证书 → 签发机构是“DigiCert”
浏览器会先验证“Let’s Encrypt”证书的签名,然后验证“DigiCert”证书的签名。如果所有证书都通过验证,并且“DigiCert”是浏览器信任的根证书,那么整个证书链就成功了。
第四步:检查证书的扩展字段
除了基本的信息外,证书还可能包含一些扩展字段,比如:
-
扩展验证(EV)证书:这种证书会显示更详细的公司信息,通常用于银行、支付平台等高安全性场景。 -
SAN(Subject Alternative Name)字段:允许一个证书绑定多个域名。比如, www.example.com
和example.com
可以共用同一个证书。 -
Key Usage:指定证书可以用于哪些用途,比如加密通信、签名文件等。
浏览器会检查这些扩展字段,确保它们符合预期。如果发现异常,比如SAN字段中缺少某些域名,浏览器可能会警告用户。
第五步:正式启动TLS加密通信
经过前面的校验后,浏览器会与服务器进行TLS加密通信。
TLS握手的过程:
-
客户端发送ClientHello:浏览器告诉服务器支持的加密算法、协议版本等信息。 -
服务器发送ServerHello:服务器选择一种双方都支持的加密算法,并返回自己的证书。 -
客户端验证证书:浏览器再次验证服务器返回的证书。 -
生成共享密钥:双方协商出一个对称加密密钥,用于后续的数据传输。 -
完成握手:双方确认握手成功,开始加密通信。
若对整个TLS握手过程的细节感兴趣,可以参阅往期博文:《重磅!图文详解HTTPS协议通信全过程,结合抓包实战分析,带你一次看透HTTPS!》。
常见问题及解决方法
-
证书过期:及时更新证书,确保其有效期覆盖整个访问周期。 -
域名不匹配:确保证书上的域名与实际访问的域名完全一致。 -
证书链中断:检查服务器配置,确保证书链完整无误。 -
自签名证书:如果证书不是由可信CA签发的,浏览器会弹出警告。建议使用正式的CA签发的证书。
总结
通过以上五个步骤,浏览器能够有效地校验证书的有效性,保护用户的网络通信安全。虽然这个过程看似复杂,但实际上浏览器已经为我们做了大量工作。
作为普通用户,我们只需要记住一点:尽量访问带有绿色锁标志的HTTPS网站,避免点击未知链接或下载不可信的软件。
希望这篇文章能帮助你更好地理解浏览器的工作原理!如果你有任何疑问,欢迎留言交流。网络安全,我们一起守护!
附录:参考资源
-
Mozilla 官方文档: https://developer.mozilla.org/ -
Let’s Encrypt 官方博客: https://letsencrypt.org/ -
RFC 8446: TLS 1.3 标准: https://datatracker.ietf.org/doc/html/rfc8446
关注我,带你用“人话”读懂技术硬核! 🔥
原文始发于微信公众号(全栈安全):浏览器如何一步步校验证书的有效性?一文带你搞懂!
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论