使用 pfx 和 Visual Studio 对程序集进行强名称签名

问题描述 投票:0回答:5

所以问题来了:我们决定购买一个代码签名证书,我们从 Godaddy 购买了一个 p12 格式的证书。

经过研究,我发现 p12 和 pfx 是同一件事,只是扩展名不同,所以我将其重命名为 pfx。我还得到了 spc 和 p7c 文件,但我不知道如何处理它们。

无论如何,我尝试将我的证书添加到我的 Visual Studio 2013 解决方案中,这就是我得到的:

  • 首先我收到密码提示,输入密码后我是 收到错误消息

     "An attempt was made to reference a token that does not exist."
    
  • 在我第二次尝试安装 pfx 时,我根本没有收到任何提示或错误消息,但当我构建时,我收到错误

     "Cannot import the following key file: something.pfx 
     The key file may be password protected.
     To correct this, try to import the certificate again or 
     manually install the certificate to the Strong Name CSP with the following
     key container name: VS_KEY_33FA18307607ECFB"
    
  • 所以我正在使用

     sn -i something.pfx VS_KEY_33FA18307607ECFB
    

    完成时没有错误,但是当我尝试时 再次构建时,我收到了具有相同容器名称的完全相同的错误。

     "Cannot import the following key file: something.pfx ... 
     with the following key container name: VS_KEY_33FA18307607ECFB"
    

我尝试使用 Signtool,这是 Goddady 支持人员推荐的替代方案,但尽管它对程序集进行了签名,但它没有提供我需要的强命名。

我还尝试使用

将证书从 pfx 提取到 snk
    sn -p something.pfx key.snk

并选择了延迟签名,但项目没有再次构建,并且出现更多错误。

反问:为什么这么难?很多人都遇到这个问题。

有人可以帮忙吗?

visual-studio visual-studio-2013 strongname pfx
5个回答
25
投票

我拥有 Comodo (.p12) 证书,并遇到了同样的问题,并根据 @SmithPlatts 答案和 @Ares 评论解决了它。对于那些不了解证书(比如我)的人来说,这是一个详细的演练:

  1. 使用管理员权限打开命令提示符。
  2. 键入命令:
    certutil -importPFX "<certFilepath>\<certFilename>.p12" AT_SIGNATURE
    (AT_SIGNATURE 使此功能有效,而不是[右键单击 .p12 文件]-->“安装 PFX”)
  3. 输入您选择的密码。
  4. 使用管理员权限打开mmc.exe,文件-->添加/删除管理单元...
  5. 添加“证书”
  6. 选择“计算机帐户”
  7. 在控制台根目录/证书(本地计算机)/个人/证书下找到步骤 2 安装的证书。
  8. 右键证书/所有任务/导出-->下一步/是,导出私钥
  9. 转到“个人信息交换 - PKCS #12 (.PFX)”
  10. 取消选中“包括所有证书...”。重要的!如果选中,签名时 VS 将产生以下消息:“无法找到用于解密的证书和私钥”。
  11. 选中“导出所有扩展属性”(可选)。
  12. 如果您不打算将来重新导出,可以选中“删除私钥...”。
  13. 勾选密码并输入步骤3的密码。
  14. 选择导出的 (.pfx) 证书的文件路径和文件名。
  15. 使用导出的 .pfx 文件从 VS 签署你的程序集/项目。
  16. 构建项目以确保 pfx 正常工作。

22
投票

我刚刚遇到了同样的问题,这篇文章救了我的培根!

我需要做的就是重新创建我的代码签名证书,并将 KeySpec 设置为 2 (AT_SIGNATURE),现在 VS (2013) 导入并签署我的程序集,没有错误! :-D

我意识到这与您的情况有点不同,但我希望这能在某种程度上有所帮助......


9
投票

我遇到了这个问题,并通过以管理员身份打开 Visual Studio 修复了它。


3
投票

我通过使用 openssl 和 -keysig 选项重新创建 PFX 解决了这个问题。

openssl pkcs12 -export -out "MyPfx.pfx" -keysig -inkey "MyKey.key" -in "MyCer.cer"

1
投票

遇到了这个问题以及人们提到的相关问题。

在大型 IT 部门的开发部门的企业环境中工作,我没有完整的本地管理权限。因此,当我运行 VS 时,它不会以本地管理员身份运行。

一旦我设置了运行 VS 2013/2015 的快捷方式,我在执行程序集时遇到的问题...就消失了。

这也可以节省一些人的时间,也可以避免把头发从根部拔掉。

© www.soinside.com 2019 - 2024. All rights reserved.