共用方式為


建立和使用強式名稱的組件

強名稱由組合的身份——其簡單的文字名稱、版本號及文化資訊(若提供)——加上公鑰與數位簽章組成。 它是從組合檔產生,使用對應的私鑰。 (組件檔案包含組件清單,其中包含組成該組件的所有檔案的名稱和雜湊值。)

警告

不要依賴強名聲來保障安全。 它們只提供獨特的身份。

強命名的程序集只能使用其他強命名程序集的型別。 否則,這個強名議會的完整性將會受到損害。

備註

雖然 .NET Core 支援強命名的組件,且 .NET Core 函式庫中的所有組件均有簽名,但大多數第三方組件不需要強名稱。 更多資訊請參閱 GitHub 上的 強名稱簽署

強名稱應用情境

以下情境描述了簽署一個組件並賦予強式名稱,以及稍後以該名稱參考的過程。

  1. assembly A 以強名稱建立,方法如下:

    • 使用支援建立強名稱的開發環境,例如 Visual Studio。

    • 使用 強名稱工具(Sn.exe )建立密碼學金鑰對,並透過命令列編譯器或 組合語言連結器(Al.exe)將該金鑰對指派給組合語言。 Windows SDK 同時提供 Sn.exe 與 Al.exe。

  2. 開發環境或工具會以開發者的私鑰簽署包含組件資訊清單的文件的雜湊值。 此數位簽章儲存在包含 Assembly A 清單的可攜式執行檔(PE)中。

  3. 組件B是組件A的消費者。集合 B 清單的參考部分包含一個代表集合 A 公鑰的標記。 代幣是完整公鑰的一部分,用於節省空間,而非金鑰本身。

  4. 通用語言執行時會在組件放入全域組件快取時驗證強名稱簽章。 在執行時以強名稱綁定時,通用語言執行時會比較組合B清單中儲存的鍵與產生組合A強名稱的鍵。如果 .NET 安全檢查通過且綁定成功,組合 B 就能保證組裝 A 的位元未被竄改,且這些位元確實來自組裝 A 的開發者。

備註

這個情境並沒有針對信任問題。 組件除了強名稱外,還可攜帶完整的 Microsoft Authenticode 簽章。 Authenticode 簽章包含建立信任的憑證。 值得注意的是,強名稱並不要求以這種方式簽署代碼。 強名只會提供獨特的身份認同。

繞過可信組件的簽章驗證

從 .NET Framework 3.5 Service Pack 1 開始,當組合語言載入完全信任的應用程式域(例如該 MyComputer 區域的預設應用域)時,強名稱簽章不會被驗證。 這被稱為強名繞過功能。 在完全信任的環境中,對於已簽署的全信任組件,對StrongNameIdentityPermission的需求始終會成功,無論其簽名為何。 強名稱繞過功能避免了在此情況下對全信任程式集進行強名稱簽章驗證所帶來的不必要開銷,使程式集載入更快。

繞過功能適用於任何以強名稱簽署且具有以下特性的組件:

此功能可於個別應用程式或電腦中停用。 請參閱 如何停用強名稱繞過功能

Title Description
如何:建立公開-私鑰組 說明如何建立用於簽署組合的密碼密鑰對。
如何使用強名稱簽署元件 說明如何建立強命名的組件。
增強的強命名 說明 .NET Framework 4.5 中對強名稱的增強功能。
如何:參考一個強命名的集合 描述如何在編譯時或執行時引用強名稱組件中的型別或資源。
如何:停用強名繞過功能 說明如何停用繞過強名稱簽名驗證的功能。 此功能可對所有或特定應用關閉。
建立組件 提供單檔與多檔組合的概述。
如何在 Visual Studio 中延遲簽署組件 說明如何在建立後為組件簽署強名稱。
Sn.exe(強命名工具) 描述 .NET Framework 內建的工具,幫助建立帶有強名稱的組合語言。 此工具提供金鑰管理、簽章產生及簽章驗證的選項。
Al.exe(組裝連結器) 描述 .NET Framework 內建的工具,能產生一個包含模組或資源檔案組合清單的檔案。