使用更安全的HTTP——HTTPS

HTTP的缺点

HTTP 主要有这些不足:

  • 通信使用明文(不加密),内容可能会被窃听(内容需要加密,或者一个可信的传输通道)
  • 不验证通信方的身份,因此有可能遭遇伪装(需要对通信双方进行认证)
  • 无法证明报文的完整性,所以有可能已遭篡改(信息完整性)

HTTP+ 加密 + 认证 + 完整性保护=HTTPS

为了统一解决上述这些问题,需要在 HTTP 上再加入加密处理和认证等机制。我们把添加了加密及认证机制的 HTTP 称为 HTTPS(HTTP Secure)。

通常,HTTP 直接和 TCP 通信。当使用 HTTPS 时,则演变HTTP成先和 SSL 通信,再由 SSL 和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披 SSL 协议这层外壳的 HTTP。

使用更安全的HTTP——HTTPS

相互交换**的公开**加密技术——一步一步告诉你为什么需要一个证书机构

对称加密加密内容

使用对称加密时,虽然加密了内容,但**的交换却成了一个问题,在协商好之前,我们传递**仍然是明文状态,被第三方窃取以后,这样的加密方式无异于脱了裤子放屁,不考虑。
使用更安全的HTTP——HTTPS

非对称加密加密内容

采取公私钥对的形式,使用公钥加密内容,只能使用私钥才能解开,那么通信双方互相使用对方的公钥加密内容,再彼此使用私钥解开,即可实现加密通信,但这样做会导致大量的计算成本。
使用更安全的HTTP——HTTPS

采取混合加密方式

也就是先用非对称方式协商一个对称加密的共享**,双方再使用共享**进行通信即可。但这也受到了第三方的攻击,第三方只要篡改了公钥信息,假装自己和另一方协商了共享**,这样的情况也不安全。
使用更安全的HTTP——HTTPS
内容加密最关键的地方,就是**如何安全可靠的传输,这时就涉及到一个可信的第三方。

可信第三方——证书机构

数字证书认证机构(Certificate Authority,CA)处于客户端与服务器双方都可信赖的第三方机构的立场上。威瑞信(VeriSign)就是其中一家非常有名的数字证书认证机构。我们来介绍一下数字证书认证机构的业务流程。

  • 首先,服务器的运营人员向CA提出公开**的申请。CA在判明提出申请者的身份之后,会对已申请的公开**做数字签名,然后分配这个已签名的公开**,并将该公开**放入公钥证书后绑定在一起。

  • 服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,以进行公开**加密方式通信。公钥证书也可叫做数字证书或直接称为证书。

  • 接到证书的客户端可使用数字证书认证机构的公开**,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可明确两件事:一,认证服务器的公开**的是真实有效的数字证书认证机构。二,服务器的公开**是值得信赖的。

此处认证机关的公开**必须安全地转交给客户端。使用通信方式时,如何安全转交是一件很困难的事,因此,多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开**。
使用更安全的HTTP——HTTPS

HTTPS通信步骤

使用更安全的HTTP——HTTPS

  1. 客户端通过发送 Client Hello 报文开始 SSL 通信。报文中包含客户端支持的 SSL 的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及**长度等)。

  2. 服务器可进行 SSL 通信时,会以 Server Hello 报文作为应答。和客户端一样,在报文中包含 SSL 版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。

  3. 之后服务器发送 Certificate 报文。报文中包含公开**证书。

  4. 最后服务器发送 Server Hello Done 报文通知客户端,最初阶段的 SSL 握手协商部分结束。

  5. SSL 第一次握手结束之后,客户端以 Client Key Exchange 报文作为回应。报文中包含通信加密中使用的一种被称为 Pre-master secret 的随机密码串。该报文已用步骤 3 中的公开**进行加密。

  6. 接着客户端继续发送 Change Cipher Spec 报文。该报文会提示服务器,在此报文之后的通信会采用 Pre-master secret **加密。

  7. 客户端发送 Finished 报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。

  8. 服务器同样发送 Change Cipher Spec 报文。

  9. 服务器同样发送 Finished 报文。

  10. 服务器和客户端的 Finished 报文交换完毕之后,SSL 连接就算建立完成。当然,通信会受到 SSL 的保护。从此处开始进行应用层协议的通信,即发送 HTTP 请求。

  11. 应用层协议通信,即发送 HTTP 响应。

  12. 最后由客户端断开连接。断开连接时,发送 close_notify 报文。上图做了一些省略,这步之后再发送 TCP FIN 报文来关闭与 TCP的通信。

在以上流程中,应用层发送数据时会附加一种叫做 MAC(Message Authentication Code)的报文摘要。MAC 能够查知报文是否遭到篡改,从而保护报文的完整性。

使用更安全的HTTP——HTTPS
上图图解了从服务器发送公钥证书到客户端与服务器协商好**的过程。

SSL与TLS

IETF 以 SSL3.0 为基准,后又制定了 TLS1.0、TLS1.1 和 TLS1.2。TSL 是以 SSL 为原型开发的协议,有时会统一称该协议为 SSL。当前主流的版本是 SSL3.0 和 TLS1.0。由于 SSL1.0 协议在设计之初被发现出了问题,就没有实际投入使用。SSL2.0 也被发现存在问题,所以很多浏览器直接废除了该协议版本。

HTTPS使用的成本

  1. 证书是要收费的
  2. HTTPS要发送比HTTP多得多的包,意味着要占用更多的网络资源
  3. HTTPS在服务器与客户端双方都需要加解密,会涉及一笔CPU消耗