执行.NET应用程序时验证authenticode签名

时间:2010-07-13 20:34:52

标签: .net authenticode

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

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

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

现在,我关心的是:

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

    • 如果您从Windows运行此文件(未下载),它将运行正常。没有任何警告或任何迹象表明存在问题
    • 我没有检查下载文件然后尝试运行它会发生什么。
  • 如果从文件中删除签名(使用delcert),则表示没有任何错误。同样,您可以运行该文件,并且在属性对话框中不会显示任何证书。


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

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


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

  1. 是否有理由不检查签名?没有这项检查,还有哪些其他好处?
  2. 是否试图将签名作为篡改检测手段进行验证,这样做是徒劳无功的?
  3. 如何检查.NET中当前可执行文件的证书?

1 个答案:

答案 0 :(得分:0)

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

Are "code-signed" windows applications less vulnerable to virus infections?

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