HTTPS身份验证和会话劫持

时间:2015-08-13 14:56:04

标签: security encryption https

当我在浏览器中第一次输入www.google.com时,我输入了一个URL。 我确信发送的内容包含URL。然后返回的HTML页面显示在屏幕上。

我的浏览器如何确保响应我的请求的服务器是真正的Google服务器而不是其他人的服务器(中间人)?

我可以看到也建立了HTTPS连接。我认为这与上述问题有关。

有人可以使用我的www.google.com示例详细解答这个问题吗?

我知道什么是公钥和私钥。我知道公钥可用于加密消息,然后其私钥用于解密。私钥可用于做数字签名,公钥可用于验证此签名。 但我不知道如何应用www.google.com案例。

至于使用公钥来验证签名,我们该怎么做?我们使用公钥来解密消息,看看我们是否可以获得之前定义的内容?

被修改

  1. 一旦浏览器知道它是一个发送回页面的真实谷歌服务器,浏览器如何确保页面内容本身不被其他人修改?发回的第一页是否已加密?
  2. 对称加密是否用于以下请求和响应?
  3. 网址本身是否已加密?

3 个答案:

答案 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的根目录。它们本地安装在您的浏览器上,因此很难欺骗攻击者。