HTTPS安全FAQ

来源:北京老张的博客

今天发现关于HTTPS安全方面的问题,很多推友们都比较迷惑,本人在这里简单介绍一下相关的问题,并做一下汇总。欢迎留言提问!

Q: 什么是https?
A: https是Secure Hyper Text Transfer Protocol(安全超文本传输协议)的缩写,是一种安全性很高的传输协议,远比普通的http协议安全得多。

Q: 为什么https协议更安全?安全在哪里?
A: https协议对所有的传输内容进行身份验证、加密和完整性验证,如果https连接成功,则能够保证:

  1. 如果你的线路被黑客、ISP或者GFW窃听,窃听者也得不到你的传输内容,甚至得不到你所访问的具体地址。
  2. GFW和ISP既不能篡改你发送的内容,也不能篡改你接收的内容,最多只能掐断你的连接。
  3. 你所访问的主机被不怀好意者冒充。
  4. 撞墙(IP封禁除外)

而传统的http协议可以窃听,篡改,撞墙等等。不过https保证:

  1. 计算机自身的安全,如抗病毒等。即使使用了https也不能保证传输的内容是无毒的。但是能够保证如果有都的话一定是对方主机传送给你的。
  2. 窃听者不知道你在与哪个主机通信。因为直接建立连接必须要知道对方主机的IP。
  3. 连接到被block的IP。
  4. 你的身份不暴露。比如你在推上叽叽喳喳的吧家底都翻出来,这个不是https能控制的。。。

Q: https的原理是什么?对信息安全不感兴趣的童鞋请无视此问题。
A: 一般来说,安全性分三个部分:

  1. 保密性——免于被窃听。https的保密性是通过使用不可能破解的加密算法对通讯内容进行加密而实现的。
  2. 完整性——免于被篡改。https的完整性是通过数字签名来实现的。这也不可能破解
  3. 身份验证——保证与你通信的对方是其所声称的。比如你通过https访问www.google.com,https协议保证你访问的主机确实是www.google.com的主机。然而,这一点上,https的设计(或者说PKI的设计)有缺陷

PKI 是负责进行身份验证的体系。 要讨论http的身份验证,我么不妨复习一下非对称密码体制。 非对称密钥对有一个神奇的性质就是: 原文 –通过私钥处理–> 签名 –通过公钥处理–> 原文 不同的私钥处理同样的原文得到的是不同的签名。比如主机h有一个原文P 想要发布,不想被人篡改,方法是h产生一对非对称密钥,妥善保管私钥,并让所有人得到公钥。然后用私钥处理P得到签名S。向所有人发送P和S。如果想验证 P是不是h所发,那么只要用h的公钥处理S,如果结果与P相等就表示没有被篡改,如果不等就说明有问题了。 但是这里问题在于,怎样安全的向每个人发布h的公钥呢?这需要PKI,即公钥基础设施的协助。

Q: https的身份验证功能有什么缺陷?
A: 现在已经知道有一种很综合的方法来进行https的身份验证攻击,也称“SSL中间人攻击”,他使用了PKI的管理上的漏洞来进行攻击,还必须伴有DNS欺骗等。 主要的方法是,首先,正常的主机www.google.com在CA1(顺便一提,mail.google.com现在的证书提供这是Thawte SGC CA) 上面有一张完好的证书。攻击者跑到CA2上说,“你必须承认四项基本原则,承认台湾是中国不可分割的一部分,以及我就是www.google.com”。 结果CA2信以为真,并给攻击者签署了证书。这之后攻击者拿着这份证书给受害者看,受害者的机器一看是CA2签署的,就也信以为真。之后的杯具大家就都知 道了。

Q: 那怎么保证https的安全性?
A: 实际上,https现有的全部安全问题基本都集中在PKI和CA的管理上,也就是我们所说的CA机构的权威性和可信性上。因此解决方法也很简单,如果你信任一个网站的话,就要记得签署该网站证书的CA。如果你发现CA是中国的,那么你就要提高警惕了,有可能会有问题。注意将根本没法信任的CA如CNNIC剔除出去。另外,DNS劫持也是SSL中间人攻击的必要一环,因此尽量使用第三方的DNS服务如8.8.8.8或者OpenDNS等,在DNS污染遍地开花的时代,这是非常有必要的。

欢迎大家继续提问!


2 条评论:

Xizhi Zhu 说...

纠正一下:
如果你的线路被黑客、ISP或者GFW窃听,窃听者也得不到你的传输内容,甚至得不到你所访问的具体地址。
=================
能够知道你访问的IP地址,但不知道HTTP的具体URL参数,域名也能够通过DNS查询查处

北京老张 说...

嗯,里面提到IP地址能够得到。
而且注意,即使知道域名也是得不到具体地址的。