使用Visual Studio和LibZ容器签署程序集

时间:2017-01-05 16:55:32

标签: c# wpf security .net-assembly code-signing

我有一个相对简单的WPF应用程序,我在Visual Studio中创建。因为应用程序有一些依赖的DLL(从Nuget下拉的包),我也一直在使用一个名为LibZ Container的辅助应用程序,它就像ILMerge一样,除了它适用于WPF应用程序。 (换句话说,它将EXE和所有DLL组合成一个EXE文件。)

当我将我的EXE文件上传到网上然后下载它时,我收到一个警告 - 无论我在哪个浏览器中 - 该文件可能不安全。例如,这是Chrome的警告:

MyCoolApplication.exe is not commonly downloaded and could be dangerous.

Keep file? Even if you have downloaded files from this site before, the site may be temporarily unsafe (hacked). Try downloading this file later. Cancel. Keep anyway.

我的假设是我看到此警告,因为该文件未签名。所以,我从Comodo购买了代码签名证书。跳过了很多不同的环节,最终获得了正确的PFX格式的证书,但我最终做到了,并且能够在Visual Studio中为我的项目构建属性的“签署程序集”部分使用它

Sign the assembly: Choose a strong name key file.

这似乎工作正常,意味着项目成功构建并使用PFX文件进行签名。 但是,如果我通过运行signtool verify /pa MyCoolApplication.exe来检查文件,则signtool实用程序会报告该文件是未签名的。甚至在我尝试使用LibZ容器合并DLL之前。

当我使用LibZ Container进行合并时,我使用以下命令:

  

libz inject-dll --assembly MyCoolApplication.exe --include * .dll --move

和往常一样,这有效;但是,如果我用signtool检查一下,它仍会报告该文件是未签名的。然后,我通过运行此命令尝试使用LibZ的内置签名机制:

  

libz sign --include MyCoolApplication.exe --key key.pfx --password abc123

然而,我得到的控制台输出结尾是:

  

程序集'。\ MyCoolApplication.exe'已经签名,因此不需要重新签名

如果有人好奇,我可以发布该命令的完整输出。但同样,signtool.exe报告该文件是未签名的。这里有两种不同类型的签名,我不知道吗?

如何使用我的代码签名证书签署此可执行文件,以便浏览器警告消失?我错过了什么?

2 个答案:

答案 0 :(得分:1)

经过一些研究,似乎这个问题(错误信息,而不是signtool问题)很常见。不幸的是,似乎没有一种普遍接受的解决方法。许多文章和论坛帖子比比皆是,建议采用非常脆弱的经验支持的补救措施。话虽如此,这些补救措施似乎得到了最合理的支持:

  1. Request a review of your site/link from Google
  2. Add a logo to your executable
  3. Make sure your headers are in order
  4. Google Webmasters
  5. 中添加您的网站
  6. 让更多人下载该文件,或者只是从多台计算机上多次下载该文件。
  7. 几张海报建议您签署您尝试过的文件,但似乎没有太多的经验验证或谷歌的任何提及。

答案 1 :(得分:0)

所以当我发布这个问题时我没有意识到,只需勾选“签署大会”的方框实际上只是第一步,但还需要明确调用signtool.exe来签署可执行文件。

我发现a number of guides online都解释了这种情况。感谢这些指南,我意识到我需要运行这些命令:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign /f key.pfx /p abc123 /t http://timestamp.comodoca.com /v "MyCoolApplication.exe"
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign /f key.pfx /p abc123 /fd sha256 /tr http://timestamp.comodoca.com/?td=sha256 /td sha256 /v "MyCoolApplication.exe"

我还发现名为StrongNameSigner的第三方库自动为我正在使用的未签名第三方库提供强名称的用处。