第7章 确保Web安全的HTTPS
HTTPS可以有效的防止信息窃听,身份伪装等安全问题。
HTTP的缺点
- 通信使用明文,内容可能被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
通信使用明文可能会被窃听
- 加密处理防止被窃听
通信的加密
HTTP通过和SSL或TLS的组合使用,加密HTTP的通信内容。即使用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。
内容的加密
将报文主体进行加密处理。
不验证通信的身份就可能遭遇伪装
- 任何人都可以发送请求
通信时,不存在确认通信方的处理步骤,任何人都可以发送请求。另外,服务器只要接收到请求,不管对方是谁都会返回到实际提出请求的客户端(仅限于发送端的IP地址和端口号没有被Web服务器设定限制访问的前提下)。
由于不确认通信方,会存在如下各种隐患:
-
目标服务器有可能是已伪装的Web服务器
-
客户端有可能是已伪装的Web服务器
-
无法确定正在通信的对方是否具备访问权限。
-
即使无意义的请求也会照单全收。无法阻止海量请求下的DoS攻击
-
查明对方的证书
SSL还使用了一种被称为证书的手段,可用于确定对方。
无法证明报文的完整性,可能已遭篡改
- 接收到的内容可能有误
HTTP + 加密 + 认证 + 完整性保护 = HTTPS
通常HTTP直接和TCP进行通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信。
相互交换密钥的公开密钥加密技术
SSL采用一种叫做公开密钥加密的加密处理方式。
- 共享密钥的困境
加密和解密用同一个密钥的方式称为共享密钥加密,也被叫做对称密钥加密。
但是,以共享密钥的方式加密时必须将密钥也发送给对方,因此,密钥有可能被监听。
- 使用两把密钥的公开密钥加密
公开密钥使用一种非对称的密钥。一把叫私有密钥,另一把叫公开密钥。
发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。
- HTTPS采用混合加密机制
HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。
因为公开密钥加密处理速度比共享密钥加密要慢很多。因此使用公开密钥的方式将共享密钥传递过去(此时的共享密钥只有发送端和接受端知道),然后后面的通信就使用共享密钥。
具体过程大概是:
发送端:你的公开密钥是?
接收端:我的公开密钥是🔑。
发送端:将共享密钥使用得到的公开密钥进行加密后发送。
接收端:将收到的内容使用私钥进行解密。然后使用解密后得到密钥保存起来,以后的通信便使用该密钥进行加密。
证明公开密钥正确性的证书
公开密钥在传输过程中可能会被调包。为解决该问题,使用由数字证书认证机构和其他相关机关颁发的公开密钥证书。
服务器会将证书和公钥一起发送给客户端。然后客户端拿到服务器的公钥证书后,使用认证机构的公开密钥,向数字证书认证机构验证公钥证书上的数字签名,以确认服务器公开密钥的真实性。
此时,将认证机关的公开密钥安全的转交给客户端是非常重要的事。大多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥。