为什么出现了HTTPS
HTTP 有着一个致命的缺陷,那就是内容是明文传输的,没有经过任何加密,而这些明文数据会经过WiFi、路由器、运营商、机房等多个物理设备节点,如果在这中间任意一个节点被监听,传输的内容就会完全暴露,,这一攻击手法叫做MITM(Man In The Middle)中间人攻击。
HTTPS是什么
HTTPS其实就是将HTTP的数据包再通过SSL/TLS加密后传输
加密解密流程
- 用户在浏览器发起HTTPS请求(如 https://www.mogu.com/),默认使用服务端的443端口进行连接;
- HTTPS需要使用一套CA数字证书,证书内会附带一个公钥Pub,而与之对应的私钥Private保留在服务端不公开;
- 服务端收到请求,返回配置好的包含公钥Pub的证书给客户端;
- 客户端收到证书,校验合法性,主要包括是否在有效期内、证书的域名与请求的域名是否匹配,上一级证书是否有效(递归判断,直到判断到系统内置或浏览器配置好的根证书),如果不通过,则显示HTTPS警告信息,如果通过则继续;
- 客户端生成一个用于对称加密的随机Key,并用证书内的公钥Pub进行加密,发送给服务端;
- 服务端收到随机Key的密文,使用与公钥Pub配对的私钥Private进行解密,得到客户端真正想发送的随机Key;
- 服务端使用客户端发送过来的随机Key对要传输的HTTP数据进行对称加密,将密文返回客户端;
- 客户端使用随机Key对称解密密文,得到HTTP数据明文;
后续HTTPS请求使用之前交换好的随机Key进行对称加解密。
通俗地说:
- 服务器的公钥类似于一个只有服务器能打开带锁的盒子,用于加密;
服务器把打开的盒子传给客户端 - 客户端把内容和加密方式放入盒子并锁住传给服务器;
- 中间即使经过别人的手,因为只有服务器有盒子的钥匙,所以不会被别人打开;
- 服务器收到盒子后,打开获得盒子中的内容及加密方式;
- 以后就可以直接用盒子中约定的加密方式交流,因为盒中的加密方式只有客户端和服务器两端知道,别人听不懂也看不懂。