http
基本概念
超文本传输协议,是互联网应用最广泛的协议之一,用于从 WWW 服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
https
基本概念
HTTPS是HTTP over SSL的简称,即工作在SSL(或TLS)上的HTTP。说白了就是加密通信的HTTP。
在HTTP之下增加一个安全层,用于保障HTTP的加密传输,在HTTP把数据交给TCP之前先交给TLS进行加密
SSL是TLS的前身
网景公司出于安全考虑开发了HTTPS,
其底层支持就是SSL,后续支持FTP等其他议,
IETF换手,名称随之变为TLS
工作原理
在客户端和服务器之间用非对称加密协商出一套对称密钥,每次发送信息之前将内容加密,收到之后解密,达到内容的加密传输
为什么不直接用非对称加密?
非对称加密由于使用了复杂的数学原理,因此计算相当复杂,如果完全使用非对称加密来加密通信内容,会严重影响网络通信的性能
HTTPS连接建立过程
1. Client Hello
【客户端】向服务器发送一个字节打招呼
附带内容:
1.可选的TLS版本集合
2.加密套件集合:对称加密算法、非对称加密算法、hash算法
3.客户端随机数
2. server Hello
【服务器】服务端发回一个单子节数据
附带内容
1.选定的TLS版本
2.选定的加密套件
3.服务器随机数
3. 服务器证书 信任建立
【服务器】服务器把自己的证书发到客户端,客户端进行验证这个公钥是合法的
目的:获取服务器的公钥
附带:签发机构的证书、根证书
4. Pre-master Secret
【客户端】客户端发送一个Pre-master Secret的数据,
Pre-master Secret是用公钥进行加密的随机数
【客户端】【服务器】根据双方持有的客户端随机数、服务器随机数、Pre-master Secret计算出Master Secret
【客户端】【服务器】Master Secret生成客户端加密密钥,服务端加密密钥,客户端MAC secret,服务端MAC secret,由这四个可以实现对称加密通信
MAC secret:是HMAC的secret,带密钥的hash,可以验证数据的完整性,也可以验证身份
HMAC:密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code)
HMAC把密钥(对称密钥)和消息放在一起,然后取哈希,可以验证身份。
5. 客户端通知:将使用加密通信
并不是一个很长的字符串告诉服务器,是一个固定的规定好的消息
6. 客户端发送:finished
不是发送finished这几个字母,而是把前面几条信息综合在一起,就是握手相关的消息结合在一起,密钥不会再重新发,把他们用加密密钥进行加密,然后再做一个HMAC,对方服务器收到后会进行验证,从这一步之后,客户端就可以发送它正式发送的应用层信息了
7. 服务器通知:将使用加密通信
8. 服务器发送:finished
通信过程
客户端—>服务器:
客户端使用客户端加密密钥加密并发送消息,服务器使用客户端加密密钥解密
服务器—>客户端:
服务器使用服务器加密密钥加密并发送消息,客户端使用服务器加密密钥解密
防止自己的数据被发送回来被认为是服务器发送的消息
HTTPS优点
-
- 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
- HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 http 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
- HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻 击的成本。
- 谷歌曾在 2014 年 8 月份调整搜索引擎算法,并称“比起同等 HTTP 网站,采用 HTTPS 加密的网站在搜索结果中的排名将会更高”。
缺点
- https 握手阶段比较费时,会使页面加载时间延长 50%,增加 10%~20%的耗电。
- https 缓存不如 http 高效,会增加数据开销。
- SSL 证书也需要钱,功能越强大的证书费用越高。
- SSL 证书需要绑定 IP,不能再同一个 ip 上绑定多个域名,ipv4 资源支持不了这种消耗。
http与https的区别
- HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
- 使用 HTTPS 协议需要到 CA 证书,一般免费证书较少,因而需要一定费用。
- HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
- http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
- HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。
http2.0
- 提升访问速度:请求资源所需时间更少,访问速度更快;
- 二进制分帧:HTTP2.0 会将所有的传输信息分割为更小的信息或者帧,并对他们进行二进制编码;
- 允许多路复用:多路复用允许同时通过单一的 HTTP/2 连接发送多重请求-响应信息。有了新的分帧机制后,HTTP/2 不再依赖多个TCP 连接去实现多流并行了。每个数据流都拆分成很多互不依赖的帧,而这些帧可以交错(乱序发送),还可以分优先级。最后再在另一端把它们重新组合起来。HTTP 2.0 连接都是持久化的,而且客户端与服务器之间也只需要一个连接(每个域名一个连接)即可。
改善了:在 HTTP1.1中,浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制(连接数量),超过限制会被阻塞的问题。 - 首部压缩:使用 HPACK(HTTP2头部压缩算法)压缩格式对传输的 header 进行编码,减少了 header 的大小;
- 服务器端推送:服务器可以对一个客户端请求发送多个响应。服务器向客户端推送资源无需客户端明确的请求。