digital-certificate - 如何检查文件是否具有数字签名

标签 digital-certificate

我想以编程方式检查文件是否经过数字签名。

目前,我发现了一个相当晦涩的 code in MSDN ,这不编译...

关于这个主题的任何想法?

顺便说一句,带有命令行的外部工具也很棒。

最佳答案

提到signtool的答案中缺少的重要部分是:

是的,使用众所周知的 signtool.exe,您还可以查明文件是否已签名。无需下载其他工具!

例如。用简单的线:

signtool verify /pa myfile.exe
if %ERRORLEVEL% GEQ 1 echo This file is not signed.

(对于详细的输出,在 '/pa' 后添加一个 '/v'。)

有人可能会问:为什么这很重要?我只是(再次)签署文件,这些文件将被签署并且它可以工作。

我的目标是保持构建干净,并且不要再次签署文件,因为不仅日期发生了变化,而且之后的二进制文件也不同。

业务示例:
我的客户有一个简化的自动化“开发操作”类构建和构建后流程。不同的文件集有多个来源,最后所有文件都经过构建、测试和捆绑分发——为此,必须对某些文件进行签名。为了保证某些文件未经签名就不会离开设备,我们曾经对所有重要文件进行签名,即使它们已经签名。

但这还不够干净:

1) 如果我们再次对一个已经签名的文件进行签名,文件日期和二进制指纹会发生变化,并且如果它只是简单地复制,则该文件将失去与其来源的可比性。
(至少如果你用时间戳签名,我们总是这样做,我认为这是强烈推荐的。)

这是严重的质量损失,因为此文件不再与来自其他文件源的前辈文件相比。

2)如果我们再次签署文件,这也可能是一个错误,它是第三方文件,不应由您的单位签署。

您可以通过根据前面提到的“signtool verify”调用的返回代码使签名本身成为条件来避免这两种情况。

关于digital-certificate - 如何检查文件是否具有数字签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/667017/

相关文章:

Java Applet - 签名 applet 类而不是 applet jar

php - 调用未定义函数 openssl_pkcs7_sign()

security - key 管理 : Public/Subordinate key

cocoa-touch - 在 iOS 应用中显示不受信任的证书信息

openssl - 如何读取X509 V3证书的 key ?

javascript - 了解浏览器插件: creation,部署和使用

java - 如何使用 .key 文件创建 jks

java - 如何删除不明确的函数调用

java - 无法从证书中找到私钥