2010-11-14 93 views
15

我通常不會打擾我的.NET程序集簽名,所以除了它的基本機制外,我不太瞭解它。對於我正在開發的一個小項目,有必要簽名,並且我創建了一個新的密鑰,並使用密碼進行保護。存儲強名密鑰的密碼在哪裏?

我希望在重新編譯程序集的某個時間點提示輸入此密碼,但是在創建密鑰文件後,我從不需要在任何位置輸入密碼。這似乎首先破壞了密碼保護密鑰的目的。

我想象的密碼緩存在某處,但在哪裏?它在某種私人存儲空間中嗎?如果我將其整個解決方案目錄與其中的密鑰文件交給其他人,他們會被提示輸入我輸入的密碼,還是可以在沒有密碼的情況下籤署程序集?

在互聯網上有很多關於強名稱鍵和使用它們的文章,但是由於某些奇怪的原因,他們都忽略了Visual Studio實際使用密碼的方式。

更新: 重新啓動Visual Studio(和Windows)沒有效果,因此緩存看起來是持久的。刪除.suo文件不會改變簽署程序集時不需要密碼的事實。

+0

你是如何保護文件密碼的? – 2010-11-14 13:09:35

+0

@Lasse:當您創建密鑰時,Visual Studio可以選擇密碼保護密鑰。我已經通過打開.pfx文件驗證了它是受保護的。 – Thorarin 2010-11-14 13:37:23

+0

謝謝,我不知道。 – 2010-11-14 14:05:58

回答

11

請參閱Create Strong Name Key Dialog Box的文檔。

密碼信息存儲在您的計算機的加密存儲數據庫中。

其他信息來自CLR Inside Out: Using Strong Name Signatures

您可以使用限制性訪問控制列表(ACL)將密鑰安裝在密鑰容器中,以防止未經授權訪問密鑰容器。或者,您可以將私鑰存儲在智能卡或其他單獨的硬件設備上。 sn.exe工具允許您使用不同的加密服務提供程序(CSP)進行簽名。查看sn.exe文檔中的-c選項。

+1

有趣...首先,我找不到任何有關此「加密存儲數據庫」的參考。從那時起,我發現我可以使用'sn.exe'來向強名稱CSP添加和刪除密鑰。我仍然遇到的一個問題是,Visual Studio似乎爲密鑰生成一個隨機容器名稱,所以我不知道如何刪除與我的項目相關的容器名稱。您不能使用sn.exe列出所有容器名稱。 – Thorarin 2010-11-16 19:45:11

+1

調查默認CSP(cryptograhic存儲提供程序)存儲用戶特定的內容的%AppData%\ Microsoft \ Crypto,或者針對機器級密鑰存儲%AllUsersProfile%\ Microsoft \ Crypto。 – sisve 2010-11-16 19:47:02

+1

相當低的水平,但我設法找到了關鍵(因爲它是唯一的)。我試過這個稱爲KeyPal的工具,但似乎不再有效。感謝迄今爲止的幫助:) – Thorarin 2010-11-16 20:30:48