首页/网络/协议速查/TLSA 记录(DANE 证书绑定)
DNS 与域名解析60 条

TLSA 记录(DANE 证书绑定)

把 TLS 证书/公钥哈希绑定到域名上,由 DNSSEC 保证不可篡改:DANE 协议让服务端可不依赖 CA 体系做认证。

协议速查网络更新于 2026-10-13

TLSA 是什么

TLSA(TYPE 52)把 TLS 证书或公钥的哈希绑定到域名上,配合 DNSSEC 形成 DANE:客户端拿到服务端证书后,用 DNS 中的 TLSA 记录校验它是否就是域名所有者声明的那一份。这样服务端认证就不再完全依赖 CA 体系,但前提是 DNS 侧确实可信——没有 DNSSEC 的 TLSA 没有任何安全意义(RFC 6698)。

基本信息

类型TLSA(TYPE 52)
字段usage、selector、matching type 与证书关联数据
命名_端口._协议.域名,如 _443._tcp.example.com
规范RFC 6698(DANE);用法建议见 RFC 7671
前提必须先启用 DNSSEC
常见用途SMTP DANE、自建服务与高价值服务的证书绑定

典型使用场景

  • 邮件投递(SMTP DANE):强制校验对端证书,抵御降级与伪造
  • 自建服务:不依赖公共 CA 也能让客户端信任你的证书
  • 安全加固:为内部系统或高价值服务做证书绑定
  • 排障:证书轮换后确认 TLSA 记录是否同步更新
  • 合规审计:核对对外服务的 DNS 记录与证书是否一致
  • 迁移演练:更换证书前先并行发布新旧两条记录

查看与计算匹配值

查看与计算匹配值
# 查看某个端口的 TLSA 记录
dig +short _443._tcp.example.com TLSA
# 3 1 1 <sha256-hash>
# usage=3(域颁发证书)selector=1(公钥)matching=1(SHA-256)

# 计算当前证书的匹配值,与记录逐字节对比
openssl x509 -in cert.pem -noout -pubkey | openssl pkey -pubin -outform der | openssl dgst -sha256

三个字段怎么读

字段取值含义
usage0 到 30 为 CA 约束、1 为服务端证书、2 为信任锚、3 为域颁发证书
selector0 为整张证书,1 为公钥用公钥可减轻证书轮换带来的记录变更
matching0 完整、1 为 SHA-256、2 为 SHA-512实践中 1 最常用
命名_端口._协议.主机端口写错就查不到记录
没有 DNSSEC 的 TLSA 记录没有安全意义:攻击者可以伪造 DNS 应答,把哈希换成自己证书的值,绑定的意义就消失了。
证书轮换后必须同步更新 TLSA,否则启用 DANE 的客户端会直接拒绝连接;建议在新旧证书上并行发布一段时间作为过渡。
用 selector=1(公钥)而不是 selector=0(整张证书),可以在证书续期但密钥不变时避免修改记录。
TLSA 的校验发生在客户端,服务端感知不到拒绝原因,排障时要同时查看客户端日志与 DNS 记录是否一致。

易错点

  • 证书换新而 TLSA 未更新,会让启用 DANE 的客户端直接拒绝连接
  • 只发布一条 selector=0(整张证书)的记录,任何续期都会导致校验失败
  • 在未启用 DNSSEC 的区域配 TLSA 是自欺欺人:攻击者可随意替换记录值
  • 记录命名里端口或协议写错(例如给 8443 服务配了 443 的记录),客户端永远查不到
  • 只部署不巡检:TLSA 失配通常只在客户端侧报错,服务端日志里什么都看不到

数据来源与参考

  • RFC 6698 DANE/TLSA
  • RFC 7672(SMTP DANE)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌