我之前一直以为,只要不在 DNS 中公开解析某个子域名、不在网页上挂链接,这个域名就等于隐藏起来了。
但现实是,只要我曾经为某个域名申请过 SSL/TLS 证书,它就几乎一定已经被公开记录,并且任何人都可以轻松查询出来。
其中最常用的查询工具之一,就是 crt.sh。
今天我就从技术原理到实际应用,完整讲一讲:
为什么你的子域名会在互联网上无处遁形。
一、crt.sh 是什么?
crt.sh 是一个由 Sectigo(原 Comodo)运营的公开网站,用来查询互联网的 证书透明度(Certificate Transparency,简称 CT)日志。
简单来说,它就是:互联网 SSL 证书的搜索引擎。
只要一个网站申请过合法的 HTTPS 证书,它的记录几乎都会被收录。
你可以在这里查询:
- 某个域名申请过哪些证书
- 历史证书记录
- 证书签发机构
- 有效期
- SAN(备用域名)
- 加密算法等详细信息
网址:
https://crt.sh
例如查询:
%.example.com
就可以看到 example.com 所有申请过证书的子域名。
二、核心技术:证书透明度(CT)
要理解 crt.sh 的原理,必须先了解 证书透明度(Certificate Transparency)。
这是 Google 发起的一项互联网安全机制。
在早期互联网中,证书颁发机构(CA)签发证书的过程是 不透明的。
如果发生这种情况:
- CA 被黑客攻击
- CA 操作失误
- CA 恶意签发证书
例如有人为 bank.com 私下签发证书。
银行甚至可能 完全不知道。
这会导致严重的 HTTPS 安全问题。
为了解决这个问题,Google 推出了 证书透明度(CT)机制。
它的核心规则是:
1 强制公开
所有公开 CA 在签发证书时:
必须将证书信息提交到 公开 CT 日志服务器。
2 不可篡改
CT 日志采用类似 Merkle Tree(哈希树) 的结构。
特点是:
- 只能增加
- 不能删除
- 不能修改
这保证了日志的可信度。
3 公开审计
任何人都可以:
- 查询
- 审计
- 监控
这些证书记录。
三、crt.sh 在整个体系中的角色
CT 日志本身是:
- 海量
- 分布式
- 不容易直接查询
于是出现了很多 CT 查询引擎。
其中最著名的就是:
crt.sh
它做的事情是:
- 持续同步全球 CT 日志
- 建立索引数据库
- 提供简单的 Web 查询界面
最终变成:互联网证书档案库 + 搜索引擎
四、为什么子域名会泄露?
关键点就在 证书申请过程。
假设你为:
dev-api.example.com
申请了一个 Let's Encrypt 证书。
整个流程是这样的:
第一步:申请证书
CA 机构生成证书。
证书中包含:
- 域名
- 公钥
- 有效期
- 备用域名(SAN)
第二步:写入 CT 日志
CA 必须把证书信息提交到 CT 日志。
第三步:日志公开
CT 日志对全世界开放。
第四步:crt.sh 收录
crt.sh 会自动抓取日志并入库。
最终结果就是:
即使 DNS 没有解析,即使服务器没有上线,域名仍然会出现在公开记录中,而且永久可查。
五、如何通过 crt.sh 发现子域名?
crt.sh 支持 SQL 风格通配符查询。
例如:
| 查询语法 | 作用 |
|---|---|
| example.com | 查询主域名 |
| %.example.com | 查询所有子域名 |
| api%.example.com | 查询 API 相关域名 |
最常见的用法是:
%.target.com
六、为什么安全研究人员特别喜欢 crt.sh?
在 OSINT(开源情报) 收集阶段,它是非常强大的工具。
主要用途包括:
1 资产发现
发现企业的隐藏服务,例如:
- dev.example.com
- admin.example.com
- staging.example.com
2 子域名枚举
传统方法:
- DNS 暴力猜测
- 字典爆破
成功率有限。
而 CT 查询属于被动收集
不会触发:
- 防火墙
- IDS
- WAF
3 推测企业架构
通过证书记录可以推断:
api-v1.example.comapi-v2.example.com
说明:
企业可能有 API 版本管理。
4 发现影子 IT
很多员工会私自部署:
test-jenkins.example.comtemp-server.example.com
这些系统可能:
- 没有安全审计
- 没有更新
- 容易成为攻击入口
七、企业如何利用 crt.sh 做安全防护?
不仅黑客会用,企业自己也应该用。
主要用途包括:
1 钓鱼网站监控
例如:
login-yourbank.com
如果有人申请证书,就可能是钓鱼站,企业可以第一时间发现。
2 证书资产管理
检查:
- 是否有证书即将过期
- 是否有未知证书
3 CA 合规审计
安全社区经常通过 crt.sh 调查:
某个 CA 是否违规签发证书。
很多浏览器的 CA 调查报告里都会引用 crt.sh 记录。
八、既然如此,如何避免泄露子域名?
虽然 CT 是强制机制,但仍然有一些方法可以减少暴露。
方法一:使用通配符证书
例如申请:
*.example.com
CT 日志只会记录:
*.example.com
不会出现:
dev.example.comadmin.example.com
这是最常见的解决方案。
方法二:避免敏感命名
不要使用:
secret-feature-2026.example.com
这种暴露业务信息的域名。
方法三:内网使用私有 CA
对于纯内网服务:
建议使用:
- 私有 PKI
- 自建 CA
而不是公开 CA。
这样就不会进入 CT 日志。
九、crt.sh 的局限性
需要注意的是:crt.sh 不是万能的。
它只能发现:申请过证书的域名。
如果某个子域名:
- 从未申请证书
- 只使用 HTTP
- 只存在内网
那么 crt.sh 也查不到。
十、总结
crt.sh 的出现,本质上是互联网安全透明化的结果。
它让 HTTPS 证书体系变得:
- 可审计
- 可监控
- 可追溯
但同时也意味着:
在 HTTPS 时代你的每一次证书申请,都会留下公开记录。
对于开发者和运维人员来说,这其实是一个提醒:
不要把子域名当作安全边界。
真正的安全,应该来自:
- 身份认证
- 访问控制
- 网络隔离
- 安全审计
而不是希望别人找不到。
本文来自网络,不代表王道测评立场,如有争议请发邮件:enofun@foxmail.com
AD:【本站QQ交流群】114135944



评论