(讲的更明白,有图)
HTTPS
7.1http的缺点
- 使用明文,内容会被窃听。
- 不验证通信方的身份,遭遇伪装。
- 无法证明报文完整性,可能被篡改。
7.11 通信被窃听
互联网上任何角落都存在被窃听的风险。
Packet Capture, Sniffer抓包和嗅探器,如广泛使用的Wireshark工具。
- 通信加密: HTTP over SSL就是HTTPS。 增加了Secure Socket Layer安全套接层SSL。
- 内容加密:报文主体进行算法加密(非整个通信线路的加密,有被破解的风险)
7.12 不验证,遭遇伪装
http协议由于不对身份验证,任何人都可以发送请求,所以留下各种隐患:
- 伪装的服务器。无法确定请求是否发送到真正的目标服务器,可能请求被拦截,然后使用伪装的服务器返回响应。
- 同样,客户端也有可能是伪装的。
- 无法判定请求来自何方,(没有证书)
- 服务器对无意义的请求也会接收,无法阻止海量的DoS攻击,(拒绝服务攻击:通过大量请求信息沾满服务器资源,导致真正的请求无法处理)
通过证书机构颁发的证书来验证身份是一种安全保障:
7.13 无法证明报文的完整性, 中间人攻击
Man-in-the-Middle attach中间人攻击: 攻击人会篡改请求和响应,让服务器和客户端之间的通信看起来仍是正常的,但实际已经被控制。
如何防止篡改:
常用的MD5和SHA-1等hash值校验的方法,和用来确认文件的数字签名方法,仍不能完全保障安全。
(:6.66 Content-MD5首部)
MD5是单向函数生成的散列值。本身仍可能被篡改。因此必须使用HTTPS。
SSL提供了认证和加密处理, 摘要功能。
7.2 HTTP + 加密 + 认证 + 完整性保护 = HTTPS
7.23 Public-key cryptography 公开密匙 密码算法
加密算法公开,但密匙是保密的。只有通过密匙,才能对密码解密。
双方使用这个算法对通信的内容进行加密和解密,以保障信息的安全。但是,
如何安全的把密匙传给对方?
这是对称加密算法的困境。(Common key crypto system 共享密匙加密系统)
答案:使用公开密匙加密算法。又叫做非对称密匙加密算法。
公开密匙由,一把private key和 任意多的公key组成。接收密文的一方持有private key,发送密文的一方持有公key。通过公key加密的报文,只有private key可以解开。
因此,服务器只需要把公key提供给客户端。
HTTPS的混合加密机制:
- 密匙交换环节:客户端获得公开密匙,通过非对称加密算法加密传输‘对称密匙’给服务器
- 通信交换报文环节:双方使用对称密匙加密方式,交换报文。
7.24证明公开密匙正确性的证书
客户端获得的公开密匙有可能被黑客调包了,客户得到的是假的公开密匙,怎么办?
答案:使用数字证书认证机构颁发的公开密匙证书。
服务器运营者申请数字证书的业务流程:
申请->确认身份->对申请的公开密匙做数字签名->分配这个签名的公开密匙,并将密匙和证书绑定。
- 服务器把公钥和证书发给客户端。
- 客户端用数字证书认证机构的公开密匙对证书上的数字签名进行验证。
- 一旦验证通过,客户端即可安全的使用服务器的公开密匙了。
⚠️: 多数浏览器内部会有常用认证机构的公开密匙。
客户端也可以使用数字证书。在安全性极高的领域:如网上银行的网银登陆就使用了客户端证书。
扩展:认证机构的信誉第一,认证机构有被黑客入侵的事件发生。
7.25 HTTPS的安全通信机制
HTTPS的成本导致网站不会一直使用
- 加密消耗更多的cpu, cache
- 购买证书也是开销,一个证书600元/年。
SSL导致通信慢,和处理速度慢。比http慢2-100倍。
针对这一问题有专门的服务器来改善问题,不过这又是成本。