Chrome 和 Firefox 如何验证 SSL 证书?

信息安全 tls 证书 公钥基础设施 证书颁发机构
2021-08-23 03:34:55

Chrome 和 Firefox 如何验证 SSL 证书?他们是否从 SSL 认证网站(如 GeoTrust)请求数据,以验证从 Web 服务器收到的证书?

4个回答

浏览器和/或操作系统往往带有一个预定义的 CA 证书列表,用作信任锚来检查它们连接到的服务器的证书。它们都是可定制的(除了 EV 证书,它的根证书被硬编码到浏览器中,尽管您可以禁用它们......错误除外)。

Firefox在所有平台上都使用自己的列表。

Internet Explorer 和 Chrome 在 Windows 上使用操作系统的证书存储库。默认值可通过 Microsoft 的根证书程序获得。

苹果也有它的计划

信任一个先验未知的服务器证书是通过在该证书和浏览器的信任锚之一之间建立一个证书路径来完成的。这是按照 RFC 3280/RFC 5280 中的定义完成的。

此外,还可以通过 CRL 或通过 OCSP 检查证书吊销。

因此不可能拦截浏览器和 CA 之间的通信来伪造有效证书,因为证书可能已经在浏览器的缓存中?

重申我对 Wug 的回答所做的评论:信任锚存储库不是缓存缓存是一个动态占位符,旨在保留您最近访问过的内容,基于您很快会再次需要它们的假设。相反,您的受信任证书列表绝不能根据您当前浏览的内容自动更新。(它可以通过自动安全更新进行更新,但这是一个不同的问题。)

每次建立新的 SSL/TLS 会话时都会获得服务器证书,浏览器每次都必须对其进行验证。它没有被缓存。(你可以有一些 OCSP 缓存,但那是为了提高性能并且只保留很短的时间。这只是为了在访问时验证撤销状态。)

联系 CA 只是为了吊销证书。您不会以其他方式联系 CA。CA 证书(您受信任的锚点)是一个给定的“信仰飞跃”,由您的操作系统/浏览器为您捆绑(您可以明确选择,但就给定连接而言,它是固定的)。充其量您可以阻止证书吊销检查的发生(这可能会导致您的浏览器使其验证失败,具体取决于其设置)。

Web 服务器将根据请求将整个证书链发送给客户端。然后,浏览器(或其他验证器)可以使用本地存储的 CA 证书检查链中的最高证书。

大多数操作系统都保留了浏览器可以出于此类目的访问的权威证书的缓存,否则浏览器将在某个地方拥有自己的一组证书。

一个证书可以由另一个证书签名,形成一个“信任链”,通常终止于由 GeoTrust、Verisign、Godaddy 等实体提供的自签名权威证书。

对于安全 SE 站点来说,这将是一个更好的问题。

谷歌浏览器,具体来说,我不是 100% 确定使用操作系统缓存,但您可以通过 Wrench -> Settings -> Show Advanced Settings -> HTTPS/SSL -> Manage Certificates -> Trusted Root Certificate Authorities 添加权威证书和在那里添加一个权威的 CA 证书。

正如 Wug 所解释的,验证从服务器证书到链中的最高证书进行。浏览器将查看证书属性并执行基本验证,例如确保 URL 与Issued to字段匹配、Issued By字段包含受信任的证书颁发机构、字段中的到期日期看起来不错Valid From等。

此外,每个证书都包含指向证书撤销列表 ( CRL Distribution Points) 的 URL,客户端将尝试从此类 URL 下载列表并确保手头的证书没有被撤销。

回答你的问题

他们是否从诸如 GeoTrust 之类的 SSL 认证网站请求数据来验证从 Web 服务器收到的证书?

的,浏览器将执行基本验证,然后联系 CA 授权服务器(通过 CRL 点)以确保证书仍然有效。

这是我对证书验证的看法。假设 Web 证书具有正确的名称,浏览器会尝试查找签署 Web 服务器证书的证书颁发机构以检索签署者的公钥。签名证书颁发机构可能是 CA 链的一部分

使用公钥可以解密网站证书上的签名(这确保只有 CA 可以签名,除非他们的私钥被泄露)以显示 Web 服务器证书的哈希值。浏览器还计算 Web 服务器证书的哈希值,如果两个哈希值匹配,则证明证书颁发机构签署了证书。

如果无法找到签名者的公钥或哈希值不匹配,则证书无效。

该系统的问题在于证书颁发机构并不完全可靠。