http
http 是一种基于 tcp 协议的应用层协议
http协议的缺点
- 通信使用明文(不加密),内容可能被窃听
当用户在同一个局域网内时,可以很方便地通过抓包工具等获取其他用户发送的请求包,而请求包内的数据都是明文的状态,用户的机密信息(如登录信息等)很容易泄露。
- 不验证通信方身份,可能遭遇伪装
- 无法验证报文完整性,有可能遭篡改
HTTP + 加密 + 认证 + 完整性保护 = HTTPS
https
HTTPS (Hyper Text Transfer Protocol Secure) 在 tcp 和 http 之间增加了一层 SSL / TSL 协议,使得 http 包在被 tcp 封装之前先使用 SSL / TSL 封装了一遍,支持了加密、证书和完整性验证。
HTTPS 与 HTTP 协议不同,其流量承载在 443 端口。
原理
- 当客户端使用 https 访问 web server 时,他会对客户端出示一个证书,其中包括
- 证书的发布机构 CA
- 证书的有效期
- 公钥
- 证书所有者
- 签名
- 客户端收到证书后检测证书的有效性:
- 浏览器校验证书中的证书所有者、有效期
- 浏览器查找操作系统中内置的受信任的证书颁发机构 CA,验证证书是否为合法机构颁发
- 如果验证成功,则浏览器从操作系统中取出颁发者 CA 的公钥,对服务器发来的签名进行解密
- 浏览器使用相同的 hash 算法计算服务器发来的证书的 hash 值,将计算得到的值与证书的签名部分比较
- 如果验证通过,客户端产生一个随机值作为通信密钥,用收到的公钥加密后发给服务端
- 服务端收到客户端密钥后用仅自己知道的私钥解密,这样客户端和服务端就共享了一对密钥,后续的通信过程可以使用这个共享密钥进行加密和解密(对称密钥加密技术)
之所以要产生对称密钥而不是直接使用公钥私钥通信是因为对称密钥加密技术的计算更快。
HTTPS缺点
- SSL 费用高,而且在服务器上的部署、维护、更新都很麻烦
- HTTPS 降低了用户访问速度(多次握手)
- 网站开启 HTTPS 后,从 HTTP 跳转到 HTTPS 的方式增加了用户访问耗时(大多使用 302 跳转)
- HTTPS 涉及到的加解密过程会消耗 CPU 资源,因此需要新增机器
参考