【问题标题】:Verifying authenticode signature upon execution of .NET app在执行 .NET 应用程序时验证验证码签名
【发布时间】:2010-07-13 20:34:51
【问题描述】:

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

我使用 Authenticode 证书签署我的可执行文件,但随着我开始了解更多有关它的信息,我质疑其价值。

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

现在,我担心的是:

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

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


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

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


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

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

【问题讨论】:

  • 对于 .NET,您应该使用强名称签名,而不是 Authenticode。

标签: .net authenticode


【解决方案1】:

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

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

另外,这个问题也很相似:Preventing executables with invalid Authenticode signatures from running

【讨论】:

    猜你喜欢
    • 2023-02-20
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    相关资源
    最近更新 更多