当我在浏览器中第一次输入www.google.com
时,我输入了一个URL。
我确信发送的内容包含URL。然后返回的HTML页面显示在屏幕上。
我的浏览器如何确保响应我的请求的服务器是真正的Google服务器而不是其他人的服务器(中间人)?
我可以看到也建立了HTTPS连接。我认为这与上述问题有关。
有人可以使用我的www.google.com
示例详细解答这个问题吗?
我知道什么是公钥和私钥。我知道公钥可用于加密消息,然后其私钥用于解密。私钥可用于做数字签名,公钥可用于验证此签名。
但我不知道如何应用www.google.com
案例。
至于使用公钥来验证签名,我们该怎么做?我们使用公钥来解密消息,看看我们是否可以获得之前定义的内容?
被修改
答案 0 :(得分:2)
https使用签名证书来确保响应服务器的身份。
请求将发送到您的名称解析声称名称解析为的IP地址。这不太可靠,因为你自己可以很容易地改变分辨率。
然而,来自服务器的响应包含已为主机名颁发的证书(此处为www.google.com)。这还没有提供您正在寻找的安全性,但它让我们更接近。
验证证书是否说明您的本地浏览器是否尝试验证证书(其内容)。这是通过使用"证书链"来完成的。可以使用其他证书签署证书。如果您信任其他证书,那么您也可以信任那些已使用您信任的证书签名的证书。这样就创建了一个链,可以达到所谓的"根证书"。这些是本地安装在系统内部的证书,因此已知并可供您的浏览器使用,因此攻击者不会欺骗它们。
现实一如既往地复杂一点,但上面应该会让你了解事情是如何运作的。
注意:您也可以自己创建证书,甚至可以自己签名。例如,如果您只想建立与自己的https服务器的加密连接,这实际上很有用。但是这样的自签名证书不证明服务器身份。这只能通过使用已按上述方式签名的证书来完成。
答案 1 :(得分:1)
一旦浏览器知道它是一个真正的谷歌服务器发回 该页面,浏览器如何确保页面内容本身 没有被其他人修改过?
浏览器验证在SSL握手中发回的证书是否由浏览器信任的证书颁发机构(CA)签名,并检查某些字段是否设置为正确的值(例如,主题或备用名称设置为显示的域名和有效的from和to日期是最新的。
如果使用中间证书,链中可能有多个证书,这很可能。只要链中的倒数第二个证书由受信任的根签名,那么一切都很好。
发回的第一页是否已加密?
是的,一旦进行SSL握手,所有内容都会被加密。这包括从浏览器发送的初始请求中的任何数据(例如cookie或查询字符串)。
对称加密是否用于以下请求和响应?
是的,虽然密钥是客户端和服务器生成的随机数的函数,并且是一个" pre master secret"从客户端发送到由证书公钥加密的服务器(或者在Diffie-Hellman的情况下由一次生成的密钥加密)。
网址本身是否已加密?
域名以明文形式发送,用于服务器名称指示扩展,并且DNS查找和目标IP也可以由连接上的evesdropper知道。
虽然URL路径和查询字符串已加密。
答案 2 :(得分:0)
他们使用证书来验证身份和签名。 当服务器响应您时,它包含为该特定主机颁发的证书。在您的示例中,这将是www.google.com 这提供了某种信任,因为根证书包含在您的浏览器安装中。 说到根证书,您开始构建信任链,并且一个证书由另一个证书签名,直到它到达此trusttree的根目录。它们本地安装在您的浏览器上,因此很难欺骗攻击者。