一、HTTP存在的问题
1. 使用明文方式,内容可能会被窃取;
- 在HTTP的设计初衷中,没有考虑到传输过程中的数据安全性。它被设计为一种明文协议,所有的通信内容都以明文形式传输。这使得HTTP协议的实现和解析变得相对简单,减少了处理加密和解密的复杂性。
- 按TCP/IP协议族的工作机制,通信内容再所有的通信线路上都有可能遭到窥视。
在TCP/IP协议族中,通信数据被分割成称为数据包或数据段的小块,并通过网络传输。这些数据包经过路由器、交换机和其他网络设备进行转发,可能经过多个节点才能到达目标地址。
在这个过程中,通信数据通常以明文形式在网络上传输。这意味着,任何能够访问这些网络节点的人或设备,包括网络运营商、中间设备的管理员、黑客或窃听者,都有可能拦截和窥视这些数据包。
2. 不验证通信方的身份,有可能遭遇伪装;
- 任何人都可以发送请求,并由服务器做出响应
- 无法对服务器、客户端、访问权限进行鉴别
- 无法拒绝海量请求下的DoS攻击
3. 无法证明报文的完整性,识别不了是否被篡改;
二、HTTPS(HTTP+加密+认证+完整性)
🐣 HTTPS就是披了SSL协议这层外壳的HTTP,HTTP通信的部分结合口用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。
1. 加密
🌊 HTTPS采用共享密钥加密和公开密钥加密两种并用的混合加密机制
- 共享密钥加密:也称对称密钥加密,加密和解密使用同一把密钥(缺点:密钥的传输于保存)
- 公开密钥加密:非对称密钥加密,使用公开密钥加密,通过私有密钥解密;公开密钥可随意发布,但私有密钥需妥善保管好(缺点:处理速度慢)
- 一般采用两者的混合方式,通过非对称加密对共享密钥加密方式的密钥进行加密,然后再以共享密钥加密的方式进行通信
2. 证书
- 为确保客户端获取到的公开密钥是真实地,需使用由数字证书认证机构颁发的公开密钥证书
- 为确保服务器正在通信的对方始终是预料之内的客户端,可以使用客户端证书(如网银)
3. 完整性
- 报文摘要:通过哈希函数提供了一种简洁而有效的方式来验证数据的完整性。接收方可以使用相同的哈希函数对接收到的数据进行摘要计算,并与传输过来的摘要进行比较,如果摘要值一致,说明数据没有被篡改
- 数字签名:通过使用私钥对摘要进行加密,实现了数据的身份认证。接收方可以使用发送方的公钥对签名进行解密,并验证摘要的一致性。只有发送方拥有与签名相对应的私钥,才能生成正确的签名。
🎯 注:报文摘要为保证数据的完整性,数字签名为了预防报文和报文摘要被整体替换。
🎨 Tips:在非对称加密中,每个实体(客户端和服务端)都会生成一对密钥,其中包括一个私钥和一个对应的公钥,所以客户端向服务端发请求是其实也有私有密钥对报文摘要进行加密,不过这个和服务端的私有密钥不是一个罢了。
三、HTTPS存在的问题
1. 处理速度慢(可使用SSL加速器分担负载)
- 通信慢:和HTTP相比还必须进行SSL通信,网络负载可能会变慢2~100倍
- 消耗CPU及内存资源:必须经行加密处理,消耗更多服务器和客户端的硬件资源,导致负载增强
2. 证书信任链问题
- HTTPS使用数字证书来验证服务器的身份,然而,有时存在证书颁发机构的信任问题,例如私人CA的证书被不当地信任或证书颁发机构本身遭到攻击,导致恶意方伪装成合法服务器并进行攻击。
3. 中间人攻击
- 客户端受感染:如果客户端的操作系统、浏览器或其他相关软件受到恶意软件或恶意扩展程序的感染,攻击者可以在客户端上进行中间人攻击。
- 漏洞利用:虽然HTTPS本身是安全的协议,但存在可能被攻击利用的漏洞,如果客户端或服务器上存在未修补的安全漏洞,攻击者可能利用这些漏洞实施中间人攻击。
- 社会工程学攻击:攻击者可能利用社会工程学技术欺骗用户,使其相信正在与合法服务器建立安全连接,实际上却是与攻击者进行通信,这种方式可能涉及欺骗用户访问恶意网站或点击恶意链接。