【发布时间】:2016-01-29 00:24:17
【问题描述】:
我正在尝试了解 SSL 的工作原理。我的理解是,在你第一次到达服务器后(比如https://www.google.com),服务器会向你发送它的公钥。然后,您的浏览器会检查以确保此公钥有效(未过期等)且合法;后者是通过与根 CA 进行检查来完成的,以确保公钥的签名与 CA 记录的内容相匹配。如果一切顺利,那么您的浏览器将使用该公钥加密所有内容,并且只有服务器可以解密它(因为只有服务器拥有私钥)。
现在,考虑一个精心设计的中间人攻击:每次我的浏览器尝试检查 CA 时,中间服务器都会将我的请求重新路由到另一个服务器,而不是 CA。该服务器验证任何签名!这样,即使我得到了错误的证书,我的浏览器也不会知道。例如,这意味着我的 ISP 可以向我发送假证书并窃听我的连接。
对此的防范(如果我错了,请纠正我)是为了检查 CA 的证书,浏览器会建立到 CA 的 SSL 连接,但这次它不需要验证公共从 CA 获得的密钥;它知道所有 CA 的正确公钥。
但是我怎么知道有人没有在我的计算机上为假 CA 安装假证书?我怎么知道每次升级浏览器时都没有安装恶意软件?
【问题讨论】:
-
这不是一个编程问题,也不是真正的主题。您在Information Security 上的运气可能会更好,但我肯定会在发布之前在那里进行彻底的搜索。我大约 99% 的人肯定它之前会被问过。您可能在这里也这样做过;查看您右侧(在招聘广告下方)的相关问题列表,其中第一个问题询问如何验证 SSL 证书。
标签: security ssl encryption https