DANE 概述
DANE(DNS-Based Authentication of Named Entities)是一種利用 DNS 基礎設施來驗證 TLS 憑證的安全協定。它透過 DNSSEC 簽署的 DNS 記錄來發布憑證資訊,讓用戶端可以直接從 DNS 查詢中驗證伺服器的憑證是否正確。
DANE 的主要優勢包括:
- 減少對 CA 的依賴:網域擁有者可以自行指定信任的憑證
- 防止中間人攻擊:透過 DNSSEC 確保 DNS 記錄的完整性
- 降低憑證濫發風險:即使 CA 被入侵,攻擊者也無法輕易偽造憑證
DANE 與傳統 PKI 比較
| 項目 | 傳統 PKI | DANE |
|---|---|---|
| 信任模型 | 信任所有 CA | 只信任網域指定的憑證 |
| 憑證驗證 | CA 簽章驗證 | DNS 記錄驗證 |
| 安全基礎 | CA 的可信度 | DNSSEC 簽章 |
| 憑證撤銷 | CRL/OCSP | 更新 DNS 記錄 |
| 部署複雜度 | 較低 | 需要 DNSSEC |
傳統 PKI 模型中,任何一個被信任的 CA 都可以為任何網域簽發憑證,這造成了安全隱患。DANE 透過將憑證資訊綁定到 DNS 記錄,讓網域擁有者能夠明確指定哪些憑證是合法的。
TLSA 記錄格式
DANE 使用 TLSA(Transport Layer Security Authentication)資源記錄來發布憑證資訊。TLSA 記錄的格式如下:
| |
各欄位說明:
- _port:服務的連接埠號碼(如
_443代表 HTTPS) - _protocol:傳輸協定(如
_tcp或_udp) - hostname:主機名稱
- usage:憑證使用模式(0-3)
- selector:選擇器(0-1)
- matching-type:匹配類型(0-2)
- certificate-data:憑證資料或雜湊值
憑證使用模式
DANE 定義了四種憑證使用模式(Certificate Usage):
模式 0:PKIX-TA(CA Constraint)
限制憑證必須由指定的 CA 簽發,並且必須通過 PKIX 驗證。
| |
模式 1:PKIX-EE(Service Certificate Constraint)
指定伺服器必須使用特定的憑證,並且必須通過 PKIX 驗證。
| |
模式 2:DANE-TA(Trust Anchor Assertion)
指定信任錨點,不需要 PKIX 驗證。適合使用自簽憑證的情境。
| |
模式 3:DANE-EE(Domain Issued Certificate)
直接指定伺服器憑證,不需要 PKIX 驗證。這是最常用的模式。
| |
選擇器與匹配類型
選擇器(Selector)
| 值 | 名稱 | 說明 |
|---|---|---|
| 0 | Cert | 使用完整憑證 |
| 1 | SPKI | 只使用 Subject Public Key Info |
建議使用選擇器 1(SPKI),因為在憑證更新時,只要公鑰不變,就不需要更新 TLSA 記錄。
匹配類型(Matching Type)
| 值 | 名稱 | 說明 |
|---|---|---|
| 0 | Full | 完整資料 |
| 1 | SHA-256 | SHA-256 雜湊 |
| 2 | SHA-512 | SHA-512 雜湊 |
建議使用匹配類型 1(SHA-256),在安全性和資料大小之間取得平衡。
產生 TLSA 記錄
以下是使用 OpenSSL 產生 TLSA 記錄的方法:
方法一:從憑證檔案產生
| |
方法二:從伺服器直接取得
| |
方法三:使用專用工具
| |
DNS 設定範例
以下是在不同 DNS 服務中設定 TLSA 記錄的範例:
BIND DNS 設定
在 zone 檔案中加入以下記錄:
| |
Cloudflare DNS 設定
在 Cloudflare 控制台中:
- 進入 DNS 管理頁面
- 點擊「新增記錄」
- 類型選擇「TLSA」
- 填入相關資訊:
- 名稱:
_443._tcp.www - 使用模式:3
- 選擇器:1
- 匹配類型:1
- 憑證資料:(貼上雜湊值)
- 名稱:
使用 nsupdate 動態更新
| |
驗證 DANE 設定
使用 dig 查詢 TLSA 記錄
| |
使用 openssl 驗證
| |
使用線上工具驗證
以下是一些實用的線上驗證工具:
- DANE SMTP Validator:https://dane.sys4.de/
- Internet.nl:https://internet.nl/
- SSL Labs:https://www.ssllabs.com/ssltest/
使用 danetool 驗證
| |
部署注意事項
前置條件
- 啟用 DNSSEC:DANE 依賴 DNSSEC 來確保 DNS 記錄的完整性,沒有 DNSSEC 的 DANE 記錄將被忽略
- 確認 DNS 解析器支援:確保用戶端使用的 DNS 解析器支援 DNSSEC 驗證
憑證更新流程
更新憑證時,請遵循以下步驟以避免服務中斷:
| |
常見問題排解
| 問題 | 可能原因 | 解決方案 |
|---|---|---|
| TLSA 查詢無結果 | DNS 未正確設定 | 檢查 DNS 記錄語法 |
| 驗證失敗 | 雜湊值不匹配 | 重新產生 TLSA 記錄 |
| DNSSEC 驗證失敗 | 簽章過期或無效 | 重新簽署 DNS zone |
| 憑證不匹配 | 使用錯誤的選擇器 | 確認選擇器設定 |
安全建議
- 使用 DANE-EE(模式 3)配合選擇器 1:這是最推薦的組合
- 設定適當的 TTL:建議 3600 秒(1 小時)
- 監控 TLSA 記錄:定期檢查記錄是否正確
- 憑證更新前預先部署:新增新 TLSA 記錄後等待 TTL 過期再更換憑證
參考資料
- RFC 6698 - The DNS-Based Authentication of Named Entities (DANE)
- RFC 7671 - The DNS-Based Authentication of Named Entities (DANE) Protocol: Updates and Operational Guidance
- RFC 7672 - SMTP Security via Opportunistic DNS-Based Authentication of Named Entities (DANE)
- DANE 實作指南 - Internet Society
- DNSSEC/DANE 部署最佳實務 - NIST