visual studio 2010 - 無法導入密鑰文件'blah.pfx'-錯誤'密鑰文件可能受密碼保護'
visual-studio-2010 visual-studio (15)
我們剛剛將Visual Studio 2008項目升級到了Visual Studio 2010.我們所有的程序集都使用Verisign代碼簽名證書進行了強大的簽名。 自升級以來,我們不斷得到以下錯誤:
無法導入以下密鑰文件:companyname.pfx。 密鑰文件可能受密碼保護。 要解決此問題,請嘗試再次導入證書或使用以下密鑰容器名稱手動將證書安裝到強名稱CSP:VS_KEY_3E185446540E7F7A
這發生在一些開發者機器上,而不是其他人。 用於解決這個問題的一些方法在一些時候有效,包括:
- 從Windows資源管理器重新安裝密鑰文件(右鍵單擊PFX文件並單擊安裝)
- 第一次在新電腦上安裝Visual Studio 2010時,首次打開項目時會提示您輸入密碼,然後運行。 在從Visual Studio 2008升級的計算機上,您不會獲得此選項。
我嘗試使用SN.EXE實用程序(強名稱工具)按照錯誤消息的建議註冊具有強名稱CSP的密鑰,但每當使用Visual Studio 2010附帶的版本的任何選項運行該工具時,SN .EXE只是列出它的命令行參數而不是做任何事情。 無論我提供什麼參數,都會發生此情況。
為什麼會發生這種情況,有什麼明確的措施可以解決這個問題? 我即將放棄ClickOnce安裝和Microsoft代碼簽名。
FYI
我使用帶-p
標誌的sn.exe作為創建SNK
文件的官方代碼標誌PFX文件(作為代碼簽名購買),並在Visual Studio 2013
中使用SNK
文件進行瀏覽。
- 解決了密碼問題。
但問題仍然是,它一直在說:“密鑰文件* .. SNK不包含公鑰/私鑰對。”
VSCommands 2010(Visual Studio插件)可以自動為您解決此問題 - 只需右鍵單擊錯誤,然後單擊菜單中的“應用修復”。 您可以從Visual Studio庫中獲取它 。
作為連接錯誤報告工作的原始作者,這個消息有兩個變體(我後來發現)
對於一個變體,您可以使用sn.exe(通常如果您正在使用強名稱)將密鑰導入強名稱存儲區。
您使用certmgr導入的其他變體是,當您為點擊一次部署(請注意,您可以為這兩種用途使用相同的證書)進行密碼簽名時。
希望這可以幫助。
在嘗試了所有這些解決方案(以及更多)後,我發現問題在於其他地方。 對於那些在購買證書後和我一樣痛苦的人,我會分享解決問題的方法。
行為
我明白'sign'會將一個強名稱,而不是一個authenticode應用於DLL或EXE。 這就是為什麼signtool 會在這種情況下工作,但Visual Studio中的'sign'不起作用。
原因
在過去,我有過使用Verisign證書的經驗。 他們在證書中有一個KeySpec=2
,它與Visual Studio中的'sign'功能一起使用。 這些證書適用於Visual Studio和signtool。
我現在從Comodo購買了證書,這些證書在代碼簽名證書中有不正確的KeySpec=1
。 這意味著這些證書可以很好地與signtool(authenticode)配合使用,但不具有強命名(標誌下拉)。
解
有兩種方法可以解決這個問題:
- 使用
sn -k [name].snk
為您的強名稱創建單獨的證書。 使用snk簽署程序集,然後使用帶有代碼簽名證書的signtool來使用authenticode簽名對DLL / EXE進行簽名。 雖然這看起來很奇怪,但根據我的理解,這是處理證書的正確方法,因為強名稱與authenticode的用途不同(另請參閱此鏈接了解有關這些工作原理的詳細信息)。 - 將您的證書導入為
KeySpec=2
。 這裡詳細介紹了這個過程。
因為我想使用多個強名稱,所以我當前使用選項(1),但選項(2)也適用。
為了確保這個解決方案在將來永遠不會丟失,下面是解決方案2的過程:
- 使用“Certifiates”MMC將現有密鑰集(
KeySpec=1
)導出到PFX文件。 注意:請將此文件備份到安全位置,並測試是否可以在另一台計算機上導入文件,如果您確實想要安全地進行播放! - 從加密存儲中刪除現有證書(使用MMC的stlll)。
- 打開CMD提示。
- 使用此命令導入PFX文件:
-
certutil -importPFX -user <pfxfilename> AT_SIGNATURE
- 出現提示時輸入pfx的密碼。
-
您現在應該擁有KeySpec=2
的密鑰集/證書。 如果需要,現在可以使用MMC再次將其導出到另一個PFX文件中。
好的,這對我很有用。 在Visual Studio 2010中以管理員身份打開舊的解決方案/項目,然後打開新的或複制的解決方案/項目。 以管理員身份,刪除新的Visual Studio 2010解決方案/項目中復制的pfk文件,然後轉到項目屬性並取消選擇它。
將這兩個項目打開後,將粘貼複製到新項目。 轉到項目屬性並選擇Build。 我打開並關閉Visual Studio,並在從新項目中刪除之後構建它,然後再從舊項目中復制並選擇它。 當我複制項目並嘗試構建它時,我在第一篇文章開始時收到了錯誤。
我有一個類似的問題,但在“強名密鑰文件”ComboBox中選擇pfx並輸入密碼後,我仍然收到類似的錯誤(沒有容器名稱部分):
無法導入以下密鑰文件:companyname.pfx。 密鑰文件可能受密碼保護。 要解決此問題,請嘗試再次導入證書或手動安裝證書
此外,“簽署ClickOnce清單”證書信息面板未填充。
我在我的pfx上做了“從文件中選擇...”,並解決了這個問題。
我有同樣的問題,並刪除商店和閱讀沒有工作。 我必須做到以下幾點。
獲取OpenSSL的副本。 它適用於Windows 。 或者使用Linux系統,因為他們幾乎都擁有它。
運行以下命令以導出到密鑰文件:
openssl pkcs12 -in certfile.pfx -out backupcertfile.key openssl pkcs12 -export -out certfiletosignwith.pfx -keysig -in backupcertfile.key
然後在項目屬性中可以使用PFX文件。
我發現在某些情況下,您應該在安裝之前嘗試刪除此密鑰。 所以做到以下幾點:
-
sn -d VS_XXXX
-
sn -i mykey.pfx VS_XXX
我的問題是,TFS構建控制器作為網絡服務運行,出於某種原因,我不明白為什麼Visual Studio構建主機服務證書沒有被使用。 我將Visual Studio Build服務的標識更改為更易於管理的標識,確保它具有TFS服務器上的權限,並使用MMC手動添加證書。
問題還在於MSBuild無法將密碼保護證書添加到商店。
我通過在Visual Studio項目的.csproj文件中更改以下行來解決此問題:
這引發了'無法導入'錯誤:
<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>
將該值更改為false會導致錯誤消失。
沒有為我工作,但後來我去看看證書經理(mmc.exe)。 證書沒有在個人存儲中導入,所以我手動導入了證書,然後編譯了項目。
這裡描述的所有方法都不能幫助我。 但是當我從我的項目中刪除* .pfx文件並再次將它添加到程序集的簽名中時,我沒有任何錯誤地構建了我的項目! 我無法解釋原因。 但它為我工作。
這解決了我的問題:打開你的VS項目
雙擊Package.appxmanifest
轉到打包選項卡
點擊選擇證書
點擊配置證書
從文件中選擇並使用example.pfx創建統一或其他任何內容
我也遇到了這個問題。 我能夠通過運行來解決問題
sn -i <KeyFile> <ContainerName>
( 將密鑰對安裝到指定的容器中 )。
sn
通常作為Windows SDK的一部分進行安裝。 例如C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe
。 這個位置很可能不在您的標準環境的搜索路徑中。 但是,由Visual Studio安裝的“開發人員命令提示符”會添加通常包含正確位置的其他信息。
根據你的帖子,看起來像
sn -i companyname.pfx VS_KEY_3E185446540E7F7A
這必須從PFX文件的位置運行,如果您已在VS 2010中加載解決方案,則只需在解決方案資源管理器中右鍵單擊pfx文件,然後選擇Open Command Prompt即可啟動.net 2010 cmd提示工具正確的目錄。
在運行此sn命令之前,我通過右鍵單擊並重新安裝pfx,然後選擇安裝,但無法正常工作。 只需注意一點,因為它可能是提供解決方案的兩者的組合。
希望這有助於解決您的問題。