DNSSEC:DNS 的數字簽名
DNSSEC(DNS Security Extensions)為 DNS 記錄添加數字簽名,讓接收方可以驗證記錄沒有被篡改。
DNSSEC 解決什麼問題
傳統 DNS:
你查詢 bank.com → DNS 返回 IP
問題:你無法確認這個 IP 是真實的還是被篡改的
DNSSEC:
你查詢 bank.com → DNS 返回 IP + 數字簽名
你的解析器用公鑰驗證簽名 → 確認記錄沒有被篡改
DNSSEC 的工作原理
graph TD
ROOT[根域名
有信任錨點] COM[.com TLD
有根域名的簽名] ZONE[bank.com
有 .com 的簽名] RECORD[bank.com 的 A 記錄
有 bank.com 的簽名] ROOT --> COM --> ZONE --> RECORD ROOT -.信任鏈.-> RECORD
有信任錨點] COM[.com TLD
有根域名的簽名] ZONE[bank.com
有 .com 的簽名] RECORD[bank.com 的 A 記錄
有 bank.com 的簽名] ROOT --> COM --> ZONE --> RECORD ROOT -.信任鏈.-> RECORD
信任鏈(Chain of Trust): - 根域名的公鑰是「信任錨」,硬編碼在 DNS 軟件中 - 每一層用上一層的簽名來驗證 - 只要根域名是可信的,整個鏈都是可信的
DNSSEC 的 DNS 記錄
啟用 DNSSEC 後,DNS 區域中會添加新的記錄類型:
| 記錄 | 說明 |
|---|---|
| DNSKEY | 存放公鑰 |
| RRSIG | 記錄的數字簽名 |
| DS | 委派簽名(父域名存放子域名的密鑰哈希) |
| NSEC/NSEC3 | 證明某個域名不存在(防止否認攻擊) |
啟用 DNSSEC
在 Cloudflare 啟用(最簡單)
路徑: DNS → Settings → DNSSEC → Enable DNSSEC
Cloudflare 自動生成所有必要的記錄,你只需要:
- 點擊「Enable DNSSEC」
- Cloudflare 顯示需要在注冊商添加的 DS 記錄
- 在你的注冊商後台添加 DS 記錄
- 等待傳播(最多 48 小時)
在注冊商添加 DS 記錄
不同注冊商的操作路徑不同,通常在域名管理 → DNSSEC 設置中。
DS 記錄格式(Cloudflare 會提供具體值):
Key Tag: 12345
Algorithm: 13
Digest Type: 2
Digest: ABCD1234...
驗證 DNSSEC 是否生效
# 用 dig 驗證 DNSSEC 簽名
dig A example.com +dnssec
# 如果返回中有 RRSIG 記錄,說明 DNSSEC 已啟用
# 在線驗證工具
# dnssec-analyzer.verisignlabs.com
# dnsviz.net
DNSSEC 的注意事項
| 注意點 | 說明 |
|---|---|
| 不加密內容 | DNSSEC 只驗證真實性,不加密 DNS 查詢(用 DoH/DoT 加密) |
| 需要注冊商支持 | 不是所有注冊商都支持 DNSSEC |
| 密鑰輪換 | 定期需要輪換密鑰(Cloudflare 自動處理) |
| 啟用前測試 | 錯誤的 DNSSEC 配置可能導致整個域名無法解析 |
DNS over HTTPS(DoH)和 DNS over TLS(DoT)
這兩個技術加密 DNS 查詢(DNSSEC 只驗證,不加密):
| 技術 | 端口 | 說明 |
|---|---|---|
| 傳統 DNS | 53/UDP | 明文,可被監聽 |
| DNS over TLS(DoT) | 853/TCP | 加密,單一用途 |
| DNS over HTTPS(DoH) | 443/TCP | 加密,與 HTTPS 混合難以區分 |
啟用方式: - 在瀏覽器設置(Firefox、Chrome 支持 DoH) - 在操作系統層面(Windows 11 支持 DoH) - 使用支持 DoH 的 DNS 解析器(Cloudflare 1.1.1.1、Nextdns.io)
下一節:域名劫持防護實戰——實際操作保護你的域名。