HTTP与HTTPS
一、HTTP与HTTPS的区别
文字描述就可以看出HTTPS肯定是HTTP的升级版。
- HTTP是明文传输,存在不安全问题。HTTPS则很好地解决了这个问题,在TCP和HTTP之间加入了SSL/TLS安全协议,使得报文能够加密传输。
- HTTP连接的建立相对简单一些,只需要TCP的三次握手就可以进行HTTP的报文传输。HTTPS除了TCP的三次握手,还需要进行SSL/TLS的握手过程,才可以进行加密传输。
- HTTP的端口是80,HTTPS是443。
- HTTPS需要向CA (证书权威机构)申请数字证书,来确保服务器的身份是可信的。
二、HTTPS解决了HTTP的三大问题
HTTP存在的问题有
- 窃听风险(明文传输)
- 篡改风险(报文完整性无法控制)
- 冒充风险(无法验证通信方的身份)
为此HTTPS在HTTP与TCP之间加入了SSL/TLS协议
- 信息加密
- 校验机制
- 身份证书
混合加密
HTTPS采用的时对称加密和非对称加密结合的混合加密方式
- 通信建立前采用非对称加密的方式交换会话密钥
- 通信过程中全部使用对称加密的会话密钥的方式加密明文数据
采用混合加密的原因
- 对称加密:只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换
- 非对称加密:使用两个密钥,公钥可以任意分发,而私钥必须保密,解决了密钥交换问题但速度慢
摘要算法
摘要算法用来实现完整性,使得数据拥有一个唯一标识,用于校验数据的完整性。
客户端在发送明文之前会通过摘要算法算出明文的唯一标识,发送的时候把唯一标识和明文⼀同加密成密文后,发送给服务器,服务器解密后,用相同的摘要算法算出发送过来的明⽂,通过比较客户端携带的唯一表示和当前算出的唯一标识做比较,若相同,则说明数据是完整的。
数字证书
数字证书是为了保证公钥不被篡改和信任度,第三方权威机构CA(数字证书认证机构),将服务器公钥放在数字证书(由数字证书认证机构颁发)中,只要证书是可信的,公钥就是可信的。
三、SSL/TLS建立流程
基本流程
- 客户端向服务器索要并验证服务器的公钥
- 双方协商生产会话密钥
- 双方采用会话密钥进行加密通道
详细流程
1.ClientHello
首先,由客户端向服务器发起加密通道请求。
客户端主要向服务器发送以下信息
- 客户端支持的SSL/TLS协议版本
- 客户端产生的随机数(用于生产会话密钥)
- 客户端支持的密码套件列表(如RSA加密算法)
2.ServerHello
服务器收到客户端请求,向客户端发出响应。
回应内容有
- 确认SSL/TLS协议版本,如果不支持,则关闭加密通信
- 服务器产生的随机数(用于生产会话密钥)
- 确认的密码套件列表(如RSA加密算法)
- 服务器的数字证书
3.客户端回应
客户端收到服务器回应之后,首先通过浏览器或者操作系统中的CA公钥,确认服务器数字证书的真实性,如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它进行加密报文,向服务器发送如下信息
- 一个随机数。该随机数会被服务器公钥加密
- 加密通信算法改变通知:表示随后的信息都将用会话密钥加密通信
- 客户端握手结束通知:表示客户端的握手阶段已经结束。这一项同时把之前所有的内容的发生的数据做个摘要,用来服务端校验
4.服务器最后的回应
服务器收到客户端的第三个随机数之后,通过协商的加密算法,计算出本次通信的会话密钥,然后向服务器发送最后的信息
- 加密通信算法改变通知:表示随后的信息都将用会话密钥进行加密通信
- 服务器握手结束通知,表示服务端端的握手阶段已经结束。这一项同时把之前所有的内容的发生的数据做个摘要,用来客户端校验