DNS 在设计之初并未考虑保密性与完整性验证(正如 HTTP),在 HTTPS 得到广泛应用后,人们迫切地需要在 DNS 上同样部署类似的服务,于是 DNSSEC 应运而生。尽管 DNSSEC 不能加密 DNS,但可以验证 DNS 记录的完整性,保护其不受中间人篡改,因此可以避免 DNS 污染。在域名的权威服务器和用户查询所使用的递归服务器均启用 DNSSEC 的前提下,用户要么得到正确的 DNS 记录,要么得到 SERVFAIL 状态码,提示 DNS 记录可能被篡改了。
#!/usr/bin/bash
# This script is for revoking sign.# Usage: ./revoke example.com# First delete DS record in registrar, then run this script.DOMAIN=$1cd /etc/nsd/zone
rm -rf K$DOMAIN.*
rm -rf $DOMAIN.signed
sed -i "s/zonefile: $DOMAIN.signed/zonefile: $DOMAIN/g" /etc/nsd/nsd.conf.d/ns.conf
systemctl restart nsd
详细说明
建议读者先掌握 DNSSEC 的基本理论知识,这里不作介绍,只讲述实践方法。
签名时,首先生成 ZSK 和 KSK 两对密钥,然后使用它们对域进行签名,ldns 会自动生成与原始 DNS 记录相对应的带有 DNSSEC 的 DNS 记录,文件名为 example.com.signed,因此需要重新配置 NSD。最后需要在域名提供商处添加 DS 记录(因为 DNSSEC 也采用 TLS 证书的信任链方式),将命令的输出直接(或者按各项参数分别)添加到域名提供商处即可。
修改了 DNS 记录后,由于完整性被破坏,需要重新签名,但这时无须重新生成密钥,因而也无须修改 DS 记录(否则也太麻烦了点),只须使用原有的 ZSK 和 KSK 两对密钥重新签名。