組織可以使用嚴密保護的金鑰組,即使開發人員都無法每天存取。開發人員通常使用公開金鑰,但只有少數人才能存取私密金鑰。開發具有強式名稱的組件時,每一個參考強式名稱目標組件的組件都會含有公開金鑰語彙基元,可提供目標組件強式名稱。這項功能的前提是可以在開發處理序期間使用公開金鑰。
您可以在建置時間使用延遲或部分簽名,以保留強式名稱簽章的可攜式執行檔 (PE) 空間,但這項作業會將實際簽名的時間推延到稍後的階段 (通常是在組件出貨之前)。
下列步驟概略說明延遲簽名組件的程序:
從完成最後簽名的組織中取得金鑰組的公開金鑰部分。通常這個金鑰是 .snk 檔案格式,您可以使用 .NET Framework SDK 提供的強式名稱工具 (Sn.exe) 來建立該檔案。
使用來自 System.Reflection 的兩個自訂屬性註解組件的原始程式碼:
AssemblyKeyFileAttribute,將含有公開金鑰的檔名當作引數傳遞給其建構函式。
AssemblyDelaySignAttribute,指出延遲簽名正在使用中,方法是將 true 當作引數傳遞給其建構函式。例如:
<Assembly:AssemblyKeyFileAttribute("myKey.snk")> <Assembly:AssemblyDelaySignAttribute(true)> [C#] [assembly:AssemblyKeyFileAttribute("myKey.snk")] [assembly:AssemblyDelaySignAttribute(true)]
編譯器將公開金鑰插入組件資訊清單,並且保留 PE 檔的空間供完整強式名稱簽章使用。真正的公開金鑰必須在建置組件時儲存起來,這樣一來參考這個組件的其他組件便可取得金鑰,並將其儲存在自己的組件參考中。
由於組件沒有有效的強式名稱簽章,因此必須關閉該簽章的驗證。您可以使用 -Vr 選項和強式名稱工具來進行這項作業。
下列範例關閉
myAssembly.dll組件的驗證。sn Vr myAssembly.dll**警告 **只有在開發時才使用 -Vr 選項。將組件加入至略過驗證清單會使安全性變弱。具有惡意的組件可能使用加入至略過驗證清單之組件的完全指定組件名稱 (組件名稱、版本、文化特性和公開金鑰語彙基元),以偽裝其識別 (Identity)。這會使具有惡意的組件也略過驗證。
接下來 (通常是在交貨之前),您將組件送至組織的簽章授權單位,使用 -R 選項和強式命名工具進行實際的強式名稱簽名。
下列範例使用
sgKey.snk金鑰組將myAssembly.dll組件簽名為強式名稱。sn -R myAssembly.dll sgKey.snk
請參閱
建立組件 | 建立金鑰組 | 強式名稱工具 (Sn.exe) | 使用組件設計程式