无法导入密钥文件'blah.pfx' - 错误'密钥文件可能受密码保护'

Jas*_*onD 384 passwords visual-studio-2010 pfx visual-studio

我们刚刚将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代码签名.

Bra*_*ter 440

我也遇到了这个问题.我能够通过运行
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安装的"Developer Command Prompt"会添加通常包含正确位置的其他信息.

根据您的帖子看起来像

sn -i companyname.pfx VS_KEY_3E185446540E7F7A

这必须从PFX文件的位置运行,如果您在VS 2010中加载了解决方案,只需右键单击解决方案资源管理器中的pfx文件,然后选择打开命令提示符,它将启动.net 2010 cmd提示工具.正确的目录.

在运行这个sn命令之前,我确实通过右键单击并选择安装来重新安装pfx,但这不起作用.需要注意的是,它可能是提供解决方案的两者的组合.

希望这有助于解决您的问题.

  • 谢谢布兰登 - 是的,就像手动重新安装密钥文件"排序"解决了问题.问题是,只要您签入密钥文件,任何其他最近获得此签入密钥文件的用户现在都会遇到此错误.如果这些用户中的任何一个检查了他们的"修复"并且我得到了最新信息,那么我的机器现在又被打破......等等.微软已经开始制作故障单,并将其分配给VS2010团队和VSS团队. (5认同)
  • 这对我也有用,但我过去从未这样做过.VS曾经弹出并询问每个密钥的密码.发生了什么变化? (5认同)
  • 起初我只尝试了sn -i部分,但它抱怨密码不正确(虽然它是正确的).我删除了证书,重新安装它然后sn -i ...工作.基本上确认对我来说,这两个步骤都是必需的.重新安装cert然后执行sn命令. (3认同)
  • 有趣.将pfx添加到新CSP时,我没有遇到这个问题.据我所知,SN -i不会更改pfx文件,因此您不必在事后检查任何内容.但是,如果您要更改pfx文件(例如重置密码),则会导致问题,因为它会更改pfx文件.您的解决方案是否使用来自任何其他计算机的pfx文件构建?如果是这样,那么pfx文件是正确的,只是没有设置到具有构建问题的计算机上的正确CSP. (2认同)

小智 124

我发现了一个可以帮助您在多开发人员环境中成功构建的修复程序:

而不是更改密码(导致.pfx更改),重新选择组合框中的.pfx文件.然后调用密码对话框.输入密码后,项目将构建正常.每个开发人员都可以在本地计算机上执行此操作,而无需实际修改.pfx文件.

我仍然无法在我们的构建服务器计算机上签署程序集.我在那里得到了同样的错误,但是使用sn.exe -i方法并没有解决buildserver的问题.

  • 这应该标记为答案,因为当前标记的答案在多开发人员环境中不起作用.做得好. (7认同)
  • 花了一段时间没能在我们的TFS构建服务器上工作,意识到我是以我自己的身份登录,而不是作为构建服务帐户,难怪它无法找到它 - doh! (5认同)
  • 非常感谢.很遗憾看到这仍然是2017年的解决方法. (3认同)

Bea*_*hed 41

我有同样的问题,删除商店和阅读不起作用.我必须做以下事情.

  • 获取OpenSSL的副本.它适用于Windows.或者使用Linux盒子,因为他们几乎都拥有它.

  • 运行以下命令以导出到密钥文件:

    openssl pkcs12 -in certfile.pfx -out backupcertfile.key
    
    openssl pkcs12 -export -out certfiletosignwith.pfx -keysig -in backupcertfile.key
    
    Run Code Online (Sandbox Code Playgroud)

然后在项目属性中,您可以使用PFX文件.

  • 谢谢!!我认为这对我有用。我在这里抓住了 openssl:http://gnuwin32.sourceforge.net/packages/openssl.htm (2认同)

小智 35

我说得太快了!重建使错误重新发挥作用......

我发现这有效 - 右键单击解决方案资源管理器并将其从项目中排除.单击" 显示所有文件",右键单击,然后再次将其包含在项目中.现在撤消挂起的更改......

出于某种原因,这对我来说是彻头彻尾的,并且相对无痛!

  • 这对我也有用 - 完全无痛.谢谢! (6认同)

Dar*_*usz 32

我发现在某些情况下,您应该安装之前尝试删除此密钥.所以做以下事情:

  1. sn -d VS_XXXX
  2. sn -i mykey.pfx VS_XXX

  • 谢谢,删除必须以 **admin** 身份完成 - 如果以普通用户身份运行,则会出现误导性错误“未找到强名称密钥容器”。 (2认同)

Jar*_*das 31

VSCommands 2010(Visual Studio插件)可以自动为您解决此问题 - 只需右键单击错误,然后单击菜单中的"应用修复".您可以从Visual Studio库中获取它.

  • 它仍然需要专业许可证. (4认同)
  • 我刚刚下载的版本(2011年9月)附带此选项. (2认同)

atl*_*ste 27

在尝试了所有这些解决方案(以及更多)后,我发现问题出在其他地方.对于那些在购买证书后遇到同样痛苦的人,我会分享我的问题的解决方案.

行为

我知道'sign'对DLL或EXE应用强名称而不是authenticode.这就是为什么signtool 可以在这种情况下工作,但Visual Studio中的"sign"将无效.

原因

在过去,我有过Verisign证书的经验.它们KeySpec=2在证书中有一个- 与Visual Studio中的"签名"功能一起使用.这些证书适用于Visual Studio和signtool.

我现在从Comodo购买了证书,KeySpec=1证书代码签名证书不正确.这意味着这些证书可以与signtool(authenticode)一起使用,但不能使用强命名(符号下拉列表).

有两种方法可以解决此问题:

  1. 使用,为您的强名称创建单独的证书sn -k [name].snk.使用snk对程序集进行签名,然后使用带有代码签名证书的signtool,使用authenticode签名对DLL/EXE进行签名.虽然这看起来很奇怪,但据我所知,这是处理证书的正确方法,因为强名称与authenticode具有不同的目的(有关其工作原理的详细信息,请参阅此链接).
  2. 将您的证书导入为KeySpec=2.这样做的过程赘述.

因为我想使用多个强名称,所以我目前使用选项(1),尽管选项(2)也有效.


为确保此解决方案永远不会丢失,以下是解决方案2的过程:

  1. 使用"Certifiates"MMC将现有的keyset(KeySpec=1)导出到PFX文件.注意:请将此文件备份到安全位置并测试文件是否可以在另一台机器上正确导入,如果您真的想要安全地播放它!
  2. 从加密存储中删除现有证书(使用MMC进行stlll).
  3. 打开CMD提示.
  4. 使用以下命令导入PFX文件:
    1. certutil -importPFX -user <pfxfilename> AT_SIGNATURE
    2. 出现提示时输入pfx的密码.

你现在应该有一个密钥集/证书KeySpec=2.如果需要,您现在可以再次使用MMC将其导出到另一个PFX文件中.


Rom*_*meo 10

若要在Visual Studio 2012中解决此问题,我右键单击项目,属性 - >"签名",然后取消选中"签署ClickOnce清单".

  • 如果不需要签名,这是一个完美的答案.它将不再需要签署项目. (2认同)

Bal*_*mar 8

我在“选择强名称密钥文件”下拉框中重新选择了密钥(pfx)文件,然后在“输入密码”弹出窗口中提供了密码。保存了我的项目,并且rebuild.build成功。

  • 打开项目属性。
  • 单击签名部分。
  • 如果显示“选择一个强名称密钥文件:”,请从下拉框中重新选择当前值:

在此处输入图片说明

  • 现在,Visual Studio会提示您输入密码。输入它。

在此处输入图片说明

  • 保存您的项目并进行重建。

  • 如果收到错误消息:“尝试引用不存在的令牌”,则忽略它并继续以下步骤

  • 点击“更改密码”按钮:

在此处输入图片说明

  • 在所有三个框中输入原始密码,然后单击“确定”。如果您想更改密码(或者您的旧密码不符合复杂性要求),则可以立即进行。

  • 保存您的项目并进行重建。

更多信息..

  • 解决这整个错误似乎完全是随机的,但是这种解决方案对我有用。如果其他人对此没有帮助,我只能建议尝试一切。 (3认同)

小智 6

作为一种解决方法,我尝试以管理员身份运行Visual Studio 2010,它对我有用.

我希望这有帮助.