一句话结论:HTTPS保证了防窃听、防篡改和保障身份可信
本文完整阅读大约需要3分钟。
概述
HTTP 是明文传输的,在一个广播域内,所有的设备都是可以收到传输的数据。
数据安全可能遇到窃听、篡改、发送者身份不可靠三个问题。所以 TLS层( 传输安全协议)提供加密、数字签名、和数字证书来解决这三个问题
具体措施
加密-防窃听
加密算法分为对称加密和非对称加密,TLS 使用的是非对称加密与对称加密结合。
- 对称加密:对称加密即加密和解密用同一个密钥,其优点是效率高,但没有办法直接在网络上传播(直接传播对称密钥会使密钥也被窃听)。
- 非对称加密:非对称加密是指用一对密钥之一加密,另一个解密(一个叫公钥,一个叫私钥)。可以用公钥加密,也可以用私钥加密。非对称加密优点是可以在网络通信的场景中使用——所有网络的用户都公开自己的公钥。发送者用接收者的公钥对数据加密,这样只有接收者可以解开这份加密过的数据。但缺点是加解密的效率低。
数字签名-防篡改
加密使得发送方不用担心数据被别人看到,但接收方并不能保证自己收到的数据是可信的。这份数据可能被篡改过。所以引入了数字签名来保证接收方收到数据时可以判断数据有没有被别人修改过。
数字签名类似于校验码,会附加在要传输的原信息的尾部,原信息 数字签名任何一者的修改过都会导致无法通过校验。
数字签名的实现-私钥加密摘要
数字签名是用发送方的私钥加密原文件的摘要得到的。摘要即原文件的一个哈希映射,因为体积小,加密会更快。
接收方接收到原文件和数字签名时,会做两件事。
- 将原文件计算,得到摘要 m
- 用 A 的公钥解密数字签名,得到摘要 n
如果 m、n 两份摘要相同,说明原文件没有被篡改过。
注意:数字签名并没有防止窃听,只能保证发送的数据和收到的数据是一样的
数字证书-身份认证
上面的流程中,使用到了 A 的公钥去解密。所以还存在一个问题,即这个公钥可靠吗?即 A 这个用户真的存在吗,或者它真的是 A 本人吗?
所以有了数字证书颁发机构和数字证书,用来做发送方的身份确认。
数字证书颁发机构(CA)是通信中的权威机构,所有用户都信任它。
发送方 A 将会将自己的公钥交给 CA,CA 会用自己私钥对发送方 A 的公钥加密,生成 A 的证书,给 A。
之后的通信过程中,A 会首先把自己的公钥证书(用 CA 私钥加密的 A 的公钥)发送给 B,B 用 CA 的公钥解密收到的证书。解密成功,才认为这个公钥是可信的。
HTTPS(TLS) 握手流程
TLS 的握手过程可以简单分为两个过程:客户端拿到服务端的 CA 证书,验证其有效性得到了服务端的公钥;客户端和服务端分别生成同样的密钥,之后用生成的密钥加密通信。
- 客户端向服务器发出加密通信的请求,并携带随机数 i
- 服务端回应,发送服务端 CA 证书给客户端,并携带随机数 j
- 客户端校验 CA 证书,得到服务端的公钥
- 客户端用服务端的公钥加密一个随机数 k,发送
- 客户端和服务端分别用 ijk 三个随机数生成相同的密钥(对称密钥)
- 服务端发送握手完毕的消息,之后使用对称密钥加密通信