问题背景
SSL 证书本身不会直接 “泄露” IP,但服务器配置不当、证书公开日志、证书指纹匹配、SNI 探测这四类场景,会让攻击者通过证书信息反推出源站真实 IP,尤其在使用 CDN 隐藏源站时风险更高。
攻击者向任意公网 IP 的 443 端口发起 TLS 握手,服务器会返回 SSL 证书;证书里的CN/SAN 域名、指纹、颁发者可与目标域名关联,从而锁定该 IP 就是目标域名的源站。
四大泄露路径
- 直接 IP 访问返回证书
场景:源站 443 端口开放,且未做默认站点隔离(Nginx/Apache 默认配置)。
攻击手法:
1 | # 向未知IP发起握手,获取证书 |
结果:服务器返回默认站点证书,证书里有真实域名(CN/SAN)。攻击者批量扫 IP 段,就能建立 “IP ↔ 域名” 映射表。
典型:用 CDN 后,源站 IP 仍开放 443,且返回和 CDN 节点一样的证书 → 直接暴露。
证书透明日志(CT Logs)反查
原理:Let’s Encrypt 等 CA 会公开所有签发证书(CT 日志),任何人可查。
攻击手法:
去 crt.sh、Censys、censys.io 搜目标域名,拿到证书详情(指纹、SAN、有效期)。
再用证书指纹 / 公钥哈希,反向查哪些 IP 在使用这张证书。
结果:直接得到源站 IP(因为源站必须部署证书才能提供 HTTPS)。证书指纹 / 公钥匹配(绕过 CDN)
原理:每张证书有唯一SHA256 指纹、公钥、序列号。
攻击手法:
先从 CDN 节点获取目标域名的证书指纹:
1 | openssl s_client -connect example.com:443 | openssl x509 -noout -fingerprint -sha256 |
用 Censys/Shodan 等,搜索全球所有 IP 中,使用相同指纹 / 公钥的 443 端口。
结果:匹配到的 IP,大概率就是源站(CDN 节点通常用统一证书,与源站不同)。
- SNI 探测(精准定位)
场景:源站做了默认站点隔离,但未拒绝带正确 SNI 的直接请求。
攻击手法:
1 | # 向IP发送带目标域名SNI的握手,看是否返回对应证书 |
结果:若返回 subject=example.com,则 1.2.3.4 就是源站 IP。
防御配置(Nginx 为主,必做)
- 拒绝 IP 直接访问(默认站点)
1 | # 80端口:IP访问直接返回444(关闭连接) |
1 | # 443端口:拒绝所有未匹配SNI的握手(Nginx 1.19.4+) |
效果:IP:443 直接被拒绝,不返回任何证书,无法被扫到。
- 源站仅允许 CDN IP 访问(防火墙 / 安全组)
1 | # iptables 示例:仅允许CDN节点IP访问443 |
效果:即使知道源站 IP,非 CDN 请求也被防火墙拦截,无法建立连接。
源站与 CDN 使用不同证书
做法:CDN 节点用一张证书,源站用另一张(不同指纹 / 公钥)。
效果:攻击者无法通过证书指纹匹配找到源站。关闭不必要端口、禁用泛域名解析
源站只开放必要端口(如 443),不开放 80/22 等到公网。
避免泛域名解析(*.example.com),防止子域名扫描泄露 IP。

