可以使用SHA1和SHA256证书对安装程序和卸载程序进行双重签名吗?

12

在 Inno Setup 中,是否可以同时使用 sha1 和 sha256 签名卸载程序和安装程序?

我知道可以通过命令行工具同时使用两个证书来为可执行文件签名,但想知道是否可以通过 Inno 中的 SignTool 实现。


2
为什么不可能呢?您可以将批处理文件作为您的signtool,该文件调用signtool.exe两次。 - Wosi
2个回答

11

自动回答...

是的,这是可能的。如@Wosi所建议的,您可以编写一个批处理文件,然后添加$f参数进行调用。

示例批处理文件(signtool.bat):

@echo off

"PATH_TO_SIGNTOOL\signtool.exe" sign /v /du "COMPANY_NAME" /fd sha1 /t "http://timestamp.verisign.com/scripts/timstamp.dll" /f "sha1_cert.pfx" /p PASSWORD %1

set SIGN_RESULT_1=%ERRORLEVEL%

"PATH_TO_SIGNTOOL\signtool.exe" sign /as /v /du "COMPANY_NAME" /fd sha256 /tr "http://timestamp.comodoca.com/rfc3161" /td sha256 /f "sha256_cert.pfx" /p PASSWORD %1

set SIGN_RESULT_2=%ERRORLEVEL%

set /a RESULT=%SIGN_RESULT_1%+%SIGN_RESULT_2%

if %RESULT% NEQ 0 (
   echo Warning! Signing failed with %SIGN_RESULT_1% for sh1 and %SIGN_RESULT_2% for sha256
   pause
   exit /B %RESULT%
) 

echo Signing succeeded
exit /B 0

在Inno Setup中,您可以调用signtool.bat $f,其中$f将传递给批处理文件的%1

为了实现与Windows XP的兼容性(对于sha1),需要删除/as,并使用/t替换/tr,去掉/td(因为它需要/tr)。

我将其留在这里,希望有人能够从中获益。


3
注意,虽然这个方法可行,但是自从 Inno Setup 5.5.8版本以来,你可以使用多个SignTool 指令,就像@TheArtTrooper的回答所示。 - Martin Prikryl
我遇到了一些编译错误 - 需要写全路径:c:\ ... \ signtool.bat $f - ViH

5
我是使用Inno Setup 5.5.9。我通过ISCC命令行编译脚本。我的安装脚本在[Setup]部分包含以下两行:
SignTool=sha1
SignTool=sha256

ISCC 命令的格式如下:

ISCC "/ssha1=signtool.exe /f <cert.pfx> /p <certpwd> /fd SHA1 /t <timestamp.url> /v $f" "/ssha256=signtool.exe /f <cert.pfx> /p <certpwd> /fd SHA256 /tr <timestamp.url> /td SHA256 /as /v $f" setup.iss

Inno Setup将与两个证书签署安装和卸载。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接