首页/安全/加密与证书速查/DANE 与 TLSA 记录
TLS 与 HTTPS60 条

DANE 与 TLSA 记录

DANE 通过 DNSSEC 把证书或公钥指纹发布在 DNS 的 TLSA 记录中,让客户端可以不依赖 CA 体系校验服务端证书;前提是域名启用 DNSSEC 且解析链可信。

加密与证书速查安全更新于 2026-10-13

DANE 是什么

DANE(DNS-Based Authentication of Named Entities,RFC 6698)把服务端证书或公钥的指纹发布到 DNS 的 TLSA 记录里,客户端在握手时用经过 DNSSEC 验证的 DNS 答案来校验证书,因此不必只依赖公共 CA。它回答的是「信任锚放在哪」:信任锚从浏览器的 CA 列表转移到域名持有者自己控制的 DNS 区。记录名固定为 _端口._传输协议.域名,例如 443 端口的 TCP 服务写作 _443._tcp.example.com,TLSA 记录必须与 DNSSEC 签名一起使用才有意义。

基本信息

记录类型TLSA(RFC 6698),名称格式为 _端口._协议.域名
记录内容用途类型 / 选择类型 / 匹配类型 + 证书关联数据(十六进制)
四种子类型PKIX-TA(0)、PKIX-EE(1)、DANE-TA(2)、DANE-EE(3)
选择与匹配选择:整证书(0) 或公钥 SPKI(1);匹配:SHA-256(1)、SHA-512(2)
前置依赖域名部署 DNSSEC 且验证链完整,否则记录可被伪造或删除
查询工具dig、delv、drill(Linux 与 BSD 的解析器工具集)
典型端口_443._tcp(HTTPS)、_25._tcp(SMTP,RFC 7672)

典型使用场景

  • 邮件投递链路加固:收信方发布 TLSA,发信方按 DANE 校验对端证书,抵御中间人窃听与伪造
  • 内部服务不想依赖公共 CA:私有 CA 或自签证书配上 TLSA,客户端无需预置根证书
  • 证书固定的另一种落地方式:把公钥指纹放进自己控制的 DNS 区,省去逐台改配置分发
  • 排查证书校验失败:用 TLSA 记录判断问题出在 CA 链还是指纹不匹配
  • 行业或合规要求收紧时的补充手段:把信任锚收回自管,减少对第三方签发机构的依赖

查询与验证示例

查询与验证示例
dig +short TLSA _443._tcp.example.com            # 取 TLSA 记录内容,看不到即未发布
dig +dnssec TLSA _443._tcp.example.com            # 同时显示 RRSIG,确认记录被签名
delv _443._tcp.example.com TLSA                   # 用 delv 完成完整 DNSSEC 验证并给出结论
dig +short DS example.com                         # 父区有 DS 记录才构成信任链的入口
dig +short DNSKEY example.com                     # 本区签名公钥,缺失说明未启用 DNSSEC
unbound-host -D -v _443._tcp.example.com          # 换一款强验证解析器交叉核对结果

TLSA 记录逐段读法

字段含义取值与异常
用途类型这条记录怎么被使用0-3;取 3(DANE-EE)时证书可以不由公共 CA 签发
选择类型关联到证书的哪一部分0 整证书、1 公钥 SPKI;证书频繁重签时用 1(SPKI)更稳定
匹配类型关联数据的算法1 为 SHA-256、2 为 SHA-512;0 是整段原文,实际几乎不用
关联数据由选定部分派生出的指纹十六进制串;长度与匹配类型对不上说明记录被改坏
记录名_端口._协议.域名端口或协议写错就查不到记录,表现为「没有可用的 DANE 信息」
TLSA 只在 DNSSEC 验证通过时才有保护力:验证型解析器未生效、或上游把 RRSIG 剥掉,攻击者就能删除 TLSA 记录让校验回落成普通 CA 校验,这正是降级攻击的路径。部署后请用 delv 这类强验证工具从外部确认验证确实生效。
目前 DANE 的成熟落地集中在邮件(RFC 7672)与少数内部服务;主流浏览器并不按 TLSA 校验 HTTPS 证书,所以 DANE 不能替代公共 CA 来兜住 Web 站点的兼容性,把它当成补充手段更合适。
轮换证书或私钥时,新旧指纹至少要在切换窗口内同时发布,并遵守 TTL:先把新指纹发布出去、等过原 TTL 再换证书,最后删掉旧记录,顺序颠倒就会出现「服务是好的、客户端却全部握手失败」。

易错点

  • 域名没部署 DNSSEC 就发布 TLSA:记录可被随意伪造或删除,客户端无从验证,保护等于零
  • 换证书时忘记同步更新 TLSA,指纹不匹配导致启用 DANE 的客户端直接拒绝连接
  • 选择类型用整证书(0)又频繁重签:每次重新签发都改变关联数据,运维负担和故障面同时放大
  • 只发布 TLSA 却不检查 TTL 与发布顺序,切换期间新旧指纹都不匹配,故障窗口被拉长
  • 客户端侧使用老解析器或关闭验证的 stub,命令行查询看似正常,实际链路根本没做 DNSSEC 校验

数据来源与参考

  • RFC 6698(DANE/TLSA)
  • RFC 7672(SMTP 的 DANE 应用)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌