延遲簽署組件

更新:2007 年 11 月

組織可以使用嚴密保護的金鑰組,即使開發人員都無法每天存取。開發人員通常使用公開金鑰,但只有少數人才能存取私密金鑰。開發具有強式名稱的組件時,每一個參考強式名稱目標組件的組件都會含有公開金鑰語彙基元,可提供目標組件強式名稱。這項功能的前提是可以在開發處理序期間使用公開金鑰。

您可以在建置時間使用延遲或部分簽署,以保留強式名稱簽章的可移植執行檔 (PE) 空間,但這項作業會將實際簽署的時間推延到稍後的階段 (通常是在組件出貨之前)。

下列步驟概略說明延遲簽署組件的程序:

  1. 從完成最後簽署的組織中取得金鑰組的公開金鑰部分。通常這個金鑰是 .snk 檔案格式,您可以使用 Windows Software Development Kit (SDK) 提供的強式名稱工具 (Sn.exe) 來建立該檔案。

  2. 使用來自 System.Reflection 的兩個自訂屬性註解組件的原始程式碼:

    • AssemblyKeyFileAttribute,將含有公開金鑰的檔名當做引數傳遞給其建構函式。

    • AssemblyDelaySignAttribute,指出延遲簽署正在使用中,方法是將 true 當做引數傳遞給其建構函式。例如:

          <Assembly:AssemblyKeyFileAttribute("myKey.snk")>
          <Assembly:AssemblyDelaySignAttribute(true)>
      
          [assembly:AssemblyKeyFileAttribute("myKey.snk")]
          [assembly:AssemblyDelaySignAttribute(true)]
      
  3. 編譯器將公開金鑰插入組件資訊清單,並且保留 PE 檔的空間供完整強式名稱簽章使用。真正的公開金鑰必須在建置組件時儲存起來,這樣一來參考這個組件的其他組件便可取得金鑰,並將其儲存在自己的組件參考中。

  4. 由於組件沒有有效的強式名稱簽章,因此必須關閉該簽章的驗證。您可以使用 -Vr 選項和強式名稱工具來進行這項作業。

    下列範例關閉 myAssembly.dll 組件的驗證。

    sn –Vr myAssembly.dll
    
    警告:

    請只在開發時使用 -Vr 選項。將組件加入至略過驗證清單會使安全性變弱。具有惡意的組件可能使用加入至略過驗證清單之組件的完全指定組件名稱 (組件名稱、版本、文化特性和公開金鑰語彙基元),以偽裝其識別 (Identity)。這會使具有惡意的組件也略過驗證。

  5. 接下來 (通常是在交出產品之前),您將組件送至組織的簽署授權單位,使用 -R 選項和強式命名工具進行實際的強式名稱簽署。

    下列範例使用 sgKey.snk 金鑰組將 myAssembly.dll 組件簽署為強式名稱。

    sn -R myAssembly.dll sgKey.snk
    

請參閱

工作

HOW TO:建立公開/私密金鑰組

概念

建立組件

參考

強式名稱工具 (Sn.exe)

其他資源

使用組件設計程式