Web应用存在HTTP和HTTPS两种通信方式,HTTP默认端口80,数据以明文传输,HTTPS默认端口443,数据加密传输。
HTTPS协议
HTTPS实际上并不是一种新的网络协议,是HTTP的基础上加了SSL层,数据的加密就是在SSL层完成的。
数据传输方式
明文传输
客户端和服务器已明文方式传输数据,没有安全性,数据再传输过程中可能被劫持和篡改
对称加密传输
对称加密算法:双方使用同一秘钥对数据进行加解密(AES、DES)
特点:
- 如果不知道秘钥,是无法解出对应的明文,但是如果所有客户端都用相同的秘钥,相当于没有加密,坏人也可以作为一个用户拿到秘钥。
- 加解密性能高
一种改进的方案是每个客户端先协商一个加密算法和秘钥,不同客户端使用不同的算法和秘钥,这就坏人即使作为一个用户也不知道别的用户的秘钥。但是这种方式协商秘钥的过程是公开明文的,坏人也有办法窃取到秘钥的,仍然存在风险。
非对称加密传输
非对称加密算法:加密解密采用不同的秘钥,私钥加密后的密文,所有的公钥都可以解密,公钥加密后的密文只有私钥能解密。私钥通常只有一个人有,公钥可以公开发给所有人。(常见算法:RSA)
特点:
- 只要把私钥保存在服务器,公钥发给客户端,那么客户端向服务器发送的数据就是安全的,但是服务器向客户端发送的数据坏人也可以通过公钥解密
- 加解密消耗的时间较长,传输效率会降低
HTTPS(对称加密+非对称加密)
特点:
- 使用非对称加密传输协商一个对称加密算法和秘钥
- 使用对称加密算法对数据加密传输
- 数据双向安全,且效率较高
CA机构和数字证书
从前面可以看到,协商阶段时候用非对称加密,客户端一开始就要持有公钥,那么客户端如何安全的获取公钥呢?
如果服务端直接将公钥发给客户端,中间可能被坏人劫持,返回一个假公钥,客户端使用假公钥进行加密后请求,坏人就可以使用假私钥解出明文,篡改内容后再使用真公钥加密后请求到服务器,这时服务器拿到的是被篡改后的数据。
数字证书和CA机构就是用来保证服务器安全的发送公钥给客户端的。
校验过程
- 读取证书中的所有者,有效期等信息进行校验
- 查找系统内置的受信任证书发布机构CA,与服务器下发的证书中的CA对比,校验是否是合法机构颁发
- 如果找不到,浏览器报错警告证书不可信
- 如果找到了:
- 对证书里的数字签名使用公钥解密得到明文的hash摘要
- 浏览器使用相同的hash算法计算明文的hash值,将这个值与上述计算的摘要对比验证证书的合法性。
总结
一个完整的HTTPS请求流程如下图所示: