Fra*_*rup 6 windows-7 code-signing digital-signature
我多年来一直使用 SHA1 签名,但从 2016 年开始,Windows 强制开发人员使用 SHA256。
Windows 对 Authenticode 代码签名和时间戳的强制执行
通过使用 Windows 7 SDK signtool,对 SHA-256 进行签名的函数是“未知命令”,因此此 signtool 作为 signtool 已过时,不应再使用。
为了使用 SHA256 进行签名,我下载了 Windows 8.1 SDK 以获取具有新功能(/fd 和其他功能)的 signtool.exe。BAT 文件和 signtool 适用于 Windows 8 和 10,所以我知道它可以工作,但在 Windows 7 上尝试为文件添加时间戳时会崩溃。

我使用 bat 文件对文件进行签名,如下所示(我编辑了 BAT 文件,因此它不显示变量、完整路径、公司名称和密码):
Path\signtool.exe sign /f "Path\Certificate.p12" /fd sha256 /p *password* /du "URL" /tr "timestampServer?td=sha256" /td sha256 /d "Product name" "Filename"
Run Code Online (Sandbox Code Playgroud)
我想,我没有合适的 SDK 来支持某些功能,但我在互联网上找不到有关如何在 Windows 7 上进行设置的任何信息。我尝试安装 MS Visual C++ 2015 Redistributable (x64) ,但还是没有解决问题。
小智 4
我终于找到了在 Windows 7 中双重签名文件的解决方案。
诀窍是使用Window 8 SDK(而不是8.1 或 10)!我使用了这个下载: https ://developer.microsoft.com/windows/downloads/windows-8-sdk
在 Windows 7 x64 中,请确保指向 x64 二进制文件 ( ...\8.0\bin\x64\signtool.exe)
作为奖励,这是我制作的一个舒适的批处理脚本。只需将其另存为 doublesign.bat 并将要签名的文件拖到该 bat 文件上即可。
@ECHO OFF
set signtool="C:\path to signtool\signtool.exe"
set certfile="C:\path to certificate\cert.p12"
set certpass="Password"
set company="Optional"
echo Signing with SHA-1
%signtool% sign /f %certfile% /p %certpass% /t http://timestamp.comodoca.com/authenticode %1
timeout /T 3
echo. & echo Signing with SHA-256
%signtool% sign /f %certfile% /p %certpass% /as /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 %1
@PAUSE
Run Code Online (Sandbox Code Playgroud)