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




visual-studio-2010 visual-studio (15)

FYI

我使用带-p标志的sn.exe作为创建SNK文件的官方代码标志PFX文件(作为代码签名购买),并在Visual Studio 2013中使用SNK文件进行浏览。

  • 解决了密码问题。

但问题仍然是,它一直在说:“密钥文件* .. SNK不包含公钥/私钥对。”

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


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)配合使用,但不具有强命名(标志下拉)。

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

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

因为我想使用多个强名称,所以我当前使用选项(1),但选项(2)也适用。

为了确保这个解决方案在将来永远不会丢失,下面是解决方案2的过程:

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

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


好的,这对我很有用。 在Visual Studio 2010中以管理员身份打开旧的解决方案/项目,然后打开新的或复制的解决方案/项目。 以管理员身份,删除新的Visual Studio 2010解决方案/项目中复制的pfk文件,然后转到项目属性并取消选择它。

将这两个项目打开后,将粘贴复制到新项目。 转到项目属性并选择Build。 我打开并关闭Visual Studio,并在从新项目中删除之后构建它,然后再从旧项目中复制并选择它。 当我复制项目并尝试构建它时,我在第一篇文章开始时收到了错误。


将Windows安装移到SSD后,我遇到了同样的问题。 没有其他解决方案为我工作。

我的解决方案是在Notepad打开项目文件并删除对PFX键的所有引用。 保存文件后,在Visual Studio中打开解决方案。 转到项目 - >属性 - >签名。 您不应看到“选择强名称密钥文件”组合框中列出的任何密钥。 在组合框中,浏览到该键,选择它,现在可以构建项目。


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

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

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

  • 打开项目属性。
  • 点击签名部分。
  • 在“选择强名称密钥文件:”的地方,从下拉框中重新选择当前值:

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

  • 保存你的项目并重建。

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

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

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

  • 保存你的项目并重建。

更多信息..


我有同样的问题,并删除商店和阅读没有工作。 我必须做到以下几点。

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

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

    openssl pkcs12 -in certfile.pfx -out backupcertfile.key
    
    openssl pkcs12 -export -out certfiletosignwith.pfx -keysig -in backupcertfile.key
    

然后在项目属性中可以使用PFX文件。


我的问题是,TFS构建控制器作为网络服务运行,出于某种原因,我不明白为什么Visual Studio构建主机服务证书没有被使用。 我将Visual Studio Build服务的标识更改为更易于管理的标识,确保它具有TFS服务器上的权限,并使用MMC手动添加证书。

问题还在于MSBuild无法将密码保护证书添加到商店。


我通过在Visual Studio项目的.csproj文件中更改以下行来解决此问题:

这引发了'无法导入'错误:

<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>

将该值更改为false会导致错误消失。



这解决了我的问题:打开你的VS项目

双击Package.appxmanifest

转到打包选项卡

点击选择证书

点击配置证书

从文件中选择并使用example.pfx创建统一或其他任何内容


这里描述的所有方法都不能帮助我。 但是当我从我的项目中删除* .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,然后选择安装,但无法正常工作。 只需注意一点,因为它可能是提供解决方案的两者的组合。

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





pfx