我们如何确保浏览器实际使用 CA 检查 SSL 证书



我试图了解SSL是如何工作的。我的理解是,在您第一次(例如 https://www.google.com)到达服务器后,服务器会向您发送其公钥。然后,您的浏览器会检查以确保此公钥有效(未过期等)且合法;后者是通过与根 CA 进行核对来完成的,以确保公钥的签名与 CA 记录中的签名相匹配。如果全部签出,那么您的浏览器将使用该公钥加密所有内容,并且只有服务器可以解密它(因为只有服务器拥有私钥)。

现在,想想一个精心设计的中间人攻击:每次我的浏览器尝试检查CA时,中间服务器都会将我的请求重新路由到另一台服务器,而不是CA。该服务器验证任何签名!这样,即使我得到错误的证书,我的浏览器也不会知道。例如,这意味着我的ISP可以向我发送虚假证书并窃听我的连接。

对此的保护措施(如果我错了,请纠正我)是,要与CA检查证书,浏览器与CA建立SSL连接,但这次它不需要验证从CA获得的公钥;它知道所有CA的正确公钥。

但是,我怎么知道是否有人没有在我的计算机上安装假 CA 的假证书呢?我怎么知道每次升级浏览器时,也没有安装恶意内容?

这不是证书验证的工作方式。

这是一个离线过程。未联系 CA。相反,服务器证书包含 CA 的签名。此签名使用内置于浏览器(或操作系统)中的 CA 证书进行验证。

您可以在浏览器设置中查看受信任的根证书列表。

我如何知道有人没有在我的计算机上安装假 CA 的假证书?

嗯,这将是一个问题。事实上,这确实发生了。一些公司经常在他们颁发给员工的机器上安装假根证书,以允许他们拦截HTTPS连接。一些病毒扫描程序和防火墙产品也可以通过这种方式工作。

如果您担心,则需要锁定系统。

我怎么知道每次升级浏览器时,也没有安装恶意内容?

同样的事情。您从Mozilla,Microsoft,Apple,Google或Opera下载软件,并且必须信任它们。至少确保您从官方渠道获得软件(而不是在街上找到的某些 USB)。

我的理解是,在您第一次到达服务器(例如 https://www.google.com)后,服务器会向您发送其公钥。

不。它向您发送其证书,并且每次都这样做(忽略 SSL 会话恢复)。

然后,您的浏览器会检查以确保此公钥有效(未过期等)且合法;

不。它对证书执行此操作。公钥本身没有到期日期、数字签名等需要检查。

后者是通过与根 CA 进行核对来完成的,以确保公钥的签名与 CA 记录中的签名相匹配。

不。这是通过检查证书的签署者(颁发者)是否已受本地安装的 CA 证书集信任来完成的。与颁发 CA 没有联系。

如果全部签出,那么您的浏览器将使用该公钥加密所有内容,并且只有服务器可以解密它(因为只有服务器拥有私钥)。

不。这是错误信息,经常重复,总是错误的。SSL 使用通过密钥协议协议协商的对称会话密钥。如果你说的是真的,SSL只能在一个方向上安全地通信,而且会像潮湿的一周一样慢。

现在,想想一个精心设计的中间人攻击:每次我的浏览器尝试检查CA时,中间服务器都会将我的请求重新路由到另一台服务器,而不是CA。该服务器验证任何签名!这样,即使我得到错误的证书,我的浏览器也不会知道。例如,这意味着我的ISP可以向我发送虚假证书并窃听我的连接。

由于没有与 CA 通信,因此不存在此类攻击。

对此的保护措施(如果我错了,请纠正我)是,要与CA检查证书,浏览器与CA建立SSL连接,但这次它不需要验证从CA获得的公钥;它知道所有CA的正确公钥。

不。无需任何保护措施。见上文。

但是,我怎么知道是否有人没有在我的计算机上安装假 CA 的假证书呢?我怎么知道每次升级浏览器时,也没有安装恶意内容?

你没有。

最新更新