Microsoft Updater Application Block 驗證器設計
譯者:Tony Qu
Updater Application Block提供了一個可擴充的驗證器架構,這使通過簽名或雜湊號驗證下載檔案成為可能。驗證器架構支援在伺服器上產生簽名和在用戶端上確認這些簽名。
圖1 展示了伺服器端的驗證架構
通過圖1我們可以瞭解到驗證器架構的以下幾個方面
1. manifest工具會初始化一個使用者指定類型的驗證器。所有的驗證器必須實現IValidator介面。使用者還必須為驗證器指定一個密鑰,傳遞給驗證器。
2. 驗證器為位於伺服器端的應用程式升級目錄中的每一個檔案產生一個簽名,產生的值會被寫入manifest檔案中。
3. 最後,驗證器會為每一個manifest檔案計算出一個簽名,該簽名會被寫入manifest檔案中的根節點的signature屬性中。
注意:更多有關manifest檔案設計的資訊,可以參考 伺服器端manifest檔案設計
當manifest檔案和升級檔案被下載到用戶端之後,必須通過驗證簽名來確認下載的檔案未損壞。
圖2 展示了用戶端的驗證架構。
通過圖2,我們可以瞭解驗證架構的以下幾個方面:
1. ApplicationUpdaterManager類使用UpdaterConfiguration類的Instance屬性讀取設定檔的<validator>節。這個部分包含將要被使用的驗證器的完整集合和類型名。更多有關應用程式設定檔設計的資訊可以參考 應用程式升級器設定檔設計。
2. ValidatorFactory類用於初始化指定的驗證器,該驗證器實現了IValidator介面。ValidatorFactory類還會傳遞<validator>節點的配置資訊到驗證器的Init方法中。這個配置節通常包含一個密鑰,該密鑰可用來驗證簽名。
3. 最後,ApplicationUpdaterManager類為每一個待升級的應用程式初始化一個DownloaderManager類,並把它傳給驗證器。Downloader會不時地檢查下載任務的狀態是否為JobStatus.Ready,並且使用驗證器驗證下載檔案的簽名。當檔案通過驗證後,DownloaderManager把檔案從臨時目錄中拷貝到適當的應用程式目錄,並且執行一個在manifest檔案中指定的後處理器[post processor]。你可以通過修改<application>元素的useValidation屬性為false禁止一個應用程式的驗證工作,在這種情況下,DownloaderManager將只是把所有的下載檔案拷貝到它們的應用程式目錄中,並允許特定的後處理器。
注意:使用useValidation屬性時要小心,如果把值設定為false將降低安全性,並有可能造成未驗證的代碼程式在用戶端上安裝。
Updater Application Block包含兩個驗證器。一個是KeyValidator,使用對稱式加密密鑰產生和驗證簽名。一個是RSAValidator,使用公開金鑰/私密金鑰對實現驗證。你可以使用其中的任何一個驗證器,或者你可以通過實現IValidator介面開發你自己定製的驗證器。