使用 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 都无法使用相同的证书。
然后我开始使用 MakeCert 和 Pvk2Pfx 制作新证书,但这也不起作用。我尝试将加密从 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 签名者的证书对签名无效的主要内容,如果未能解决你的问题,请参考以下文章