HTTP 的全称是 Hyper Text Transfer Protocol - 超文本传输协议,位于 TCP/IP 模型中的应用层:

由于 HTTP 明文传输的特性,导致在传输的过程中任何人都可以截获、修改、伪造请求。且 HTTP 协议是无状态的,不能验证身份,也不能保证数据传输的完整性。
HTTPS 提供了三个关键指标:加密、数据一致性、身份认证。
从字面来看 HTTPS 只比 HTTP 多了一个 S,这个 S 指代的是 SSL/TLS 协议。
TLS(Transport Layer Security 传输安全层)是 SSL(Secure Socket Layer 安全套接字层)的后续版本(TLS协议,是SSL 3.0协议的升级版)它们是用于在互联网两台计算机之间用于身份验证和加密的一种协议。
SSL/TLS协议的基本思路是采用公钥加密法,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。
HTTPS 不是一个新的协议,它在 HTTP 和 TCP 之间建立了一个安全层,使用对称加密、非对称加密、证书认证,提高数据传输的安全性。

# 对称加密
对称加密指加密和解密使用的都是同样的密钥。对称加密存在安全问题,第一次约定加密方式和密钥的通信是明文的,如果被拦截,密钥就会被泄露,还有加密和解密都使用同一个密钥,每次通信都要传输密钥,密钥也可能被泄露。
# 非对称加密
非对称加密中有两个密钥,一个是公钥一个是私钥,公钥用于加密,私钥用于解密。公钥可以供任何人使用,私钥只能服务器端知道。
这样好像可以安全传输了,但实际并不行。因为使用公钥加密的数据只能用私钥解密,同样使用私钥加密的数据可以用公钥解密。因为,当客户端向服务端发送数据的时候,客户端用公钥加密,到服务端后需要服务端用私钥解密。当服务端向客户端发送数据时,需要用私钥加密,因为如果服务端使用公钥加密的话,客户端就无法解密了。这样如果攻击者想法获取了公钥,就可以解密服务端返回的数据了,不安全。
# 混合加密
可以看出无论单独使用对称加密还是非对称加密,都不是很安全。我们可以混合使用两种加密方式来解决问题。
- 使用非对称加密生成会话密钥
服务端向客户端发送公钥,客户生成一个会话密钥,用这个公钥加密后发回给服务端,服务端用私钥进行解密后获取到这个会话密钥。
- 双方使用这个会话密钥进行通信。
这样就算攻击者一开始获取到了公钥,因为没有私钥也无法解密。
# 摘要算法
在 TLS 中,主要通过摘要算法来验证完整性。摘要算法又称哈希算法,它能够把任意长度的数据压缩成一种固定长度的字符串,相同的输入始终得到相同的输出,这种算法只能进行单项加密,无法解密。
# 认证
通过混合加密虽然有效提升了数据传输的安全性,但也不是百分百安全的。攻击者可以获取服务端发给浏览器的公钥 key1 ,然后自己伪造一对公钥、私钥,然后将他伪造的私钥 key3 发给浏览器。

浏览器并不知道 key3 这个公钥是攻击者给的,就用 key3 加密了用于双方通信的 key2,发送给攻击者,攻击者用自己伪造的私钥将 key2 解密出来,再用从服务端获取的 key1 加密后发给服务器,这样后续的通信就会被攻击者窃取。

所以需要认证服务器的身份,让浏览器知道我在和谁通信,这个步骤通过数字证书认证完成。
大体步骤就是服务端向证书颁发机构申请证书,证书机构将证书发给服务器。当浏览器向服务端请求通信的时候,服务端将证书发给浏览器。浏览器收到后,生成一个证书签名,验证证书的真伪。验证成功后进行后续操作,验证失败则拒绝。
# 致谢
由于本人才疏学浅,文中难免有不到之处,烦请大佬们批评指正,在此表示感谢。
# 参考文章
← CSRF攻击