【问题标题】:ClickOnce signer's certificate not valid for signing when using makecert/pvk2pfx使用 makecert/pvk2pfx 时,ClickOnce 签名者的证书对签名无效
【发布时间】: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 中...

有什么想法吗?

【问题讨论】:

    标签: .net clickonce


    【解决方案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 生成的将无法使用。

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

    【讨论】:

      猜你喜欢
      • 2012-07-02
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多