HTTP:明文传输的不安全
HTTPS:基于HTTP+SSL/TLS来实现的,发送的数据需要加密,接收到的数据需要解密,比HTTP安全,但是传输效率(加解密)比HTTP低
http协议的特点?
- 支持服务器/客户端模式
- 简单快速:客户端向服务器发送请求时,只需要传输请求方法和路径;
- 灵活:HTTP允许传输任意类型的数据对象;
- 无连接:无连接的含义是 每次连接只能处理一个请求。服务器处理完客户端的请求,并受到客户端的响应之后,就断开连接。
- 无状态:无状态指协议本身对事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,那他必须重传,这会导致每次连接传输的数据增大,但是如果服务器不需要先前的信息时,它的应答就很快。
http和https的区别?
- HTTP是以http://开头的;而HTTPS是以https://开头的;
- HTTP是不安全的,信息是明文传输的;HTTPS是安全的,具有安全性的SSL加密传输;
- HTTP标准端口是80;HTTPS标准端口是443;
- HTTP无需加密,无需证书;HTTPS对传输的数据需要进行加密,也需要认证证书,会消耗更多的CPU资源;
- HTTPS的传输效率比HTTP低
HTTPS的传输流程:
前置知识:
为什么需要HTTPS?
如果是使用http协议,因为http是明文传输,可能中途会被钓鱼网站拦截(dns劫持),内部会拿到明文数据,伪装成与服务端类似的响应内容
需要解决的问题?
- 如何保证服务器是真实的,而不是钓鱼网站
- 解决网络数据传输,使用明文,所有路途中的设备都可以被获取,如果被获取到,存在信息泄露
如何解决?
使用证书来保证安全
浏览器安装之后,已经初始化了权威的证书颁发机构---证书有什么用?
- 权威的证书颁发机构的证书 --》保证服务器真实
- https服务器的证书 --》解决明文传输数据问题
- 使用公钥私钥(非对称加密)来进行加解密
- 密钥:客户端、服务端用来加解密的, 使用密钥加解密真正的数据 使用密钥进行对称加密(效率比非对称加密高):使用同一个钥匙来加解密
具体的流程:
SSL/TLS协议的基本过程:
- 客户端向服务端索要并验证公钥
- 双方协商生成“对话密钥” 【1、2步:https握手阶段(根据公钥私钥生成对话密钥),需要保证对话密钥不被钓鱼】
- 双方采用“对话密钥”进行加密通信
https握手阶段
- 第一步,客户端给出协议版本号、一个客户端生成的随机数,以及客户端支持的加密方法。
- 第二步,服务端确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random) 【1、2步需要保证对话密钥不被钓鱼】
- 第三步,客户端确认数字证书有效,然后生成一个新的随机数(公钥加密),并使用数字证书中的公钥,加密这个随机数,发给服务端。
- 第四步,服务端使用自己的私钥,获取客户端发来的随机数(私钥解密) 【3、4步为非对称加密】
- 第五步,客户端和服务端根据约定的加密方法,使用前面的三个随机数,生成"对话密钥",用来加密接下来的整个对话过程。
发送数据阶段:客户端使用对话密钥加密真正的数据,服务端使用对话密钥解密数据(此时被钓鱼没有关系)