HTTPS 中常见攻击与防御策略涵盖中间人攻击(MITM)、SSL剥离、重放攻击等,帮助构建安全的 HTTPS 通信环境:
一、中间人攻击(MITM)
攻击原理
场景:攻击者通过伪造证书或劫持网络流量,伪装成合法服务器与客户端通信。
典型手段:
ARP欺骗:在局域网内伪造 MAC 地址,截获流量。
DNS劫持:篡改 DNS 解析结果,将用户导向恶意服务器。
伪造证书:攻击者自签名证书冒充目标网站。
风险场景
公共 WiFi 下访问 HTTP 网站。
未启用 HSTS 的 HTTPS 网站。
证书颁发机构(CA)被攻破或私钥泄露。
防御策略
强制 HTTPS(HSTS):
通过 Strict-Transport-Security 头部强制浏览器使用 HTTPS,防止降级攻击。
add_header Strict-Transport-Security “max-age=31536000; includeSubDomains” always;
证书绑定(证书透明度):
使用 Certificate Transparency(CT)监控证书颁发,防止恶意 CA 签发假证书。
证书固定(Certificate Pinning):
在客户端固定信任的证书公钥,拒绝非预期的证书(适用于移动端 App)。
定期更新证书:
缩短证书有效期,减少私钥泄露风险。
二、SSL剥离(SSL Stripping)
攻击原理
攻击者将 HTTPS 连接降级为 HTTP,窃听明文传输的敏感数据(如密码、Cookie)。
典型场景:用户访问 HTTP 版本的网站,攻击者通过中间人劫持流量并移除 SSL 加密。
风险场景
网站同时支持 HTTP 和 HTTPS,且未强制跳转。
未启用 HSTS 的网站。
防御策略
强制 HTTPS 跳转:
服务器配置 HTTP 自动重定向到 HTTPS。
server {
listen 80;
server_name example.com;
return 301 https://hostrequest_uri;
启用 HSTS:
浏览器收到 HSTS 头部后,拒绝后续 HTTP 请求。
add_header Strict-Transport-Security “max-age=31536000; includeSubDomains; preload”;
禁用旧版协议:
确保服务器不支持 SSLv3 等易受攻击的协议。
三、重放攻击(Replay Attack)
攻击原理
攻击者截获合法请求并重复发送,冒充用户执行操作(如重复提交订单)。
典型场景:未使用随机数(Nonce)或时间戳的 API 请求。
风险场景
无防重放机制的 API 接口。
使用固定 Session ID 或 Token 的认证系统。
防御策略
随机数(Nonce):
每个请求附带唯一随机数,服务器校验其是否已使用。
GET /api/data?nonce=abc123×tamp=1620000000
时间戳(Timestamp):
请求中加入时间戳,服务器拒绝超过时间窗口(如 ±5 分钟)的请求。
序列号(Sequence Number):
为每个请求分配递增序号,拒绝序号重复或过期的请求。
HTTPS 加密:
使用 TLS 的 MAC(消息认证码)确保数据完整性,防止篡改。
四、其他常见攻击与防御
重定向攻击(Pharming)
攻击:伪造网站域名或 DNS 解析,诱导用户访问虚假站点。
防御:
配置正确的 DNSSEC(DNS 安全扩展)。
使用 EV SSL 证书(扩展验证),浏览器地址栏显示绿色企业名称。
Heartbleed 漏洞(OpenSSL 漏洞)
攻击:通过 OpenSSL 心跳扩展漏洞窃取服务器内存数据(如私钥)。
防御:
升级 OpenSSL 至 1.1.1 或更高版本。
定期重启服务以清除内存残留数据。
CRIME/BEAST 攻击
攻击:利用 TLS 压缩或 CBC 模式漏洞窃取会话 Cookie。
防御:
禁用 TLS 压缩(如 sslcompression off;)。
优先使用 AEAD 加密套件(如 AES-GCM)。
五、综合防御方案
协议与加密套件优化:
禁用 SSLv3/TLS 1.0/1.1,仅启用 TLS 1.2+。
使用强加密套件(如 ECDHE-ECDSA-AES128-GCM-SHA256)。
证书管理:
使用 Let’s Encrypt 自动化证书签发与续期。
配置 OCSP Stapling 减少证书验证延迟。
监控与审计:
使用 SSL Labs 测试工具定期扫描配置漏洞。
部署 WAF(Web 应用防火墙)拦截异常请求。
六、工具与实战验证
检测中间人攻击:
openssl s_client -connect example.com:443 -showcerts
检查证书链是否完整,是否被篡改。
模拟 SSL 剥离:
使用工具(如 sslstrip)测试网站是否易受降级攻击。
重放攻击测试:
使用 Postman 或 Python 脚本重复发送相同请求,观察服务器是否拒绝。
总结
HTTPS 的安全性依赖于协议设计、证书管理、加密算法三者的协同:
中间人攻击:通过 HSTS、证书绑定和定期更新防御。
SSL剥离:强制 HTTPS + HSTS 组合拳。
重放攻击:Nonce、时间戳与序列号机制。
最终目标:构建端到端加密、抗篡改、抗重放的 HTTPS 通信环境,保障用户数据安全与业务连续性。