使用 makecert/pvk2pfx 时,ClickOnce 签名者的证书对签名无效

Posted

技术标签:

【中文标题】使用 makecert/pvk2pfx 时,ClickOnce 签名者的证书对签名无效【英文标题】:ClickOnce signer's certificate not valid for signing when using makecert/pvk2pfx 【发布时间】:2012-10-11 17:06:34 【问题描述】:

突然间,我使用 makecert/pvk2pfx 创建的 unexpired 证书在尝试发布 ClickOnce 应用程序时抛出错误。这在上周运行良好...

错误信息:

错误 2 签名时出错:签名失败 bin\Debug\app.publish\setup.exe。 SignTool 错误:签名者的 证书对签名无效。 SignTool 错误:错误 尝试签名时发生:bin\Debug\app.publish\setup.exe

当我在“签名”选项卡中使用“创建测试证书”选项时,证书可以正常工作并且应用程序已成功发布。

当使用 makecert/pvk2pfx 手动创建我的证书时,我关注的是 MSDN instructions。

当我删除旧的手动创建的证书时,使用 makecert/pvk2pfx 创建一个新证书并尝试使用该证书,我得到了同样的错误。

该应用程序是面向 .NET 4 的 WPF 应用程序,这一切都在 Visual Studio 2010 中...

有什么想法吗?

【问题讨论】:

【参考方案1】:

在我指定证书长度大于 1024 后它对我有用:

makecert -sv MyApp.pvk -n "CN=MyCompany" -len 2048 MyApp.cer -r
pvk2pfx -pvk MyApp.pvk -spc MyApp.cer -pfx MyApp.pfx -po MyPassword

Microsoft 发布了一个更新,该更新会影响 RSA 密钥长度小于 1024 位的所有证书。

Microsoft Security Advisory: Update for minimum certificate key length

【讨论】:

是的,这是根本问题。我认为 -len 开关不是必需的,因为更新后 makecert 默认创建长度大于 1024 的证书。 我的证书无效,所以我尝试了 -len 2048 仍然无效。通过添加 -r 解决了实际问题,然后删除了 signtool 错误。 -r 部分至关重要。更新版本的 makecert 将使用 2048 位的默认值,因此 -len 部分不是必需的。【参考方案2】:

在 Makecert 使用 -r 开关(创建自签名证书)后,使用 pvk2pfx 生成的 pfx 证书现在适用于 ClickOnce 发布...我不确定这里到底发生了什么,因为旧密钥不是“自签名”工作了很长时间...

我用来创建工作 pfx 证书的确切命令...

makecert -sv MyApp.pvk -n "CN=MyCompany" MyApp.cer -r

pvk2pfx -pvk MyApp.pvk -spc MyApp.cer -pfx MyApp.pfx

【讨论】:

是的,-r 至关重要。我试图将证书移动到 Windows 10,但我不得不重新创建它并且必须使用 -r【参考方案3】:

我有一个 Visual Studio 2013 项目,我可以使用(Visual Studio 生成的)pfx 文件对其进行签名,但无论我做什么,使用 SignTool 都无法使用相同的证书。

然后我开始使用 MakeCertPvk2Pfx 制作新证书,但这也不起作用。我尝试将加密从 SHA1 更改为 SHA512,将密钥长度从 256 更改为 2048(如其他地方所建议的),更改 SignTool 的版本,等等。

我必须检查过 1,000 个包含“签名者的证书对签名无效”的不同链接。

我正在总结最有可能解决问题的主要内容。这一切都是基于生成一个新的 pfx 文件; Visual Studio 生成的将无法使用。

    使用 MakeCert 生成您的 .cer.pvk 文件,并将 -len 开关设置为至少 1024 - 或者,更好的面向未来的 2048 - 以及最重要的 @自签名证书的 987654324@ 开关。我明确添加了结束日期(使用-e 12/31/2039)和SH256 加密算法(-a SHA256)。我建议添加密码。 使用带有标准/默认开关的Pvk2Pfx,从.cer.pvk 文件生成.pfx 文件。 使用 SignTool 对程序集进行签名,使用与 MakeCert 提供的密码匹配的 -p YourPassword

【讨论】:

以上是关于使用 makecert/pvk2pfx 时,ClickOnce 签名者的证书对签名无效的主要内容,如果未能解决你的问题,请参考以下文章

使用 angular/cli 设置新项目时出错

使用 jboss-cli 引用它时无法解析系统属性

使用 npm vue-cli 时出错

ng:使用 angular-cli 创建新项目时找不到命令

使用 vue-cli 时如何禁用在本地网络上运行应用程序?

使用 msbuild (CLI) 编译时程序集引用损坏