文章目录
一、概述
HTTP的不足
- 通信使用明文(不加密),内容可能会被窃听。
- 不验证通信方的身份,因此有可能遇到伪装。
- 无法验证报文的完整性,所以有可能已遭篡改。
二、问题对应的解决方案
下面我们来介绍一下 HTTP 存在问题的解决方法。
2.1 明文传输的问题
问题:
已知 HTTP 的通信是使用明文,信息在网络发送过程的任何一个节点都有可能被窃取,导致信息的不安全。
方案:
对发送的信息进行加密,从而达到了安全传输的目的。(加密后的信息仍可能被窃取,但用户需要破解秘钥才可以还原真实的数据信息。)
加密的策略有两种:一种是对通信进行加密;另一种是对内容进行加密。下面我们分别来介绍一下。
2.1.1 内容加密
下面是一个HTTP的报文格式,其包含两部分:报文首部、报文主体。内容加密只对报文主体进行加密。如下图所示:
常见的加密方法:对称加密(共享秘钥加密)、非对称加密(公开秘钥加密)。
对称加密(共享秘钥加密):
- 对称加密,其加/解密都使用同一个秘钥,加/解密效率相对非对称加密要高。
- 如果使用对称加密对内容进行加密,就需要将秘钥传递给客户端。但在将秘钥传递给客户端的时候无法保证其安全性,因此也就失去了加密的意义。
非对称加密(公开秘钥加密):
- 非对称加密,其有两把秘钥,一把公钥,一把私钥,公钥可以提供给客户端,私钥被服务端持有。
- 客户端使用公钥对数据进行加密时,需要服务端使用私钥进行解密。服务端使用私钥进行加密时,需要客户端使用公钥进行解密。
- 存在和对称秘钥一样的安全传递问题,即无法安全的将公钥传递给客户端,因此也就失去了加密的意义。
2.1.2 通信的加密
HTTP 协议中没有加密机制,但可以通过和 SSL (Secure Socket Layer,安全套接层) 或TLS (Transport Layer Security,安全层传输协议) 的组合使用,加密 HTTP 的通信内容。用SSL 建立安全通信线路后,就可以进行HTTP通信了。 SSL采用的也是 非对称加密(公开秘钥加密) 的加密处理方式。
2.2 通信方身份伪装的问题
问题:
不验证通信方的身份,存在各种隐患:
- 无法确定请求发送 目 的 Web 服务器是 是 实意图返回 响应的 台服务器。有可能是已伪装的 Web 服务器
- 无法确定正在通信的对方是否具备访问权限。
- 无法判断请求来自何方,出自谁手。
- 即使是无意义的请求也会照单全收,所以可能存在Dos攻击。
方案:
查看请求方的证书,证书需要第三方权威机构颁发 (即请求方的身份合法性由颁发证书机构保证)。
SSL
提供了证书功能。
2.3 报文完整性的问题
问题:
HTTP 协议无法保证接收到的报文就是发送方请求的原始报文,也有可能在发送过程中被第三方劫持篡改过。如下图所示:
方案:
SSL
提供了摘要功能,可以验证信息的完整性。
三、HTTPS
HTTPS = HTTP + 加密+认证 + 完整性保护 = HTTP + SSL
由于
SSL
提供了加密、认证、完整性保护
功能,因此 HTTPS 相当于是HTTP + SSL
。
3.1 HTTPS 进行加密,解密,验证的流程
在开始之前,我们先来了解一些准备知识。
两对非对称加密秘钥。
服务端: 公钥A、私钥A
数字证书认证机构: 公钥B、私钥B
在使用数字证书前,服务端需要先向数字证书认证机构申请证书,具体流程如下:
服务端先将公钥A提交给 “数字证书认证机构”, “认证机构” 会使用它自己的私钥B对公钥A进行数字签名,并将公钥A放入公钥证书中(服务端下发给客户端时使用)。
共分为8个步骤:
- 客户端发起HTTPS请求。
- 服务端配置证书,证书其实就是一对公钥和私钥。
- 将服务端从机构申请来的公钥证书传送给客户端,证书中含有公钥。
- 客户端通过 TLS 对证书进行解析,如果证书没有问题,就生成一个随机值 Key(类似对称加密秘钥),然后用证书(公钥)对该随机值进行加密。
- 将加密后的随机值 Key 发送回服务端。
- 服务端使用私钥对接收到的加密信息进行解密,获取到客户端生成的随机值 Key。
- 使用获取到的随机值 Key 对发送的数据进行加密,并发送给客户端。
- 客户端接收到加密信息之后,使用之前证书生成的随机值Key对加密信息进行解密。
3.2 SSL 的劣势
会导致请求和响应变慢。
主要有两个原因:
- 通信慢:除了TCP连接、发送 HTTP 请求、响应HTTP 外,还得进行 SLL通信,流程变多了。
- 设备资源开销:使用 SSL 会对传输的内容进行加密处理,导致 CPU 和 内存消耗增加。
参考
《图解HTTP》
《网络是怎样连接的》