在执行.NET应用程序时验证authenticode签名
我觉得我在这里遗漏了一些明显的东西,但我在任何地方都看不到 我使用Authenticode证书对可执行文件进行签名,但随着我开始了解更多关于它的内容,我开始质疑它的价值在执行.NET应用程序时验证authenticode签名,.net,authenticode,.net,Authenticode,我觉得我在这里遗漏了一些明显的东西,但我在任何地方都看不到 我使用Authenticode证书对可执行文件进行签名,但随着我开始了解更多关于它的内容,我开始质疑它的价值 签名的exe具有数字证书,该证书显示为“有效”证书。当您从internet下载此类文件时,Windows中会显示一条警告,表示您将从Xyz Corporation发布的潜在不安全位置运行程序 如果没有签名,下载的文件将显示一个完全不同的警告框,表明该文件不可信 现在,我关心的是: 如果更改了已签名的exe,当您进入“属性”
- 签名的exe具有数字证书,该证书显示为“有效”证书。当您从internet下载此类文件时,Windows中会显示一条警告,表示您将从Xyz Corporation发布的潜在不安全位置运行程序李>
- 如果没有签名,下载的文件将显示一个完全不同的警告框,表明该文件不可信
- 如果更改了已签名的exe,当您进入“属性”>“数字签名”>“选择签名”>“详细信息”时。。。它显示“此数字签名无效”。这是一种非常模糊的方式来看待可能出现的严重问题,并且是一个巨大的指标,表明您不应该运行该文件
- 如果您从Windows(未下载)运行此文件,它将正常运行。没有警告或任何迹象表明有问题
- 我没有检查如果下载文件然后尝试运行它会发生什么李>
- 如果您从文件中删除签名(使用),也没有任何错误迹象。同样,您可以运行该文件,但“属性”对话框中不会显示任何证书
为了使其更有用,我认为签名文件需要验证自身。启动时,应检查是否存在有效的签名,以及签名的sha1指纹是否与Xyz公司证书的预期签名相匹配 (当然,这仍然不能处理有人删除证书,然后编辑文件以删除证书检查的情况)
我找不到任何人谈论如何做到这一点(至少不是在.NET中,当然也不是像我期望的那样使用简单的API调用),因此这就引出了几个问题:
看看这个问题。一位评论者说,有一个策略设置只允许签名的可执行文件运行
同样,这个问题也很相似:对于.NET,您应该使用强名称签名,而不是Authenticode。