咱們剛剛將Visual Studio 2008項目升級到了Visual Studio2010。咱們全部的程序集都使用Verisign代碼簽名證書進行了嚴格簽名。 自升級以來,咱們不斷收到如下錯誤: 安全
沒法導入如下密鑰文件:companyname.pfx。 密鑰文件可能受密碼保護。 若要更正此問題,請嘗試再次導入證書或使用如下密鑰容器名稱將證書手動安裝到「強名稱」 CSP:VS_KEY_3E185446540E7F7A 工具
這發生在某些開發人員機器上,而不是其餘人。 有時能夠解決該問題的一些方法包括: visual-studio
我曾嘗試使用SN.EXE實用程序(強名稱工具)按照錯誤消息的提示向強名稱CSP註冊密鑰,可是每當我使用Visual Studio 2010 SN附帶的版本運行帶有任何選項的工具時, .EXE僅列出其命令行參數,而不執行任何操做。 不管我提供什麼參數,都會發生這種狀況。 測試
爲何會發生這種狀況?有哪些明確的步驟能夠解決此問題? 我將放棄ClickOnce的安裝和Microsoft代碼簽名。 ui
沒有任何幫助,可是後來我去了證書管理器(mmc.exe)。 證書沒有導入到我的商店中,所以我手動導入了證書,而後編譯了項目。 加密
請參閱「使用Visual Studio Project Designer的簽名頁進行ClickOnce清單簽名和強名稱程序集簽名」 。 spa
在嘗試了全部這些解決方案(以及更多解決方案)以後,我發現問題出在其餘地方。 對於在購買證書後遭受與我一樣痛苦的人們,我將分享解決個人問題的方法。 命令行
行爲 code
我知道,「符號」對DLL或EXE應用強名而不是Authenticode。 這就是爲何signtool在這種狀況下能夠工做,但Visual Studio中的「 sign」不起做用的緣由。 blog
緣由
過去,我曾使用過Verisign的證書。 它們在證書中具備KeySpec=2
與Visual Studio中的「簽名」功能一塊兒使用。 這些證書對於Visual Studio和signtool均可以正常工做。
我如今從Comodo購買了證書,這些證書的代碼簽名證書中的KeySpec=1
不正確。 這意味着這些證書能夠與signtool(身份驗證代碼)一塊兒正常使用,但不能與強命名(符號下拉列表)一塊兒使用。
解
有兩種方法能夠解決此問題:
sn -k [name].snk
爲您的強名建立單獨的證書。 使用snk對程序集進行簽名,而後將signtool與代碼簽名證書一塊兒使用,以對Authenticode簽名對DLL / EXE進行簽名。 雖然這彷佛很奇怪,但據我瞭解,這是處理證書的正確方法,由於強名稱的用途與authenticode的用途不一樣(有關此功能的詳細信息,請參閱此連接 )。 KeySpec=2
。 有關此過程的詳細信息,請參見此處 。 由於我想使用多個強名稱,因此我如今使用選項(1),儘管選項(2)也能夠。
爲確保此解決方案未來不會丟失,這是解決方案2的過程:
KeySpec=1
)導出到PFX文件。 注意:請將此文件備份到一個安全的位置,若是您確實但願安全播放該文件,請測試該文件是否能夠在其餘計算機上正常導入! certutil -importPFX -user <pfxfilename> AT_SIGNATURE
您如今應該具備KeySpec=2
的密鑰集/證書。 若是須要,您如今能夠再次使用MMC將其導出到另外一個PFX文件中。
此處描述的全部方法均無濟於事。 可是,當我從項目中刪除* .pfx文件並將其再次添加到程序集的簽名中時,個人構建項目沒有任何錯誤! 我沒法解釋緣由。 但這對我有用。
要在Visual Studio 2012中解決此問題,我右鍵單擊項目,屬性->「簽名」,而後取消選中「簽署ClickOnce清單」。
FYI
我使用帶有-p
標誌的sn.exe到官方代碼簽名PFX文件(購買代碼簽名),以下所示建立了SNK
文件,在Visual Studio 2013
中瀏覽了SNK
文件以供使用。
但問題仍然是它一直說:「密鑰文件* .. SNK不包含公鑰/私鑰對。」