为什么当有多个证书时浏览器知道使用哪个证书?

为什么当有多个证书时浏览器知道使用哪个证书?

我对服务器和网络领域还很陌生,希望这些问题清晰明了,不会太过琐碎。我最近遇到了以下情况:

  1. 有一个根证书 A,几个月后将过期。还有另一个新的根证书 B,旨在替代 A。A 和 B 都是自签名的。A 的 CA 受到新旧浏览器/操作系统的信任,而 B 的 CA 仅受到现代浏览器/操作系统的信任

  2. 我们的服务器目前正在使用交叉证书 A->B(B 由 A 签名)。但是,由于 A 即将过期,我们应用了另一个交叉证书 C->B(B 由 C 签名,C 的 CA 受到新旧浏览器/操作系统的信任)作为替代。

  3. 现在,在 UAT 环境中,我们更新证书 C->B,对于客户端,我尝试使用一些旧版浏览器进行测试,我验证了只有 A 的 CA 和 C 的 CA 是可信的,而 B 的 CA 则不可信。对于 PROD 环境,我们保持不变,即使用证书 A->B

  4. 我使用上述浏览器访问 UAT 站点,并首次验证了所用的证书是 A->B。令人惊讶的是,随后访问 UAT 和 PROD 站点时,所用的证书是 C->B(在客户端检查)。

我的问题是,这是正常行为吗?为什么客户端自首次访问 UAT 站点以来就“知道”使用 C->B?我还用它openssl s_client来验证 PROD 服务器是否仍在使用 A->B。浏览器如何知道要使用哪个证书并相应地“更新”该证书?

编辑于 2022-Dec-13

  1. 我们的主要目的是支持非常旧的浏览器/操作系统和现代浏览器/操作系统。即,即使证书 A 已过期,所有浏览器都可以成功访问我们的网站。
  2. 我认为我的主要问题或疑问是以下情况是否属实:
  • 旧浏览器,首次访问 UAT 站点时,由于某些缓存机制,显示服务器正在使用证书 A->B
  • 首次访问 UAT 站点后,服务器实际上会将新证书 C->B “推送” 到服务器中配置的客户端。现在,浏览器甚至操作系统级别都承认最新证书是 C->B,而不再是 A->B。
  • 虽然 C->B 已被确认,但证书 A->B 仍保存在浏览器/操作系统中。但浏览器不知何故知道使用较新的证书 C->B 进行验证。这意味着我们的目的可以实现。

答案1

回答你的问题?

从链接中,清除浏览器缓存/ SSL 状态可能是您需要做的:

Web 浏览器会缓存 SSL 证书以加快浏览体验。通常,这不是问题。但是,当您为网站开发页面或安装新证书时,浏览器的 SSL 状态可能会造成阻碍。例如,安装新 SSL 证书后,您可能无法在浏览器的地址栏中看到挂锁图标。

相关内容