HTTP 协议设计的初衷就是简单方便,但是随着 Web 的发展和交互的复杂,也引入了一些安全性问题:
针对 HTTP 协议的以上问题,想必你已经知道了目前的解决方案,那就是使用 HTTPS 协议来传输内容,HTTPS 的英文全名是 HTTP Secure 或 HTTP over SSL,即基于 SSL 的安全 HTTP 协议。SSL 会建立一个安全的通信线路,在此线路上传输的内容都会经过加密处理,此外 SSL 还通过证书的方式来确认通信双方的身份,这样就可以从源头上杜绝了通信方被伪装以及信息被窃听和篡改的可能性,从而确保 HTTP 通信的安全。
HTTPS 简介
HTTPS 协议并非是应用层的一种新协议,只是将 HTTP 通信接口部分用 SSL 协议代替。通常,HTTP 会直接和 TCP 通信,当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信。所以,所谓的 HTTPS,就是身披 SSL 协议外壳的 HTTP 而已,以下是普通的 HTTP 通信和 HTTPS 通信的架构对比图:
采用 SSL 后,HTTP 就拥有了 HTTPS 的加密、证书和完整性保护等功能。
SSL 是独立于 HTTP 的协议,所以不光是 HTTP 协议,其它运行在应用层的 SMTP 和 Telnet 等协议均可配合 SSL 协议使用。可以说 SSL 是当今世界上应用最为广泛的网络安全技术。
在具体介绍 HTTPS 的底层工作原理之前,我们有必要先介绍几个 Web 安全相关的术语。
对称加密
在对称加密算法中,加密和解密使用的密钥是相同的。在互联网上转发密钥,如果通信被监听那么密钥就会落入攻击者之手,存在安全隐患,另外还得设法安全地保管接收到的密钥。
非对称加密
在非对称加密算法中,加密使用的密钥和解密使用的密钥是不相同的。一把是作为公开的公钥,另一把是作为谁都不能给的私钥。公钥加密的信息,只有私钥才能解密;私钥加密的信息,只有公钥才能解密。
使用这种加密方式,发送密文的一方使用公钥进行加密,对方收到加密信息后,使用私钥进行解密。利用这种方式,不需要发送用来解密的私钥,也不必担心密钥被攻击者窃听而盗走,故而安全性更高,但与对称加密相比,算法和实现更加复杂,处理速度更慢。
HTTPS 充分两种加密方式的优势,在交换密钥环节使用非对称加密,之后的建立通信交换报文阶段则使用对称加密,后面我们介绍 HTTPS 底层工作原理时还会详细介绍。
数字证书
通过开源程序 OpenSSL 提供的命令就可以生成私钥和公钥,但是需要权威机构颁发证书(Certificate)才能被承认,否则我们无法判断通信中传递的公钥是否真的是目标服务器返回的。
生成证书需要发起一个公钥证书请求,然后将这个请求发给一个权威机构(客户端和服务端都信任的第三方结构)去认证,这个权威机构我们称之为 CA(Certificate Authority)。CA 判明申请者身份后,会通过私钥对申请的公钥进行数字签名,然后分配这个已签名的公钥,并将该公钥放入公钥证书后一起返回。
服务器会将这份 CA 颁发的公钥证书(也可以叫做数字证书)发送给客户端,以便通过非对称加密方式进行通信。
接到证书的客户端使用 CA 提供的公钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可明确两件事:1、认证服务器公钥的是真实有效的 CA 机构;2、服务器的公钥是值得信赖的。
此处 CA 的公钥必须安全转交给客户端,如何安全转交是件很困难的事,因此,大多数浏览器开发商发布版本时,会事先在内部植入常见 CA 的公钥。