背景
HTTPS并不是一个全新的协议,而是为了保证网络通信的数据安全,在HTTP的基础上加上了安全套件SSL的一个数据通信协议。
HTTP协议全称为HyperText Transfer Protocol即超文本传输协议,是客户端浏览器与Web服务器之间的应用层通信协议。HTTPS协议全称为HyperText Transfer Protocol over Secure Socket Layer即基于SSL层的超文件传输协议,HTTPS的安全是通过SSL实现的,数据传输是依赖HTTP。
一、HTTP传输风险
由于HTTP为明文传输所以存在一下安全风险:
1.1 窃听风险:第三方窥探通信内容
1.2 篡改风险:第三方修改通信内容
1.3 冒充风险:第三方冒充其他身份进行通信
二、HTTPS通信过程
为了解决通信安全问题,HTTPS加入了SSL/TSL安全通信组件,SSL/TSL采用数字证书、非对称加密和对称加密来保证通信安全。
1.通信过程
a.客户端向服务端发起通信请求
b.服务端返回SSL/TSL证书,其中包括服务端的公钥和CA机构信息等
c.客户端需要验证证书的有效性,并从证书中提取服务端公钥
d.客户端与服务端协商接下来通信过程中的对称加密算法和对称密钥,内容需要用服务端的公钥进行加密
e.服务端用私钥对客户端发来的信息用服务端私钥解密,然后保存对称加密算法和对称密钥,然后返回用对称密钥加密后返回信息给客户端,告知已经收到密钥
接下来客户端和服务端就用协调之后的对称密钥进行加密通信。
2.证书验证
验证证书主要是确定证书的真实和未篡改,而证书的验证需要用到CA的公钥,而CA的公钥有需要安全传递,仿佛进入了一个循环。因此需要一个统一的信任的第三方,因为此操作系统会预制安装一些根证书,根证书是可以完全信任的,因此根据授权树形结构向上查找CA直到根证书,然后逐级验证即可验证当前证书的有效性。
其中CA证书授权中心可以认为是一个树形结构,服务端只要向其中任意一个CA申请证书即可,申请证书需要提交公钥,私钥自己保存。CA会用CA自己的私钥对证书内容进行签名【保证来源和信息不篡改】。
当客户端拿到服务端返回的服务端证书时,需要根据证书的发放授权中心,找到此授权中心的公钥/证书,不断向上寻找,直到找到系统预制的根证书,此根证书的公钥认为是可靠的。根据根CA的公钥对下级证书进行逐级验证,最后即可验证服务端证书正确性。
参考
1.https://www.evget.com/article/2017/3/30/26027.htm
2.https://www.jianshu.com/p/887859661be6