ClickOnce 部署和 Authenticode
更新:2007 年 11 月
「Authenticode」是一項 Microsoft 技術,它會使用業界標準的加密並利用數位憑證來簽署應用程式程式碼,以便驗證應用程式發行者 (Publisher) 的真偽。藉由使用 Authenticode 進行應用程式部署,ClickOnce 可協助避免「特洛伊木馬」(Trojan Horse) 的現象發生,其中惡意的第三方會將病毒或其他有害程式誤報為來自確定且可信任來源的合法程式。所有 ClickOnce 部署都必須使用數位憑證簽署。
下列各節將說明 Authenticode 中所用之不同類型的數位憑證、如何使用憑證授權單位 (CA) 驗證憑證、時間戳記在憑證中扮演的角色,以及適用於憑證的儲存方法。
Authenticode 和程式碼簽署
「數位憑證」是一個檔案,其中含有密碼編譯的公開/私密金鑰組,以及中繼資料 (Metadata),而這項資料會描述憑證核發給哪位發行者以及核發憑證的代理者。
Authenticode 憑證有許多種類型,每一種都是針對不同的簽署類型所設定。若為 ClickOnce 應用程式,您就必須擁有適用於程式碼簽署的 Authenticode 憑證。如果您嘗試使用另一種憑證類型 (例如數位電子郵件憑證) 簽署 ClickOnce 應用程式,它就無法運作。如需詳細資訊,請參閱 Introduction to Code Signing (https://msdn.microsoft.com/library/default.asp?url=/workshop/security/authcode/intro\_authenticode.asp)。
您可以用下列其中一種方式取得程式碼簽署的憑證:
從憑證廠商購買憑證
從組織中負責建立數位憑證的群組接收憑證
使用 MakeCert.exe 產生您自己的憑證,而這項工具隨附於 .NET Framework 軟體開發套件 (Software Development Kit,SDK)
如何使用憑證授權單位協助使用者
使用 MakeCert.exe 公用程式產生的憑證通常稱為「自我憑證」或「測試憑證」。這種憑證的運作方式與在 .NET Framework 中運作的 .snk 檔很類似:它僅包含一組公開/私密的密碼編譯金鑰組,但不包含與發行者相關的可驗證資訊。您可以使用自我憑證,將具有高度信任的 ClickOnce 應用程式部署在內部網路上。不過,當這些應用程式在用戶端電腦上執行時,ClickOnce 則會它們識別為來自「未知的發行者」。根據預設,使用自我憑證簽署且部署在網際網路上的 ClickOnce 應用程式無法使用受信任的應用程式部署。
反之,如果您從某個 CA (例如,憑證廠商或企業內的部門) 接收憑證,這個憑證就會為您的使用者提供更多安全性。它不僅能識別已簽署軟體的發行者,而且還會與簽署它的 CA 聯繫,藉以驗證該識別 (Identity)。 如果此 CA 不是根授權單位,Authenticode 也會「鏈結」回根授權單位,以便驗證 CA 是否獲得授權可核發憑證。如需更高的安全性,您應該盡可能使用由 CA 所核發的憑證。
如需產生自我憑證的詳細資訊,請參閱憑證建立工具 (Makecert.exe)。
時間戳記如何避免非預期的過期
即使憑證提供更多安全性,不過未經授權的人員還是可以從合法的擁有人取得憑證及其隨附密碼。根據預設,由 CA 所核發的憑證有效日期只有 12 個月。這會強制憑證的擁有人透過 CA 重新驗證其識別,以便確保受到危害的憑證只能使用一段短時間。
通常,憑證過期是表示您必須每隔 12 個月重新簽署 ClickOnce 應用程式。Authenticode 則會透過時間戳記的支援,減少重新簽署的需要。當您使用憑證簽署 ClickOnce 部署時,ClickOnce 就會記錄簽署的日期和時間,並將它內嵌在部署的數位簽章中。只要在憑證仍然有效的時間內簽署部署,ClickOnce 就會允許應用程式執行,即使當時憑證已過期也一樣。
用於建立 ClickOnce 部署的 Visual Studio 和 Windows Software Development Kit (SDK) 工具 (Mage.exe 和 MageUI.Exe) 都支援時間戳記。
儲存憑證
- 您可以在檔案系統上將憑證儲存為 .pfx 檔,或者也可以將它們儲存在金鑰容器內。Windows 網域中的使用者可以擁有許多金鑰容器。除非您指定要將憑證儲存成 .pfx,否則 MakeCert.exe 預設會將憑證儲存在您個人的金鑰容器內。Mage.exe 和 MageUI.exe (用於建立 ClickOnce 部署的 Windows SDK 工具) 將會讓您使用以任何一種方式儲存的憑證。