建立和使用強式名稱的組件
強式名稱 (Strong Name) 是由組件的識別 (Identity),也就是其簡單文字名稱、版本號碼及文化特性資訊 (如果有提供),加上公開金鑰和數位簽章所組成的。 強式名稱是使用對用的私密金鑰,並從組件檔案中產生 (組件檔含有組件清單資訊清單,其中含有所有組成該組件的檔名和雜湊)。
強式名稱組件只能使用來自其他強式名稱組件的型別。 否則,此強式名稱組件的安全性將受到威脅。
本概觀包含下列各節:
強式名稱案例
略過信任組件的簽章驗證
相關主題
強式名稱案例
下列案例概要說明使用強式名稱簽署組件的程序,以及稍後使用該名稱來參考組件。
組件 A 是以下列其中一個方法來建立強式名稱:
使用支援建立強式名稱的開發環境,例如 Visual Studio 2005。
使用強式名稱工具 (Sn.exe) 建立密碼編譯金鑰組,並使用命令列編譯器或組件連結器 (Al.exe) 將該金鑰組指派給組件。 Windows Software Development Kit (SDK) 提供 Sn.exe 和 Al.exe。
開發環境或工具會簽署檔案雜湊,該檔案含有組件資訊清單和開發人員私密金鑰。 這個數位簽章將儲存在含有組件 A 資訊清單的可攜式執行檔 (PE) 中。
組件 B 是組件 A 的消費者。 組件 B 資訊清單的參考區段包括代表組件 A 公開金鑰的語彙基元 (Token)。 語彙基元是完整公開金鑰的一部分,可用來儲存空間 (而非使用金鑰本身)。
Common Language Runtime 會在組件被放入全域組件快取時,驗證強式名稱簽章。 在執行階段中依照強式名稱繫結時,Common Language Runtime 會比較儲存在組件 B 資訊清單的金鑰和用來產生組件 A 強式名稱的金鑰。 如果通過 .NET Framework 安全性檢查而且成功完成繫結,組件 B 便可確保組件 A 的位元尚未被竄改,而且這些位元確實來自組件 A 的開發人員。
注意事項 |
---|
這個案例並未處理信任問題。除了強式名稱以外,組件還可帶有完整的 Microsoft Authenticode 簽章。Authenticode 簽章包括建立信任的憑證。請注意,強式名稱不要求使用這種方式來簽署程式碼,這點非常重要。事實上,用來產生強式名稱簽章的金鑰並非一定要使用用來產生 Authenticode 簽章的相同金鑰。 |
回到頁首
略過信任組件的簽章驗證
從 .NET Framework 3.5 版 Service Pack 1 開始,將組件載入至完全信任的應用程式定義域 (例如 MyComputer 區域的預設應用程式定義域) 時,不會驗證強式名稱簽章。 這稱為強式名稱略過功能。 在完全信任的環境中,已簽署、完全信任的組件要求 StrongNameIdentityPermission 永遠會成功,不論其簽章為何。 強式名稱略過功能在這種情況下可避免完全信任組件進行強式名稱簽章驗證的不必要額外負擔,讓組件更快載入。
略過功能適用於使用強式名稱簽署且具有下列特性的任何組件:
完全信任且無 StrongName 辨識項 (例如,有 MyComputer 區域辨識項)。
載入至完全信任的 AppDomain。
從該 AppDomain 的 ApplicationBase 屬性底下某個位置載入。
未延遲簽署。
個別應用程式或電腦可停用這項功能。 請參閱 HOW TO:停用強式名稱略過功能。
回到頁首
相關主題
標題 |
描述 |
---|---|
說明如何建立簽署組件的密碼編譯金鑰組。 |
|
說明如何建立強式名稱的組件。 |
|
描述如何在編譯階段或執行階段中參考強式名稱組件內的型別或資源。 |
|
描述如何停用略過強式名稱簽章驗證的功能。 您可以針對所有或特定應用程式停用這項功能。 |
|
提供單一檔案或多檔案組件的概觀。 |
|
說明如何在建立組件之後使用強式名稱來簽署此組件。 |
|
描述隨附於 .NET Framework 而且可協助您使用強式名稱來建立組件的工具。 這個工具提供了金鑰管理、簽章產生和簽章驗證的選項。 |
|
描述隨附於 .NET Framework 而且可從模組或資源檔中產生包含組件資訊清單之檔案的工具。 |
回到頁首