Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在执行.NET应用程序时验证authenticode签名_.net_Authenticode - Fatal编程技术网

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

在执行.NET应用程序时验证authenticode签名,.net,authenticode,.net,Authenticode,我觉得我在这里遗漏了一些明显的东西,但我在任何地方都看不到 我使用Authenticode证书对可执行文件进行签名,但随着我开始了解更多关于它的内容,我开始质疑它的价值 签名的exe具有数字证书,该证书显示为“有效”证书。当您从internet下载此类文件时,Windows中会显示一条警告,表示您将从Xyz Corporation发布的潜在不安全位置运行程序 如果没有签名,下载的文件将显示一个完全不同的警告框,表明该文件不可信 现在,我关心的是: 如果更改了已签名的exe,当您进入“属性”

我觉得我在这里遗漏了一些明显的东西,但我在任何地方都看不到

我使用Authenticode证书对可执行文件进行签名,但随着我开始了解更多关于它的内容,我开始质疑它的价值

  • 签名的exe具有数字证书,该证书显示为“有效”证书。当您从internet下载此类文件时,Windows中会显示一条警告,表示您将从Xyz Corporation发布的潜在不安全位置运行程序
  • 如果没有签名,下载的文件将显示一个完全不同的警告框,表明该文件不可信
现在,我关心的是:

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

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


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

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


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

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

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


    同样,这个问题也很相似:

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