2012年8月10日 星期五

啟用 Windows Server 2008 R2 DNSSEC 安全性功能 (Setup DNSSEC in Windows Server 2008 R2)

Windows 7是微軟第一個DNSSEC認知的用戶端平台,而Windows Server 2008 R2則是微軟第一個完整支援RFC 4033、4034、4035的DNSSEC標準伺服器平台,本文將探討如何在微軟的Windows Server 2008 R2的DNS伺服器上啟用DNSSEC功能

,以便可以透過數位簽章的技術來確保用戶端不會收到偽裝或篡改的DNS資料,微軟的DNSSEC功能與BIND 有些不同:
  • Windows Server 2003 DNS伺服器不支援NSEC3記錄
  • Windows 7/Windows Server 2003的解析用戶端(Resolver)本身並不執行DNSSEC驗證,而是需要依賴本地遞迴伺服器來執行驗證工作( Non-validating security-aware stub resolver),它只不過可以解譯伺服器的回應來判斷是否已經驗證成功。
  • 簽章演算法目前只支援RSA/SHA-1,不夠安全,因網際網路根網域用NSEC RSA SHA256,而TLD使用NSEC3 RSA SHA1,故Windows DNS伺服器無法驗證網際網路的DNSSEC。

除此之外,Windows Server 2008 R2 DNSSEC 實務與步驟和BIND DNS並無太大差異,只不過使用的工具指令與操作介面不同罷了。

Windows Server 2008 R2的DNSSEC特性

使用Windows Server 2008 R2的DNSSEC功能之前,您需要先了解Windows DNSSEC的重要特性:

  • 以RFC 4033, 4034, 4035文件基礎的DNSSEC服務
  • 主要和次要DNS伺服器均需要使用Windows Server 2008 R2以後的系統,但可接受來自非DNSSEC伺服器或一般不必驗證的用戶端請求查詢
  • 使用dnscmd命令令產生金意鑰和進行離線簽章
  • 可針對AD整合區域或傳統的文字區域檔案進行簽章
  • 不支援動態更新(Dynamic Update)區域的簽署
  • 以憑證形式維護金鑰

部署 Windows Server 2008 R2 DNS伺服器的DNSSEC功能

Windows Server 2008 R2的DNS伺服器啟用DNSSEC功能,您需要執行下列步驟:

  1. 安裝並建立正常的DNS伺服器區域
  2. 產生ZSK和KSK金鑰對 (dnscmd)
  3. 建立DNS區域簽署
  4. 刪除未簽署區域,載入簽署的區域
  5. 使用名稱解析原則表格來設定DNS用戶端電腦

壹. 安裝並建立DNS區域

首先,如同架設一般正常DNS伺服器一樣,安裝DNS角色服務,建立正反向區域,新增必要的區域檔案記錄並啟動DNS服務。

貳. 產生ZSK和KSK金鑰對

其次,您需要使用 dnscmd /offlinesign命令來建立ZSK和KSK二組金鑰,

產生KSK金鑰對的 dnscmd命令語法為:

DnsCmd /OfflineSign /GenKey /Alg rsasha1 /Flags KSK /Length <length> /Zone <zone name> /SSCert /FriendlyName KSK-<zone name>
產生ZSK金鑰對的 dnscmd命令語法為:
DnsCmd /OfflineSign /GenKey /Alg rsasha1 /Length <length> /Zone <zone name> /SSCert /FriendlyName ZSK-<zone name>
dnscmd 重要的選項為:
/OfflineSign :必要選項;與/Genkey合用以產生憑證與金鑰
/Genkey:以私密金鑰產生自我署的憑證
/Alg rsasha1:以RSA公開金鑰和SHA1雜湊演算法來簽署金鑰 (目前只支援RSASHA1)
/Flags KSK:指出DNSKEY使用KSK旗標
/Length <length>:必要選項;指出金鑰長度
/Zone <ZoneName>:必要選項; 指出區域名稱
/SSCert:必要;必要選項; 指出公開金鑰將被儲存在自我簽署的憑證內
/FriendlyName Z(K)SK-<zone name>:指出ZSK或KSK自我簽署的憑證友善名稱

底下範例,替lij.com區域產生了1024位元的ZSK金鑰和2048位的KSK金鑰並分別將公開金鑰存放在ZSK-lij.com和KSK-lij.com憑證中。

keygen1

一旦建立金鑰完成,微軟是利用自我簽署的憑證來維護用來簽署的公開金鑰,所以您可以利用mmc新增本機電腦『憑證』這個嵌入式管理單元來檢視上面命令所產生出來的二份自我簽署憑證與公開金鑰,建議您將此憑證匯出和備份一份。

dnskeycert

參. 建立DNS區域簽章

一旦成功產生金鑰後,您便可以對DNS區域建立簽署資料,使用的仍然是dnscmd命令。建立簽署的dnscmd命令語法如下:

DnsCmd /OfflineSign /SignZone /input <input zone file> /output <output zone file> /zone <zone name> /signkey /ValidTo <validtodate> /ValidFrom <validfromdate> /cert /friendlyname ksk-<zone name> /signkey /cert /friendlyname zsk-<zone name>
重要選項為:
/OfflineSign:必要選項;與/SignZone合用以簽署DNS區域
/SignZone:要選項,用以建立簽署
/input <filename>:所要簽署的區域檔案名稱
/output <filename>:必要選項,指出經過簽署的區域檔案名稱
/Zone <ZoneName>:指出簽署的區域名稱
/Cert:指出釒鑰被存放在憑證中
/FriendlyName Z(K)SK-<zone name>:指出ZSK或KSK自我簽署的憑證友善名稱

zonesigned

肆. 刪除未簽署區域,載入簽署的區域

接下來您需要使用簽署的區域來取代原來未簽署的區域,做法是先刪除原始的區域 (dnscmd /ZoneDelete),再重新載入簽署的區域 (dnscmd /ZoneAdd)

dnscmd /ZoneDelete <ZONE.NAME> /f
dnscmd /ZoneAdd <ZONE.NAME> Primary /file <ZONE.NAME>.dns.signed /load

zondedeleteload

一旦成功的載入簽署的DNS區域後,您可以利用較友善的圖形介面DNS管理來檢視簽署的區域資料,如下圖所示您會發現新了二個DNSKEY金鑰記錄外,還新增了許多RRSIG和NSEC記錄而讓區域澎脹不少。

dnsmanager

伍. 使用名稱解析原則表格(NRPT)來設定DNS用戶端電腦

名稱解析原則表格(Name Resolution Policy Table;NRPT)是微軟用來控制Windows 7/Windows Server 2008 R2作業系統的DNS用戶端查詢行為,在Active Directory目錄服務環境下,可以經由群組原則集中控制多部DNS用戶端電腦的查詢行為,在單機電腦,上也可以透過本機原則或登錄資料庫來控制本機DNS查詢行為,NRPT主要提供了啟用DNSSEC驗證功能以及是否使用IPSec來建立DNS安全性連線,以彌補DNSSEC不能確保傳輸私密性問題,此外,它也提供了直接存取用戶的DNS設定,其設定的位置在於群組原則編輯器或本機原則編輯器內的『電腦設定—>Windows設定—>名稱解析原則』下,啟用DNSSEC查詢的設定如下圖所示。

nrpt

新增信賴起點 (Add Trust Anchor)

另一方面,如果您的DNS伺服器可能需要安全性的驗證來自某個特定網域區域的資料,那您可能需要替他新增區域的信賴起點,亦即信賴起源需要在那些需要驗證簽署區域資料的在非授權DNS伺服器上予以新增,而新增信賴起點很容易,只要從DNS管理員工具的伺服器內容對話方塊,按一下『信賴起源』索引標籤,新增名稱、若為KSK則需額外勾選『安全進入點』與Base64格式的金鑰。

trust_anchor1

後記

Windows Server 2008 R2的DNS服務為微軟首度支援DNSSEC功能的版本,支援RFC 4033、4034、4035的DNSSEC標準功能大多已具備,但還需透過原則式的NRPT來啟用DNS用戶端的DNSSEC查詢才行,此外,不支援NSEC3和DLV等功能,或許需待下一個版本才會提供。

相關文章