有没有办法使用过期证书签署二进制文件?

Posted

技术标签:

【中文标题】有没有办法使用过期证书签署二进制文件?【英文标题】:Is there a way to sign a binary file using an expired certificate? 【发布时间】:2019-06-09 14:40:47 【问题描述】:

我正在使用 signtool 对我的 exe 和 dll 文件进行签名。出于测试目的,我想找到使用过期证书的方法。可能吗?如果无法使用signtool,我也可以使用其他工具。 顺便提一句。我不想更改我的系统日期,因为稍后我想尝试添加时间戳

这是与 signTool 一起使用的命令以及用于对我的文件进行签名的参数:

signTool sign /f expiredCert.pfx /p "pass" /v test.dll

结果我得到:

SignTool Error: No certificates were found that met all the given criteria.

【问题讨论】:

【参考方案1】:

我正在回答我自己的问题,因为事实证明,最简单的方法是操纵系统时间。这对我来说很麻烦,因为这在我的开发机器上被阻止了,所以我不得不使用关闭时间同步的虚拟机来完成。将系统时间更改为证书有效期内的日期后,我能够签署文件。后来我什至能够使用外部服务添加时间戳。当您查看文件属性中的“数字签名”选项卡时,Windows 当然会立即抱怨这一事实,但这是我执行测试时想要实现的目标。

【讨论】:

【参考方案2】:

正如您所说,可以签名,但要真正签名(Authenticode),如此处所述https://support.globalsign.com/code-signing/ev-code-signing-windows-7-and-8

为您的代码添加时间戳非常重要,而且非常重要 推荐用于您签署的每一段代码。这个时间戳将 允许您签署的文件在 证书本身已过期。

你需要给它加上时间戳。我怀疑你是否被允许在时间戳证书的那一刻过期(它永远不会是有效的恕我直言)。

附:你可以这样做:( Nvidia 会这样做。正如我所说的那样,它是无效的,但被 Windows 10 跳过,但被 virtualbox 识别为坏的。

【讨论】:

以上是关于有没有办法使用过期证书签署二进制文件?的主要内容,如果未能解决你的问题,请参考以下文章

用于签署应用程序的证书的哪些信息存储在应用程序中?

带有无效签名的无效二进制文件

用于签署“AppName”的证书已过期或已被撤销。签署和安装应用程序需要更新的证书

k8s1.13.0二进制部署-node节点

二进制部署K8s集群进阶使用之第1节关于K8s证书

无效签名错误!