# DANE（基于 DNS 的命名实体认证）是什么？

> DANE 是一种利用经 DNSSEC 签名的 TLSA 记录，把 TLS 服务器的证书或公钥与其域名绑定起来的协议。

Source: https://ssl.sh/zh/glossary/dane/
Last updated: 2026-11-10

DANE 由 [RFC 6698](https://www.rfc-editor.org/rfc/rfc6698) 定义，邮件传输场景的用法见 RFC 7672。域名所有者发布 [TLSA](https://ssl.sh/zh/glossary/tlsa/) 记录，声明某个端口上的服务必须出示哪张证书或哪个公钥。这些记录由 [DNSSEC](https://ssl.sh/zh/glossary/dnssec/) 签名，做了 DNSSEC 校验的客户端就可以信任它们，而不必完全依赖公共 CA 体系。根据记录中“用途”字段的不同，DANE 可以在常规 CA 校验之上增加约束，也可以完全取代 CA 校验，例如用来认证私有 CA 签发的证书。

## 为什么重要
DANE 目前主要的实际部署场景是邮件服务器之间的 SMTP。没有 DANE 时，发信服务器看到 [STARTTLS](https://ssl.sh/zh/glossary/starttls/) 一般只加密不校验证书，攻击者还能把 TLS 整个剥掉；有了 DANE，做校验的发信方知道对这个目的地必须用 TLS、也知道应当看到哪个密钥，降级和截获都会失败。Postfix 等常见邮件传输代理都支持 DANE。浏览器则不使用 DANE 校验 HTTPS。代价在运维上：域名各级的 DNSSEC 必须正常，密钥更换前要先更新 TLSA 记录，否则发往该域名的邮件会投递失败。启用前要确认 DNS 服务商和域名注册商都支持 DNSSEC。

## 例子
```bash
dig +dnssec TLSA _25._tcp.mail.example.com
# _25._tcp.mail.example.com. 3600 IN TLSA 3 1 1 <服务器公钥的 SHA-256>
# ……以及 RRSIG 记录；如果解析器完成了校验，还会带 ad 标志
```

## 常见误区
- **不开 DNSSEC 也能用 DANE。** DANE 客户端会忽略未签名的 TLSA 记录，因为能伪造 DNS 的人同样能伪造它们。
- **浏览器会校验 DANE。** 主流浏览器都不为 HTTPS 校验 TLSA 记录，DANE 主要用于邮件。
- **用了 DANE 就不需要 CA 签发的证书。** 只有 DANE-TA 和 DANE-EE 两种用途会绕开 CA 校验；很多运维者仍使用公共信任证书，以兼容不支持 DANE 的客户端。

## 相关术语

- [TLSA 记录](https://ssl.sh/zh/glossary/tlsa/): TLSA 记录是一种 DNS 记录，声明某个端口和协议上的 TLS 服务必须出示哪张证书或哪个公钥，供 DANE 校验使用。
- [DNSSEC](https://ssl.sh/zh/glossary/dnssec/): DNSSEC 是一组 DNS 扩展，让解析器能沿着从根区开始的签名链，验证 DNS 应答确实来自权威方且未被篡改。
- [STARTTLS](https://ssl.sh/zh/glossary/starttls/): STARTTLS 是一条协议命令，用于把 SMTP、IMAP、POP3 等协议中已建立的明文连接，在同一端口上升级为 TLS 加密连接。
- [证书颁发机构](https://ssl.sh/zh/glossary/certificate-authority/): 证书颁发机构（CA）是负责审核申请者、签发数字证书，并把公钥与域名或身份绑定在一起的机构。
- [自签名证书](https://ssl.sh/zh/glossary/self-signed-certificate/): 自签名证书是用自身私钥签名的证书，颁发者与主体相同，没有任何 CA 为它担保。
- [CAA 记录](https://ssl.sh/zh/glossary/caa/): CAA 记录是一种 DNS 记录，用来声明哪些证书颁发机构可以为该域名签发证书，所有公共 CA 签发前都必须检查。
