证书验证是否完全在本地完成?

信息安全 证书
2021-09-05 19:56:01

我的结论是否正确,即希望与提供所述证书的服务器通信的客户端对证书的验证完全在本地完成?如在,客户端应该有本地可用的所有信息(例如,CA 的公钥,用于签署服务器证书)?

我认为,例外情况是将通过证书提供的 ip 地址/dns 信息与真实世界的服务器地址和域名进行比较。

另一个问题(SSL Certificate Trust Model)的答案实际上明确指出“实际上这就是证书的全部思想:允许离线验证。”。真的吗?

2个回答

这几乎是真的。:) 但不完全是。

如果出现妥协,可以撤销证书。发现证书是否在任何给定时间被吊销的唯一方法基本上是联系颁发它的 CA。任何在证书本身中签名的信息(适合离线验证)对于被撤销的证书都是有效的。

有两种用于检查撤销的协议,CRL 和 OCSP。CRL 只是 CA 发布的已撤销证书的列表,而 OCSP 是一种 Web 服务,但想法是一样的,任何进行证书验证的客户端都应该查看并检查证书是否恰好被撤销。

事实上,证书验证实现中一个相当普遍的缺陷是它们不检查吊销。

大多数验证是使用本地可用信息完成的。但在某些情况下,需要访问互联网,如果无法访问,则验证可能会失败或验证将花费很长时间(即获取在线资源的超时):

  • 为了获取有关证书吊销状态的最新信息,大多数客户端将执行OCSP 请求(至少对于 EV 证书),除非 OCSP 响应已经在 TLS 握手(OCSP 装订)中发送。请注意,这不会对每个请求都进行,即信息将被缓存一段时间。类似的客户端可能会不时上线以更新他们使用的任何 CRL 列表(但大多数默认情况下不再使用 CRL)。
  • 由于缺少中间证书,信任链的验证可能会失败。一些客户端(chrome 桌面浏览器?)尝试解决此类损坏的服务器设置,并尝试从 Internet下载缺少的中间证书。
  • 由于根 CA 未知,信任链的验证可能会失败。在这种情况下,某些操作系统 (Windows) 可能会在线询问受信任的服务器是否缺少此根 CA,然后将下载未知的根 CA并自动信任它以进行此连接和将来的连接。请参阅Windows 上的自动 CA 根证书更新
  • 此外,可能会进行检查以检测由于 CA 受损或由于错误而颁发的证书,这些证书用于中间人攻击。可以针对证书透明服务器或针对Convergence公证人进行此类检查。