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