前后端 HTTPS
HTTPS = HTTP + SSL/TLS。
一、HTTP 的问题
HTTP 的内容是明文传输的,并且会经过中间代理服务器、路由器、Wifi 热点、通信服务运营商等多个物理节点。如果信息在传输过程中被挟持,传输的内容就完全暴露了,并且挟持者还可以任意篡改信息而不会被察觉,这便是中间人攻击。
二、HTTPS = HTTP + SSL/TLS
为此,HTTPS 在 HTTP 的基础上引入了 SSL/TLS 协议,增加了加密传输、防篡改校验、身份校验功能。
三、加密方式
常见的加密方式有对称加密和非对称加密两种加密方式:
- 对称加密:
- 加密和解密使用同一个密钥
- 运算速度快
- 密钥需要保密,否则任何人都可以解密内容,因此双方交换密钥是一个困难
- 非对称加密:
- 使用两个密钥,公钥加密,密钥解密
- 运算速度更慢
- 公钥可以任意分发而不用担心内容被解密
HTTPS 采用的是对称加密和非对称加密结合的 “混合加密” 方式,具体来说,
- 在连接建立之前,采用非对称加密的方式交换对话密钥
- 生成随机数,将其作为对话密钥
- 使用公钥加密随机数,将加密后结果发给服务端
- 服务端接收加密后结果,使用密钥解密,获取到对话密钥
- 在通信过程中,使用对话密钥对称加密数据
四、证书
证书由 CA(数字证书认证机构)颁发,其核心作用是验证服务端是否值得信赖。
验证证书的过程如下:
- 从服务器获取到证书
- 验证证书有效性
- 根据证书信息,计算得到一个 hash 值
- 从本地预装的 CA 公钥列表中找到对应 CA 的公钥,对证书中的签名进行解密,得到一个 hash 值
- 比较两个 hash 值是否相等