了解证书验证的工作原理

信息安全 tls 证书 公钥基础设施 证书吊销
2021-09-09 18:10:41

我正在使用 Wireshark 来更好地了解 SSL 连接是如何建立的。我捕获了访问三个页面的流量:reddit、facebook 和这个。当然是所有的HTTPS。

Reddit:服务器发送后Certificate,它会发送一个Certificate Status带有 OCSP 服务器的响应。为什么服务器要发送此信息?不应该是客户端查询 OCSP 以了解服务器证书的状态吗?

安全 SE:我看到根本没有验证。客户端收到证书后,交换对称密钥,建立加密通道。为什么没有验证?

Facebook:SSL连接建立后,即加密通道创建后,客户端查询OCSP服务器。为什么在建立连接之前不查询 OCSP?

PS:如果有人对捕获感兴趣,只需运行 Wireshark,访问这些站点并使用ssl.handshake过滤器。

1个回答

验证是为了确保证书是真实的。目标是知道您看到的公钥是否真的由您打算与之交谈的服务器所有。这个验证需要很多步骤,在那里详细描述了它们的所有细节;它们中的大多数完全位于客户端计算机的本地,因此您不会看到它们以任何方式与网络跟踪一起出现。事实上,这就是证书的全部理念:允许离线验证。

证书验证还有一个步骤是不能真正离线的,那就是检查吊销状态根据定义,吊销是关于取消看起来不错的证书。确定撤销状态的三种主要方法是:

  • CRL:被撤销证书的列表由 CA(或授予该权力的另一个实体)定期发布。CRL 已签名,并在一段时间内有效(几小时或几天)。

  • OCSP:可以向正式指定的 OCSP 服务器询问证书的当前状态。OCSP 响应是经过签名的,并且有自己的有效期,因此 OCSP 响应在某种程度上等同于讨论单个证书的 CRL。

  • 什么都没有:很长一段时间以来,Web 浏览器都简单地假设没有证书被吊销过,这确实使实现变得更加简单。

CRL 下载或与 OCSP 服务器通信的 URL 写入证书本身。想要验证证书(您的 Web 浏览器;X.509 术语中的“依赖方”)并且不使用“无”的撤销检查方法的系统将希望下载新的 CRL 或获取新的 OCSP回复。但是,它也可能缓存获得的 CRL 或 OCSP 响应;尤其是 Windows,它维护一个 CRL 缓存,该缓存在重新启动时具有抵抗力。因此,如果浏览器下载 CRL,您将在您的网络跟踪中看到 CRL 下载大约每天一次(取决于 CRLnextUpdate字段)。您可以使用 . 检查 Windows CRL 缓存certutil -URLcache CRL请注意,Firefox 自己的验证完全独立于 Windows 对证书的支持。

OCSP 装订是 SSL/TLS 扩展,客户端可以通过它请求服务器以CertificateStatus消息的形式发送 OCSP 响应,该响应确定服务器证书未被撤销(目前):由于 OCSP 响应已注明日期并已签名,因此如何处理获得响应并不重要。由于服务器可以合理地假设与它通信的所有客户端都需要验证服务器发送的证书的吊销状态,因此使用服务器本身作为相关 OCSP 响应的缓存是有意义的。它避免了客户端打开与 OCSP 响应者的额外连接的需要,并且它也使 OCSP 响应者的生活更轻松,因为它只需要每隔几个小时签署一次新的响应。

并非所有服务器都支持 OCSP 装订,这就是为什么您不会看到所有服务器CertificateStatus的消息的原因。