我多年来一直使用 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) ,但还是没有解决问题。