HTTP 有以下安全性问题:
- 使用明文进行通信,内容可能会被窃听;(请求时,需加密)
- 不验证通信方的身份,通信方的身份有可能遭遇伪装;(处理时,需认证)
- 无法证明报文的完整性,报文有可能遭篡改。(响应时,需完整性保护)
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)
是 HTTP 先和 SSL 通信,再由 SSL 和 TCP 通信。通过使用 SSL,HTTPS 提供了加密、认证和完整性保护。
加密
对称密钥加密:加密和解密使用同一密钥。无法安全传输密钥。
公开密钥加密:
公开密钥进行加密,私有密钥进行解密。相对来说更耗时。
服务器获得客户端的公开密钥之后,就可以使用公开密钥进行加密。
HTTPS 采用混合的加密机制 ,使用公开密钥加密传输对称密钥,之后使用对称密钥加密进行通信。
认证
通过使用证书来对通信方进行认证。
数字证书机构(CA,Certificate Authority)是客户端与服务器双方都可信赖的第三方机构。
服务器的运营人员向 CA 提出公开密钥的申请,
CA 对服务器的公开密钥做数字签名(即用 CA 的私有密钥加密,只有用 CA 的公开密钥才能解密),
然后 CA 的公开密钥与这个数字签名绑定在一起。
进行 HTTPS 通信时,服务器会把证书发送给客户端,客户端取得其中的公开密钥之后,先进行验证,如果验证通过,就可以开始通信。
数字签名(对摘要进行公钥加密):
两个作用:验证数据的发送方(防止掉包),判断数据是否被篡改(完整性)
原理:报文的摘要用私钥加密,生成签名,公钥解密。
如果能用公钥解密,说明是没有掉包,因为只有正确的发生方才有私钥,才能加密。
如果用公钥解密出来的摘要与报文生成的摘要相等说明数据没有篡改。
完整性保证
SSL 提供摘要功能来验证完整性。