使用 pfx 和 Visual Studio 签署具有强名称的程序集
Posted
技术标签:
【中文标题】使用 pfx 和 Visual Studio 签署具有强名称的程序集【英文标题】:Signing assemblies with strong name using pfx and visual studio 【发布时间】:2014-03-22 17:20:46 【问题描述】:所以问题来了:我们决定购买一个代码签名证书,我们从 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 ....
我尝试使用 Goddady 支持推荐的 signtool 作为替代方案,但尽管它签署了程序集,但它不提供我需要的强命名。
我还尝试将证书从 pfx 提取到 snk 使用
sn -p something.pfx key.snk
并选择了延迟签名,但项目没有再次构建,出现更多错误。
反问:为什么这么难?很多人都有这个问题。
有人可以帮忙吗?
【问题讨论】:
spc 是 crl2pkcs7 格式的 unix 文件格式。见developer.mozilla.org/en/docs/… 【参考方案1】:我刚刚遇到了同样的问题,this article 救了我的培根!
我需要做的就是重新创建我的代码签名证书,并将 KeySpec 设置为 2 (AT_SIGNATURE),现在 VS (2013) 导入并无错误地签署我的程序集! :-D
我意识到这与您的情况有点不同,但我希望这可以在某种程度上有所帮助......
【讨论】:
这确实为我指明了方向。我会为那些感兴趣的人提供一些额外的信息。根据您提供的链接,我所做的是:无需重新请求证书。有了一个新的 CSR,我使用certutil -importPFX filename.pfx AT_SIGNATURE
安装它以强制使用 keyspec 参数,然后使用 MMC 从商店中提取证书。这次证书与 VS 一起使用。现在我有了强大的命名。然后我使用“signtool.exe”对程序集进行签名,最后添加了证书。单击一次,因此我的所有文件都显示了我们公司的信息以及签名的安装程序。谢谢!
@Ares 没问题!很高兴它现在为您工作:) 感谢您提供信息;如果我们遇到与外部 CA 相同的问题,很高兴知道解决此问题的方法
我也有一个 GoDaddy 证书,这个解决方案也对我有用(不需要新的 CSR)。有趣的是,该证书已经适用于 VBA 代码,在实施此解决方案之前,我还需要完成一些额外的步骤,如下所述:***.com/questions/2815366/…
@Chris:旧链接是blogs.msdn.com/b/andrekl/archive/2008/01/08/…,新链接是docs.microsoft.com/en-us/archive/blogs/andrekl/…。我添加了两者,以便每个人都可以看到归档的 MSDN 博客的链接发生了怎样的变化。
@TobiasKnauss 我已经更新了答案中的链接,以便那些正在寻找的人可以使用它;谢谢!【参考方案2】:
我遇到了这个问题,并通过以管理员身份打开 Visual Studio 来解决它。
【讨论】:
如果您将私钥放在本地计算机证书存储中,您可能必须授予自己对私钥的访问权限。即使您是 PC 上的本地管理员,我也发现这是正确的。【参考方案3】:我解决了这个问题,使用带有 -keysig 选项的 openssl 重新创建 PFX。
openssl pkcs12 -export -out "MyPfx.pfx" -keysig -inkey "MyKey.key" -in "MyCer.cer"
【讨论】:
【参考方案4】:遇到了这个问题以及人们提到的相关问题。
在大型 IT 部门的开发部门的公司环境中工作,我没有完整的本地管理员权限。因此,当我运行 VS 时,它不会以本地管理员身份运行。
一旦我设置了运行 VS 2013/2015 的快捷方式,我在运行程序集时看到的问题...消失了。
这也可能会节省一些时间,以及从根部拔出头发。
【讨论】:
这个解决方案对我有用。只需以管理员身份运行 VS,先尝试简单的解决方案!【参考方案5】:我拥有 Comodo (.p12) 证书并遇到了同样的问题并根据@SmithPlatts 答案和@Ares 评论解决了它。以下是针对那些不精通证书的人(如我)的详细演练:
-
以管理员权限打开命令提示符。
键入命令:
certutil -importPFX "<certFilepath>\<certFilename>.p12" AT_SIGNATURE
(AT_SIGNATURE 使这项工作而不是 [右键单击 .p12 文件]-->'安装 PFX')
输入您选择的密码。
以管理员权限打开 mmc.exe,文件-->添加/删除管理单元...
添加“证书”
选择“计算机帐户”
在 Console Root/Certificates (Local Computer)/Personal/Certificates 下找到您在第 2 步中安装的证书。
右键Cert/All Tasks/Export-->下一步/是,导出私钥
转到“个人信息交换 - PKCS #12 (.PFX)”
取消选中“包括所有证书...”。重要的!如果选中,VS 将在签名时产生此消息:“找不到用于解密的证书和私钥”。
选中“导出所有扩展属性”(可选)。
如果您将来不打算重新导出,可以选中“删除私钥...”。
勾选密码,输入第三步的密码。
为导出的 (.pfx) 证书选择文件路径和文件名。
使用导出的 .pfx 文件从 VS 签署您的程序集/项目。
构建项目以确保 pfx 正常工作。
【讨论】:
做到了!最重要的是,我错过了取消选中“包括所有证书...”的步骤 我在 VS 2015 中试过这个,但我仍然得到同样的错误 我也试过了,但是在我导出证书后,AT_SIGNATURE 被 AT_KEYEXCHANGE 覆盖了... 你是我的英雄!以上是关于使用 pfx 和 Visual Studio 签署具有强名称的程序集的主要内容,如果未能解决你的问题,请参考以下文章
如何使用适用于 macOS 的 Visual Studio 代码为外部 Mac 应用商店签署和公证电子应用程序构建?
在 Visual Studio Cordova 上打包和签署 ios 应用程序时遇到问题
如何使用现有的 .cer、.p12 或 .pfx 证书签署应用程序?