6

我觉得我在这里遗漏了一些明显的东西,但我没有看到它写在任何地方。

我使用 Authenticode 证书签署我的可执行文件,但是当我开始了解更多关于它的信息时,我质疑它的价值。

  • 签名的 exe 具有显示为“有效”证书的数字证书。当您从 Internet 下载此类文件时,它会在 Windows 中显示一条警告,说明您将要从 Xyz Corporation 发布的潜在不安全位置运行程序。
  • 如果没有签名,下载的文件将给出一个完全不同的警告框,说明该文件不受信任

现在,我担心的是:

  • 如果签名的 exe 被更改,当您进入“属性”>“数字签名”>“选择签名”>“详细信息...”时,它会显示“此数字签名无效”。这是查看可能是严重问题的一种非常模糊的方式,并且是您不应该运行该文件的一个巨大指标。

    • 如果您从 Windows 运行此文件(未下载),它将运行良好。没有警告或任何迹象表明有问题
    • 如果您下载文件然后尝试运行它,我没有检查会发生什么。
  • 如果您从文件中剥离签名(使用delcert),也没有任何迹象表明有任何问题。同样,您可以运行该文件,只是在属性对话框中不显示任何证书。


为了使它更有用,我认为签名文件需要验证自己。启动时,它应该检查是否存在有效签名,并且可能会检查签名的 sha1 指纹是否与 Xyz 公司证书的预期签名匹配。

(当然,这仍然不能处理有人剥离证书,然后编辑文件以删除证书检查的情况)


我找不到任何人谈论如何做到这一点(至少不是在 .NET 中,当然也不是像我期望的那样使用简单的 API 调用)——所以这导致了几个问题:

  1. 没有检查签名是否有原因?没有这张支票签名还有什么其他好处?
  2. 尝试验证签名作为篡改检测的手段是否如此徒劳以至于尝试毫无意义?
  3. 如何在 .NET 中检查当前可执行文件的证书?
4

1 回答 1

0

看看这个问题。一位评论者说,有一个政策设置只允许签名的可执行文件运行。

“代码签名”的 Windows 应用程序是否不易受到病毒感染?

此外,这个问题非常相似:Preventing executables with invalid Authenticode signatures from running

于 2010-07-13T21:02:41.397 回答