【问题标题】:SignTool Not Signing ClickOnce App Using SHA256, Only Uses SHA1SignTool 未使用 SHA256 对 ClickOnce 应用程序进行签名,仅使用 SHA1
【发布时间】:2014-02-18 03:54:20
【问题描述】:

我正在尝试签署我的 clickonce 应用。我有一个使用 SHA256 的 EV 代码签名证书。问题是当我使用构建后命令签署我的应用程序时,它似乎使用的是 SHA1 而不是 SHA256。这是输出窗口的剪辑:

Running Code Analysis...
1>  Code Analysis Complete -- 0 error(s), 0 warning(s)
1>  The following certificate was selected:
1>      Issued to: Certificate Subject Name Here
1>  
1>      Issued by: DigiCert EV Code Signing CA (SHA2)
1>  
1>      Expires:   Thu Apr 14 06:00:00 2016
1>  
1>      SHA1 hash: HASH-HERE
1>  
1>  
1>  Done Adding Additional Store
1>  Successfully signed and timestamped: C:\Users\AnyBody\Documents\Visual Studio 2013\Projects\My Project\Project Folder\obj\x86\My Configuration\MyProgram.exe
1>  
1>  
1>  Number of files successfully Signed: 1
1>  
1>  Number of warnings: 0
1>  
1>  Number of errors: 0

这是我正在使用的构建后命令:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign /fd SHA256 /t "http://timestamp.digicert.com" /n "Certificate Subject Name Here" /v "$(ProjectDir)obj\x86\$(ConfigurationName)\$(TargetFileName)"

当我查看文件的属性时,我可以看到 MyProgram.exe.deploy 附加了数字签名。

运行signtool /verify时没有返回错误

当我尝试启动应用程序时,我收到错误消息“应用程序验证未成功。无法继续”。

在错误信息的详细信息中,有这一行:

+ File, MyProgram.exe, has a different computed hash than specified in manifest.

当我打开并查看清单时,MyProgram.exe 的哈希被指定为 SHA256

可能是什么问题?是什么让 signtool 拒绝使用 SHA256?根据我的阅读,它应该默认使用 SHA256。

我已卸载/重新安装了 Visual Studio、Windows sdk,所有已安装的 .net 库均无济于事。

我真的希望有人有一些想法......

【问题讨论】:

    标签: clickonce sha1 sha256 signtool


    【解决方案1】:

    您是否在使用 WPF 应用程序时遇到此问题?如果是这样,对 AfterCompile 目标中的可执行文件进行签名应该可以解决您的问题。这对我有用。

    更多的讨论可以在这里找到:

    显然,当 Phil 使用 PostBuild 或 BeforePublish 命令,当用户安装它时,他得到了可怕的 “exe 的计算哈希值与清单中指定的哈希值不同” 错误。他发现使用 AfterCompile 可以解决问题。

    http://robindotnet.wordpress.com/2013/04/14/windows-8-and-clickonce-the-definitive-answer-revisited/

    【讨论】:

    • 这是正确的......问题的一部分是在生成清单后可执行文件被签名,这导致可执行文件具有与清单中指定的不同的哈希值。这也可以通过使用 mage 工具在发布后更新清单来解决。引起混淆的另一件事是对 SHA1 哈希的引用。事实证明,SHA1 是对证书指纹的引用,而不是表明应用程序正在使用 SHA1 进行签名
    • 为了其他用户的利益,如果您想使用 SHA256 证书进行代码签名和清单签名,您至少需要使用 .NET Framework 4.5 版本的 SignTool.exe (Sign Tool)Mage.exe (Manifest Generation and Editing Tool) 程序。以前的版本似乎只支持 SHA1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多