HTTP与HTTPS
HTTP在TCP三次握手之后进行HTTP的报文传输,而HTTPS在TCP三次握手之后进行SSL/TLS握手过程,进入加密报文传输,并且HTTPS协议要向CA申请数字证书,来验证服务器可信
HTTPS是如何解决(窃听,篡改,冒充)风险的
- 混合加密实现信息机密性
- 摘要算法实现信息完整性,为数据生成指纹校验信息完整
- 将服务器公钥放入数字证书,解决冒充风险
-
混合加密
对称加密和非对称加密结合:在通信建立前采用非对称加密交换会话密钥,通信过程中使用对称加密的会话密钥加密明文数据
- 对称加密使用一个密钥,密钥必须保密,无法安全的密钥交换
- 非对称加密使用两个密钥,公钥和私钥
-
摘要算法+数字签名
摘要算法(哈希函数)
数字签名:私钥加密,公钥解密(私钥加密内容的哈希值)
- 公钥加密,私钥解密:保证内容传输安全,公钥加密的内容只能被持有私钥的人解读
- 私钥加密,公钥解密:保证消息不被冒充,私钥不可被泄露,可被公钥解密,证明持有私钥身份
-
数字证书
由CA颁布证书,将服务器公钥存放在数字证书中,证书可信,公钥可信
HTTPS如何建立连接
SSL/TLS协议基本流程
- 客户端向服务器索要并验证服务器公钥
- 双方协商生产会话密钥
- 双方采用会话密钥进行加密通信
TLS的握手阶段涉及四次通信,主要有两种密钥交换算法:RSA算法,ECDHE算法
TLS四次握手:
-
ClientHello
客户端向度的服务器端发起加密通信请求,发送以下信息:
(1)客户端支持的TLS协议版本
(2)客户端生产的随机数,作为生成会话密钥的条件之一
(3)客户端支持的密码套件列表,如RSA加密算法
-
ServerHello
服务器收到请求后,向客户端响应
(1)确认TLS协议版本,如果浏览器不支持,关闭加密通信
(2)服务器生产随机数,用于生产会话密钥的材料
(3)确认密码套件列表
(4)服务器数字证书
-
客户端回应
客户端收到服务器端回应之后,通过浏览器或操作系统中的CA公钥,确认服务器数字证书真实性,如果证书无误,从数字证书中取出服务器公钥,使用其加密报文,向服务器发送如下信息:
(1)一个随机数,被服务器公钥加密
(2)加密通信算法改变通知,表示之后的信息由会话密钥加密通信
(3)客户端握手结束通知,表示客户端的握手阶段已结束,同时将之前所有内容发生的数据做摘要,供服务器校验
上述第一项的随机数会发送给服务端,有了三个随机数,用双方协商的加密算法生成本次会话密钥
-
服务器最后响应
服务器接收第三个随机数,通过协商的加密算法,计算本次的会话密钥
发送给客户端最后信息:
(1)加密通信算法改变通知,表示随后信息通过会话密钥加密通信
(2)服务器握手结束通知,表示服务器的握手阶段结束,把之前一切内容发生的数据做个摘要供客户端校验
至此TLS四次握手全结束,客户端与服务器进行加密通信,就是HTTP通信,使用会话密钥加密内容