DNSSEC
DNSSEC(域名系统安全扩展)是互联网工程任务组(IETF)制定的一套扩展规范,用于保护域名系统中交换数据的安全。DNSSEC 旨在通过基于公钥加密的数字签名,保护应用程序免受伪造或篡改的 DNS 数据的影响,例如由 DNS 缓存投毒和中间人攻击创建的数据。
How it works
DNSSEC 使用基于公钥加密的数字签名来加强 DNS 身份验证。与传统 DNS 不同(传统 DNS 的响应可能被伪造),DNSSEC 确保 DNS 数据来自合法来源,并且在传输过程中未被篡改。需要注意的是,DNSSEC 不会加密 DNS 查询或响应——它只提供身份验证和完整性验证。
在 DNSSEC 中,进行加密签名的不是 DNS 查询和响应本身,而是 DNS 数据本身由数据所有者签名。以下是该过程的工作原理:
**签名过程:**
1. 每个 DNS 区域都有一对公钥/私钥
2. 区域所有者使用区域的私钥对区域中的 DNS 数据进行签名
3. 这会为每个 DNS 资源记录集创建数字签名(存储为 RRSIG 记录)
4. 公钥发布在 DNS 区域的 DNSKEY 记录中
**验证过程:**
1. 当对启用 DNSSEC 的区域进行 DNS 查询时,响应包括请求的 DNS 数据及其 RRSIG 签名
2. 解析器检索包含公钥的 DNSKEY 记录
3. 解析器使用公钥验证数字签名
4. 如果签名有效,则数据被确认为真实且未被修改
5. 如果签名无效,解析器会假定存在攻击,丢弃数据并返回错误
这创建了一条从根 DNS 服务器到各个域的信任链,确保 DNS 层次结构每个级别的真实性。
Key Points
- DNSSEC 提供数据来源身份验证和数据完整性保护,但不提供保密性或加密
- 使用带有 DNSKEY(公钥)和 RRSIG(数字签名)记录的公钥加密
- 从根 DNS 服务器向下通过 DNS 层次结构创建信任链
- 防止 DNS 缓存投毒、中间人攻击和 DNS 欺骗
- DNSSEC 验证失败会导致解析器完全拒绝响应
Common Use Cases
- 防止 DNS 缓存投毒: 防止攻击者向解析器缓存中注入虚假的 DNS 数据,从而将用户重定向到恶意网站
- 中间人攻击保护: 确保 DNS 响应在权威服务器和客户端之间未被攻击者拦截和修改
- 高安全性域名: 金融机构、政府网站和其他安全关键域名使用 DNSSEC 来确保用户访问到合法网站
- DANE 和 TLSA 记录: DANE(基于 DNS 的命名实体身份验证)需要 DNSSEC,它允许使用 TLSA 记录将证书绑定到 DNS 名称
code DNSSEC 记录示例
| Type | Host / Name | Value / Points to | TTL |
|---|---|---|---|
| DNSKEY | @ | 257 3 8 AwEAAb...c8= | 3600 |
| DNSKEY | @ | 256 3 8 AwEAAa...m0= | 3600 |
| RRSIG | @ | A 8 2 3600 20250115000000 20241216000000... | 3600 |
| DS | @ | 12345 8 2 49FD...AB12 | 3600 |
* DNSSEC 向 DNS 区域添加了几种新的记录类型。主要记录是 DNSKEY(公钥)和 RRSIG(数字签名)。
Frequently Asked Questions
DNSSEC 会加密 DNS 查询吗?expand_more
不会,DNSSEC 不提供加密或保密性。它只提供身份验证(验证来源)和完整性(确认数据未被修改)。DNS 查询和响应仍以明文发送。如需加密,您需要使用 DNS over HTTPS (DoH) 或 DNS over TLS (DoT) 来补充或替代 DNSSEC。
为什么 DNSSEC 没有被广泛采用?expand_more
DNSSEC 的采用一直很缓慢,原因有几个:DNS 区域管理的复杂性增加、需要谨慎的密钥管理和轮换、与某些 DNS 软件和服务的兼容性问题、更大的 DNS 响应大小可能导致 UDP 数据包限制问题,以及最终用户缺乏立即可见的好处。然而,采用率正在逐步提高,尤其是在注重安全的组织中。
如果 DNSSEC 验证失败会发生什么?expand_more
当 DNSSEC 验证失败时,意味着无法验证数字签名,表明可能存在篡改或配置错误。验证解析器将完全拒绝响应,并向客户端返回 SERVFAIL 错误。这意味着网站或服务将无法访问,而不是可能提供恶意内容。这种"故障关闭"方法优先考虑安全性而非可用性。
我需要在客户端做些什么才能使用 DNSSEC 吗?expand_more
最终用户不需要专门为 DNSSEC 配置任何东西——验证由 DNS 解析器执行(通常是您的 ISP 的 DNS 或公共 DNS 服务,如 Google DNS 或 Cloudflare)。但是,解析器必须支持 DNSSEC 验证,您才能从中受益。大多数现代 DNS 解析器都支持 DNSSEC,但并非所有解析器都默认启用验证。
DNSSEC 中的信任链是什么?expand_more
信任链从 DNS 根区域开始,由可信密钥签名。DNS 层次结构的每个级别都使用 DS(委托签名者)记录为其下一级签署记录。例如:根区域签署 .com 区域的 DS 记录,.com 区域签署 example.com 的 DS 记录,example.com 签署其自己的区域数据。解析器从根向下验证此链中的每个链接直到请求的记录,确保每个级别的真实性。