
剛好最近看到一些文章和社群在討論「DNSSEC」,想了一下好像還沒寫過相關教學,就花了點時間研究,不過話先說在前頭,這篇文章可能會比較硬一點,如果你沒有網域名稱、也不是自行架設網站的站長或開發者,那麼本文對你可能沒有太多幫助;倘若你想增加知識,想知道 DNSSEC 究竟是什麼,我也會盡力解釋,讓大家以最簡單的方式理解這項功能。
DNS 常被稱為網路的電話簿,用以將網域名稱解析為 IP 位址,例如輸入 free.com.tw
會連接到正確的目的伺服器,DNS 對於網路有著不可言喻的重要性,然而這架構下有個問題:使用者無法確保收到的解析紀錄是否真實或有無遭到竄改(也稱為 DNS 污染),這也意味著當解析紀錄遭到更動,使用者可能無形中連接到偽裝的惡意網站,甚至是將電子郵件寄送到攻擊者的伺服器而無法察覺,對於安全上造成極大隱憂。
DNSSEC 中文是「網域名稱系統安全擴充」(Domain Name System Security Extensions),這個協議就是確保電話簿中的號碼確實是真實列出的紀錄,使用一組加密密鑰對已發佈出去的 DNS 紀錄進行簽名,使紀錄更難以被偽造。因此如果你使用的網域名稱後綴和域名註冊商支援 DNSSEC ,請記得找時間設定一下,可避免網站受到 DNS 快取污染影響。
以下我使用域名註冊商 Gandi.net 搭配 Cloudflare DNS 進行 DNSSEC 設定教學,每個註冊商和網域名稱伺服器服務介面不太一樣,也不一定都開放 DNSSEC 功能,如果你不確定如何設定,可以詢問專業人士,若沒有設定正確可能導致你的網域名稱無法正確解析或使用。
使用教學
STEP 1
開啟 Cloudflare 後選擇 DNS 頁面,往下捲動就能找到「DNSSEC」選項。

點選「Enable DNSSEC」後 Cloudflare 會開始產生相關紀錄,並將資料更新到所有地區節點,大約需要一分鐘左右時間。

STEP 2
回到域名註冊商,找到該網域名稱的 DNSSEC 設定功能,在這裡我是點選「新增加密金鑰」加入由 Cloudflare 產生的 DS Record,依照不同註冊商可能介面跟名稱也不太一樣。

STEP 3
從 Cloudflare 複製剛才 DNSSEC 產生的公開金鑰(Public Key),一長串符號必須完整複製。

回到域名註冊商,將 Public Key 貼到「公開金鑰」欄位,記得看一下旗標(Flag)、演算法等各個欄位跟 Cloudflare 部分有沒有相符。在這裡旗標是設定為 257,演算法是 13,從 Cloudflare 的 DS Record 可以找到這些項目。

新增 DS Record 後可以再次對照一下金鑰編號(Key Tag)有沒有跟 Cloudflare 相同。

STEP 4
回到 Cloudflare 按下「Continue」後,DNSSEC 下方會顯示目前狀態,一開始會等待 DS 紀錄新增到你的註冊商,因為我們剛才已經做完那段過程,這裡需要十分鐘到一小時等待紀錄更新。

STEP 5
等到 DNSSEC 確認後,下方顯示 Success! free.com.tw is protected with DNSSEC. 就代表該網域名稱已經受到 DNSSEC 保護,依照我實際操作幾個網域名稱設定的經驗,每段時間不太一樣,有些幾分鐘完成,有些可能需要等待半小時以上。

Cloudflare 建議使用 DNSViz 線上工具檢查你的 DNSSEC 運作情形,不過我找到另一個「DNSSEC Analyzer」更好用,一樣是打開網站、輸入要檢測的網域名稱,所有項目都出現綠色勾勾才算是正確設定。在 DS Record 紀錄更新階段可能中間會有一兩個紅色標記,請多給它一些時間更新。
