HTTPS 如何保证通信安全

2020.09.16 19:26

为什么 HTTP 不安全

HTTP 在计算机网络中属于应用层,是一个基于 TCP/IP 的协议。应用层以下的网络本身就是不安全的,再加上 HTTP 协议在网络中传递的都是明文,而浏览器向服务器发起一次请求实际上会经过很多个路由器,如果中间有不安好心的人,那么可能导致几种情况:

  1. 内容被窃听,导致个人银行卡密码这类机密信息泄露。

  2. 不验证通信方的身份,通信方可能是伪装的。

  3. 无法验证报文完整性,报文可能遭到篡改。

HTTPS 并不是新协议,而是让 HTTP 先和 TLS(Transport Layer Security)通信,再由 TLS 和 TCP 通信,也就是说 HTTPS 使用了隧道进行通信。

TLS 的前身叫 SSL(Secure Sockets Layer),期间经历了几个版本,这里我们认为他们是同一个东西。

通过使用 TLS/SSL,HTTPS 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。因此本文其实主要是讲 TLS/SSL 如何保证安全。

加密

既然通信本身不安全,那么自然想到可以使用加密算法。现代密码学将加密算法分为 2 种:对称加密和非对称加密。对称加密的加密和解密都使用同一把密钥,问题是显而易见的:如何把密钥通过不安全的网络传递给通信方?非对称加密解决了这个问题,它将密钥分为了公钥和私钥,公钥可以通过网络传递给他人,无需安全传输,私钥自行保管。传递信息时,先将自己的公钥互相传递给对方,然后用对方的公钥加密信息,自己的私钥解密信息,或者自己的私钥加密信息,对方的公钥解密信息。然而非对称加密主要问题在于计算复杂度相当高,计算速度和对称加密差了好几个数量级,并且密钥的长度也决定了它能加密多长的密文,因此实际上 TLS/SSL 是对称加密和非对称加密结合使用,使用非对称加密将对称加密的密钥传递给对方,后续的通信就使用对称加密进行通信来保证通信效率。

对称加密非对称加密
优点计算速度快可以更安全地将公钥传输给通信发送方
缺点无法将密钥安全地传递给通信方
加密明文长度不受限制
计算速度慢
明文长度不能超过公钥长度

实际上,单纯用非对称加密不仅是计算速度上受限制,其实也不能保证通信双方是可信任的,依然避免不了中间人攻击:

中间人攻击

这主要是因为公钥在不安全的网络信道中传递也是可能被篡改的,那么要怎么解决呢?这个时候我们需要引入权威的数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书。

CA 是客户端和服务端都信赖的第三方机构,CA 也有公钥和私钥,公钥一般内置在操作系统中,无需经过网络传递,自然也保证了 CA 公钥的安全性。

具体流程是服务器的运营人员向 CA 提出公钥的申请,CA 在判明申请者的身份(通过指定 DNS 解析、挂载指定文件等方式)之后,会对使用自己(CA)的私钥对该申请者的负载信息(公钥、服务器信息、证书过期时间等)的哈希值做数字签名,然后将数字签名和该申请者的数据放入公钥证书后绑定在一起。

签名过程

客户端向服务器发起请求时,服务器会先把证书发给客户端,证书分为负载信息和签名,客户端使用 CA 的公钥对签名进行解密得到负载信息的哈希值,再对比真实负载信息的哈希值,如果一致则说明验证通过,可以进行后续的安全通信了。

验证过程

参考资料