強命名是由程式集的標識加上公鑰和數字簽名組成的。其中,程式集的標識包括簡單文字名稱、版本號和區域性資訊(如果提供的話)。強命名是使用相應的私鑰,通過程式集檔案(包含程式集清單的檔案,構成該程式集的所有檔案的名稱和雜湊)生成的。
microsoft® visual studio® .net
和windows sdk
中提供的其他開發工具向乙個程式集分配多個強命名。強命名相同的程式集應該是相同的。
通過簽發具有強命名的程式集,可以確保名稱的全域性唯一性。強命名還特別滿足以下要求:
1)強命名依賴於唯一的金鑰對來確保名稱的唯一性。任何人都不會生成與您生成的相同的程式集名稱,因為用乙個私鑰生成的程式集的名稱與用其他私鑰生成的不相同。
2)強命名保護程式
集的版本沿襲。強命名可以確保沒有人能夠生成您的程式集的後續版本。使用者可以確信,他們所載入的程式集的版本出自建立該版本(應用程式是用該版本生成的)的同乙個發行者。
3)強命名提供可靠的完整性檢查。通過
.net
框架安全檢查後,即可確信程式集的內容在生成後未被更改過。但請注意,強命名中或強命名本身並不暗含信任級別,例如由數字簽名和支援證書提供的信任。
在引用具有強命名的程式集時,您能從中得到諸如版本控制和命名保護。如果該具有強命名的程式集以後引用了具有簡單名稱的程式集(不具有強命名),則將失去具有強命名的程式集所帶來的好處,並依然會產生
dll
衝突。因此,具有強命名的程式集只能引用其他具有強命名的程式集。
程式集簽名(也稱為強命名簽名)賦予應用程式或元件乙個唯一標識,其他軟體可用該標識來顯式標識和引用該應用程式或元件。強命名由程式集的標識和公鑰
/私鑰對組成。這些資訊儲存在乙個金鑰檔案中;此檔案可以是個人資訊交換
(pfx)
檔案或windows
證書儲存區中的證書。
說明:為了對程式集進行簽名,vs
僅支援儲存在本地計算機上的專案系統中的個人資訊交換
(.pfx)
檔案和強命名金鑰
(.snk)
檔案。 在某些情況下,您可能只具有對公鑰的訪問許可權。如果是這樣,您可以使用「延遲簽名」來推遲分配私鑰。可以使用「專案設計器」的「簽名」頁中的選項為程式集簽名,下面步驟僅適用於為程式集簽名,而不是為應用程式和部署清單簽名。
要使用強命名為程式集簽名,必須具有公鑰
/私鑰對。這一對加密公鑰和加密私鑰用於在編譯過程中建立強命名程式集。可以使用強命名工具
(sn.exe)
來建立金鑰對,金鑰對檔案通常具有
.snk
副檔名。
在vs 2005/2008
中,通過c#、
visual basic
和visual j#
整合開發環境可以生成金鑰對,無需使用
強命名工具
(sn.exe)
建立金鑰對,即可對程式集進行簽名。在
ide「專案設計器」中具有「簽名」選項卡進行。
使用新金鑰檔案對程式集進行簽名
在專案節點在「解決方案資源管理器」中處於選中狀態下,從「專案」選單中,單擊「屬性」(或在「解決方案資源管理器」中右擊該專案節點,然後單擊「屬性」)。
在「專案設計器」中,單擊「簽名」選項卡。
選中「為程式集簽名」核取方塊。
指定乙個新金鑰檔案。在「選擇強命名金鑰檔案」下拉列表中,選擇「
<
新建...>
」。請注意,始終以
.pfx
格式建立新金鑰檔案。
將顯示「建立強命名金鑰」對話方塊。此對話方塊指定乙個用於為程式集簽名的新金鑰檔案。如果指定密碼,則建立個人資訊交換
(.pfx)
檔案;如果不指定密碼,則建立強命名金鑰
(.snk)
檔案。 若要訪問此對話方塊,請在「解決方案資源管理器」中選擇專案節點,然後在「專案」選單上單擊「屬性」。當「專案設計器」出現時,單擊「簽名」選項卡。在「簽名」頁上,選擇「為程式集簽名」,然後從「選擇強命名金鑰檔案」下拉列表中選擇「
<
新建...>
」。 金鑰檔名稱。指定要建立的金鑰檔案的名稱。
使用密碼保護金鑰檔案。選中此核取方塊以指定金鑰檔案的密碼。
輸入密碼。輸入長度至少為
6 個字元的密碼。密碼資訊儲存在計算機的加密儲存資料庫中。
確認密碼。重新輸入在「輸入密碼」框中鍵入的字元以進行確認。
在「建立強命名金鑰」對話方塊中,為新金鑰檔案輸入名稱和密碼,然後單擊「確定」。
說明:或者,可以通過選擇「僅延遲簽名」核取方塊啟用延遲簽名。
使用現有金鑰檔案為程式集簽名
在專案節點在「解決方案資源管理器」中處於選中狀態下,從「專案」選單中,單擊「屬性」(或在「解決方案資源管理器」中右擊該專案節點,然後單擊「屬性」)。
在「專案設計器」中,單擊「簽名」選項卡。
選中「為程式集簽名」核取方塊。
指定乙個現有金鑰檔案。在「選擇強命名金鑰檔案」下拉列表中,選擇「
<
瀏覽...>
」。 在「選擇檔案」對話方塊中,導航到該金鑰檔案或在「檔名」框中輸入其路徑;然後單擊「開啟」以選擇它。需要用強命名工具
(sn.exe)
先建立金鑰對。
說明:可通過單擊「更改密碼」更改金鑰檔案的密碼。或者,通過選擇「僅延遲簽名」核取方塊啟用延遲簽名。
建立公鑰
/私鑰對
在命令提示處,鍵入下列命令:
sn –k
在此命令中,
「檔名
」是包含金鑰對的輸出檔案的名稱。
下面的示例建立名為
sgkey.snk
的金鑰對。
sn -k sgkey.snk
如果您需要延遲對程式集簽名並控制整個金鑰對(金鑰對不太可能在測試方案之外),可使用以下命令生成金鑰對,然後從中將公鑰提取到乙個單獨的檔案中。首先,建立金鑰對:
sn -k keypair.snk
sn -p keypair.snk public.snk
建立金鑰對之後,必須將檔案放在強命名簽名工具可以找到的位置。
當使用強命名對程式集進行簽名時,程式集鏈結器
(al.exe)
查詢與當前目錄和輸出目錄相關的金鑰檔案。
為程式集簽名時,您可能不會始終具有對私鑰的訪問許可權。例如,乙個組織可能具有開發人員在日常使用中無法訪問的嚴密保護的金鑰對。雖然可能提供公鑰,但對私鑰的訪問許可權只限於少數幾個人。在這種情況下,可以使用「延遲簽名」或「部分簽名」來提供公鑰,從而將私鑰的新增推遲到交付程式集時。
可以在「專案設計器」的「簽名」窗格中啟用延遲簽名,如下所示。
在專案節點在「解決方案資源管理器」中處於選中狀態下,從「專案」選單中,單擊「屬性」(或在「解決方案資源管理器」中右擊該專案節點,然後單擊「屬性」)。
在「專案設計器」中,單擊「簽名」選項卡。
選中「為程式集簽名」核取方塊。
指定金鑰檔案。
選中「僅延遲簽名」核取方塊。注意,延遲簽名的專案將不會執行,也不能進行除錯。但是,在開發過程中將
強命名工具
(sn.exe)
和-vr
選項一起使用,可跳過驗證。
公共語言執行庫中的程式集 04強命名的程式集
強命名是由程式集的標識加上公鑰和數字簽名組成的。其中,程式集的標識包括簡單文字名稱 版本號和區域性資訊 如果提供的話 強命名是使用相應的私鑰,通過程式集檔案 包含程式集清單的檔案,構成該程式集的所有檔案的名稱和雜湊 生成的。microsoft visual studio net 和windows s...
公共語言執行庫中的程式集 02程式集內容
通常,靜態程式集可能由以下四個元素組成 只有程式集清單是必需的,型別或資源向程式集提供任何有意義的功能。程式集中的這些元素有兩種劃分方法。可以將所有元素放在單個物理檔案中。或將乙個元素包含在幾個檔案中。這些檔案可能是編譯 的模組 netmodule 資源 例如 bmp 或.jpg 檔案 或應用程式所...
公共語言執行庫中的程式集 05程式集安全注意事項
在您生成程式集時,您可以指定該程式集執行所需的一組許可權。是否將特定的許可權授予程式集是基於證據的。使用證據有兩種截然不同的方式 通過在將執行程式集的計算機上設定安全策略 您可以授予一些可選的許可權。如果您希望 可以處理所有潛在的安全異常,可以執行以下操作之一 說明 安全性是乙個較為複雜的領域,您將...