【发布时间】:2017-01-05 16:55:31
【问题描述】:
我有一个在 Visual Studio 中创建的相对简单的 WPF 应用程序。因为该应用程序有一些依赖的 DLL(从 Nuget 中提取的包),所以我也一直在使用一个名为 LibZ Container 的帮助应用程序,它与 ILMerge 类似,但它适用于 WPF 应用程序。 (换句话说,它将 EXE 和所有 DLL 组合到一个 EXE 文件中。)
当我将我的 EXE 文件上传到网络并随后下载它时,我会收到一个警告——在我使用的任何浏览器中——该文件可能不安全。例如,这是 Chrome 的警告:
我的假设是我看到这个警告是因为文件没有签名。所以,我从 Comodo 购买了一个代码签名证书。跳过了很多不同的环节,最终获得了正确 PFX 格式的证书,但我最终做到了,并且能够在 Visual Studio 中为我的项目的构建属性的“签署程序集”部分使用它.
这似乎工作正常,这意味着项目成功构建并使用 PFX 文件进行签名。 但是,如果我通过运行 signtool verify /pa MyCoolApplication.exe 检查文件,signtool 实用程序会报告该文件未签名。这甚至在我尝试使用 LibZ 容器合并 DLL 之前。
当我使用 LibZ Container 进行合并时,我使用这个命令:
libz injection-dll --assembly MyCoolApplication.exe --include *.dll --move
和往常一样,这行得通;但是,如果我使用 signtool 检查内容,它仍然会报告该文件未签名。然后我尝试通过运行以下命令来使用 LibZ 的内置签名机制:
libz 符号 --include MyCoolApplication.exe --key key.pfx --password abc123
但是,我从中得到的控制台输出结果是:
Assembly '.\MyCoolApplication.exe' 已签名,因此无需重新签名
如果有人好奇,我可以发布该命令的完整输出。但同样,signtool.exe 报告该文件未签名。这里有两种我不知道的不同类型的签名吗?
如何使用我的代码签名证书对该可执行文件进行签名,以便浏览器警告消失?我错过了什么?
【问题讨论】:
-
您是否尝试过下载当前据称已签名的 exe?
signtool可能有点困惑。 -
我确实试过了,是的。不幸的是,它确实有与往常一样的警告
标签: c# wpf security .net-assembly code-signing