本文档介绍如何为您的域名开启 DNSSEC(DNS Security Extension)。
作为 DNS 的扩展协议,DNSSEC 为 DNS 数据的来源和完整性提供了鉴权机制,可以验证 DNS 响应是否来自权威 DNS 服务器,从而避免 DNS 缓存投毒(DNS cache poisoning)等攻击。参见 DNSSEC 了解更多信息。
DNSSEC 引入了以下记录类型:
递归 DNS 服务器发送 DNS 查询请求时,DNSSEC 验证过程如下:
您的域名必须同时满足以下条件才能开启 DNSSEC。
警告
如果您的域名开启了 DNSSEC,且该域名的付费版本实例到期时没有及时续费,您的域名解析会失败。如果你计划不再为您的域名的付费版本实例续费,您需要在域名注册服务商处删除 DS 记录,然后在云解析 DNS 中关闭 DNSSEC。
说明
如果您的域名开启了 DNSSEC,但用户的 Local DNS 服务器不支持 DNSSEC,域名可能无法被正常解析。
说明
如果您的域名下有域名前缀为 @
的 CNAME 解析记录,则您的域名无法开启 DNSSEC。如果您的域名开启了 DNSSEC,您也无法添加域名前缀为 @
的 CNAME 解析记录。
参见以下步骤在云解析 DNS 中为您的域名开启 DNSSEC。
参数 | 描述 |
---|---|
DS记录 DS Record | DS(Delegation Signer)记录。该记录包含 DNSKEY 记录中的 KSK 公钥的哈希值。 |
密钥标签 Key Tag | Key Tag 是一个 16 bit 的数字,用于从 DNSKEY 记录的 RRSet 中标识一条 DNSKEY 记录。该参数标识了包含 KSK 公钥的 DNSKEY 记录。 |
加密算法 Algorithm | 计算 KSK 公钥的哈希值所使用的算法。 |
摘要类型 Digest Type | KSK 公钥的哈希值的类型。 |
摘要 Digest | KSK 公钥的哈希值。 |
公钥 Public Key | KSK 公钥。 |
公钥类型 Flags | 公钥的类型。该参数为 257(KSK)。 |
参见域名注册服务商的产品文档,使用从步骤一获得的信息为您的域名添加 DS 记录。
添加 DS 记录后,您可以验证 DNSSEC 是否生效。
DNSViz 是一个在线、开源的 DNS 分析工具。下面的步骤以 DNSViz 为例,介绍如何验证 DNSSEC 是否已经对您的域名生效。
example.com
为例展示了有效的 DNSSEC。brokendnssec.net
为例展示了因权威 DNS 服务器缺少 DNSKEY 记录导致其无法匹配顶级域 DNS 服务器的 DS 记录,从而造成信任链中断。您可以使用 dig +dnssec
命令验证 DNSSEC。
$ dig +dnssec www.example.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59330 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags: do; udp: 512 ;; QUESTION SECTION: ;www.example.com. IN A ;; ANSWER SECTION: www.example.com. 19439 IN A 93.184.216.34 www.example.com. 19439 IN RRSIG A 13 3 86400 20240207154702 20240117103421 60960 example.com. nZz4JmYshN2qjQtcgt5Lfh9AXE04X7jp3p/ORq5j7m8JWEqtuqlEOzr7 W4DOBmrPg7NFiP7Ij+t3+YxtgW89iQ==
如果 DNS 响应中包含 RRSIG 记录,则说明 DNS 响应经过 DNSSEC 验证。另外,返回信息中的 ad
flag 也说明 DNS 响应是经过 DNSSEC 验证的。
说明
如果 dig +dnssec
命令没有返回 RRSIG 记录,也可能是因为您使用的递归 DNS 服务器(公共 DNS 服务器或 Local DNS 服务器)不支持 DNSSEC。你可以使用一个支持 DNSSEC 的公共 DNS 服务器进行验证,例如 1.1.1.1
或 8.8.8.8
。
$ dig +dnssec www.example.com @1.1.1.1
您可以使用 dig DNSKEY
命令获取 example.com
的 DNSKEY 记录:
$ dig DNSKEY example.com +short 256 3 13 joM9sPIlr483WIEP5ra1SdYGDRemvZgXUZ3HSZs9EK8GTYti4eTuGkrT L/4NBJOW/9TxpJ9MfrBA0H21hkxvlg== 257 3 13 kXKkvWU3vGYfTJGl3qBd4qhiWp5aRs7YtkCJxD2d+t7KXqwahww5IgJt xJT2yFItlggazyfXqJEVOmMJ3qT0tQ== 256 3 13 PSaUY8snD++LwIab0JNMP9zyx2whZOhc3kciM2XOR4gk09wr4uDxWwr3 Zzq84rk30l8fwxI/94QWRIgwZFNaFw==
其中,256 代表公钥类型是 ZSK;257 代表公钥类型是 KSK。
您可以通过 dig DS
命令获取 example.com
在域名注册服务商处添加的 DS 记录。
$ dig DS example.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19632 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;example.com. IN DS ;; ANSWER SECTION: example.com. 86400 IN DS 370 13 2 BE74359954660069D5C63D200C39F5603827D7DD02B56F120EE9F3A8 6764247C ;; Query time: 459 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) ;; WHEN: Thu Jan 18 16:28:57 CST 2024 ;; MSG SIZE rcvd: 88