携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情。
中间人攻击(Man In The Middle Attack)
攻击者向浏览器和服务器分别建立独立的连接,使浏览器和服务器认为它们正在进行私密的连接,但实际位于连接中间的攻击者可以窥探或篡改数据,但是浏览器和服务器彼此都不知道。
攻击方式:
- 域名污染:广域网, DNS 解析时的某个链点返回错误的 IP 地址
- APR欺骗:局域网,路由器广播时,错误的 IP 进行了响应,告知路由器它的物理地址
HTTPS 是应对中间人攻击的唯一方式。
简单理解:服务器发送证书给浏览器,浏览器确认证书正确,并检查证书中对应的主机名是否正确,如果正确则双方加密数据后发给对方,对方再进行解密,保证数据不透明。
HTTPS = HTTP + TLS
- 应用层的 HTTP 负责数据传输
- 传输层的 TLS 负责加密(SSL 是 TLS 的前身,SSL 废弃后,才有了 TLS)
证书
证书:控制台的 Security 面板中可以查看整个证书的完整内容。
证书可以被克隆吗?这是无意义的,浏览器和服务器双方使用 RSA (非对称加密算法)交换公钥,使用的公钥和密钥是一一配对的,所以即使证书被克隆,也无法解密数据。
HTTPS连接过程(抓包分析)
客户端发送 Client Hello 给服务端,包含信息:
- TLS(传输层安全性协议)版本
- 客户端当前的时间(秒数)
- 随机密码串
- Session ID(会话 ID):第一次连接时为 0,如果有则可以恢复会话,不用重复握手。服务端提供 Session ID,刷新页面时,客户端会带上。
- 浏览器支持的加密组合方式
- 域名:在传输层将域名信息(HTTP 应用层工作)告知服务器,以便服务器根据域名发送相应的证书。
服务器收到 Client Hello 的信息后,向浏览器发送 Server Hello 的包,包含信息:
- 时间
- 随机数
- Session ID
- 服务器选中的加密方式
发送证书
服务器接着发送一个证书的包给客户端,包含多个证书,证书之间相互依赖、担保,形成一条依赖链。
证书内容包括:签名、签名算法、签名哈希算法、有效期、公钥、公钥参数
RSA 加密和解密
浏览器会验证证书是合法的
密钥交换
Server Key Exchange 和 Client Key Change
剩余流程
- 浏览器发送 Change Cipher Spec 给服务器,告知服务器可以开始传输数据
- 服务器发送 Change Cipher Spec 给浏览器
- 浏览器回复 ACK 给服务器,就开始传输数据
HTTPS 的使用代价:
- 建立 HTTPS 需要时间(~0.3s)
- 数据加密和解密会占用 CPU
- 数据加密后比原信息大,占用更多带宽
SSLStrip 攻击
专门针对 HTTPS 的攻击方式
- 攻击者通过 ARP 欺骗监听客户端
- 攻击者与浏览器建立 HTTP 连接
- 攻击者与服务器建立 HTTPS 连接