第七章 确保Web安全的HTTPS
在HTTP协议中有可能存在信息窃听或身份伪装等安全问题。使用HTTPS通信机制可以有效地防止这些问题。
7.1 HTTP的缺点
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已经被篡改
这些问题不仅在HTTP上出现,在其他未加密的协议上也存在这类问题。
除此之外,HTTP本身还有很多缺点。而且某些特定的Web服务器和特定的Web浏览器在实际应用中存在不足(脆弱性或者安全漏洞)。另外,用Java和PHP等编程语言开发的web应用也可能存在安全漏洞。
7.1.1 通信使用明文可能被窃听
由于HTTP本身不具备加密功能,所以也无法做到对通信整体(即用HTTP协议通信的请求和响应的内容)进行加密。即,HTTP报文使用明文(指未经过加密的报文)方式发送。
- TCP/IP是可能被窃听的网络。
- 加密处理防止被窃听
1)通信的加密
通过和SSL(Secure Socket Layer 安全套接层)或TLS(Transport Layer Security 安全层传输协议)的组合使用,加密了HTTP的通信内容。
2)内容的加密
不同于SSL和TLS将整个通信线路加密处理,所以内容仍然有被篡改的风险
7.1.2 不认证通信方的身份就可能遭遇伪装。
任何人都可以发起请求,不确认通信方,存在隐患。
- 无法确定请求发送至目标的web服务器是否是按真实意图返回响应的那台服务器。有可能是已伪装的web服务器。
- 无法确定返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端。
- 无法确定正在通信的对方是否具备访问权限。因为某些web服务器上保存着重要的信息,只想发给特定用户通信的权限。
- 无法判定请求是来自何方、出自谁手。
- 即使是无意义的请求也会照单全收。无法阻止海量请求下的DoS攻击(Denial of Service,拒绝服务攻击)
查明对手的证书。
7.1.3 无法证明报文的完整性,可能已遭篡改
7.2 HTTP + 加密 + 认证 + 完整性保护 = HTTPS
7.2.2 HTTPS是身披SSL外壳的HTTP
HTTPS并非是应用层的一种新协议,只是HTTP通信接口部分用SSL和TLS协议代替而已。
通常,HTTP直接和TCP通信。当使用了SSL时,则演变成先和SSL通信,在由SSL和TCP通信了。
7.2.3 相互交换密钥的公开密钥加密技术
SSL采用一种叫公开密钥加密的加密处理方式。
共享密钥加密的困境
加密和解谜同用一个密钥的方式称为共享密钥加密,也被叫做对称密钥加密。
发送密钥就有被监听的风险,但不发送,对方就不能解密。再说,密钥若能够安全发送,那数据也就能安全到达,哪加密的意义又在哪呢?
使用两把密钥的公开密钥加密
公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,一把叫做公开密钥。
使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,在使用自己的私有密钥进行解密。
HTTPS采用混合加密机制
HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。若密钥能够实现安全交换,那么有可能会考虑仅使用公开密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处理要慢很多。
所以在交换密钥环节使用公开密钥加密方式,之后的建立通信交换保温阶段,则使用共享密钥加密。
7.2.4 证明公开密钥正确性的证书
公开加密密钥还是存在一些问题的。就是无法证明公开密钥本身就是货真价实的公开密钥。