InnoSetup - 代码签名证书

41

我刚从 Comodo 购买了代码签名证书。 我建立了一个小的 MS Access 数据库,想要使用 Inno Setup Installer 部署它。 脚本可以正常运行,但我完全不懂代码签名。

我该如何对我的安装文件进行签名? 我需要外部软件来签名证书吗?还是可以在 Inno Setup 中完成?

我已经尝试搜索类似问题的答案,但没有一个能够向我展示我需要开始以及如何进行这一步骤。


1
@TLama的链接已失效(博客),这个可以用:http://support.ksoftware.net/support/solutions/articles/17169-how-do-i-automate-code-signing-with-innosetup-and-ksign。 - SlowLearner
@mtn 你可以帮忙检查一下这个问题吗? https://dev59.com/jnYOtIcB2Jgan1zn7VD- - Prageeth Liyanage
3个回答

44
你所要做的很简单,试着跟着以下步骤:
1. 打开 Inno Setup 并选择 "Tools-> Configure Sign Tools"The sign tool dialog
2. 点击 "Add.." 并给它一个名称,我们称之为 MsSign,因为我正在使用来自 Microsoft 的 signtool.exe,现在你应该有类似于这样的东西 enter image description here
3. 然后会要求你输入用于签名的工具的命令行,因为我正在使用 signtool.exe,所以我将使用以下命令行:

signtool.exe sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /a $p

请注意最后的$p,Inno Setup需要它...现在你应该有这个,注意我已经将signtool.exe的路径添加到我的路径变量中,并且我正在使用DigiCert的时间服务器来为我的签名加上时间戳。enter image description here 在脚本中,现在将以下代码添加到安装程序段落中:
SignTool=MsSign $f
这一行告诉编译器使用代码签名,它将使用我称之为MsSign的变量,并签署由安装程序生成的输出。
它应该看起来像这样enter image description here 当您查看生成的EXE文件时,您将看到数字签名enter image description here 现在这对我有效,因为我已经准备好了我的签名存储,以便命令行可以获取签名,而且我只有一个代码签名,所以我不需要给它命名,您的参数可能与我的不同,这没关系,只要最终您的安装程序工作并且您的代码被签名即可。

希望能够帮到您,记得在变量中使用$p


1
signtool随Windows驱动程序安装一起提供,详见第2点链接。安装完成后,您可以将其位置添加到配置文件的“Path”设置中,然后注销并重新登录,即可直接调用它。如果无法调用,请按照步骤3中的方法添加路径。 - Walter Verhoeven
1
实际上,您不需要将signtool.exe添加到PATH中。由于它是一个没有依赖关系的小型可执行文件(410 KB),因此您可以选择将其复制到构建环境中需要找到它的任何位置,并且它将像在Windows上安装的位置运行一样正常工作。 - Ulysses Alves
@WalterVerhoeven 请您看一下这个问题 https://dev59.com/jnYOtIcB2Jgan1zn7VD- - Prageeth Liyanage
@PrageethLiyanage,我的回答有帮到你吗? - Walter Verhoeven
1
@unobatbayar 这实际上取决于你所使用的技术和部分。你可以编写一个PowerShell文件监视器脚本,并对给定目录中的任何二进制文件进行签名,这样无论你使用什么方法或工具都能解决问题。 - Walter Verhoeven
显示剩余2条评论

23

要签署可执行文件(由Inno Setup生成的安装程序),只需创建一个批处理文件(.bat),并将以下内容放入其中:

"c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\signtool.exe" sign /f Installer_Wizard_Code_Signing_Certificate.pfx /p password123 /t http://timestamp.verisign.com/scripts/timstamp.dll MySetupFile.exe

在这里:

"c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\signtool.exe" 是微软签名工具的路径(Microsoft SDK 的一部分)

Installer_Wizard_Code_Signing_Certificate.pfx 是您的证书

password123 是您的证书密码

MySetupFile.exe 是您想要签名的安装程序文件

将所有文件放在一个目录中(证书、待签名的安装程序和批处理文件),然后运行批处理文件。 Signtool 使用证书对文件进行签名,并检查其有效性是否符合官方服务器的要求。

(即使您使用 Comodo 证书,也可以使用 http://timestamp.verisign.com/scripts/timstamp.dll 服务器。这没有关系。)


12
为什么不建议 Inno Setup 支持内部签名?这是第三次提到了,这里有一篇教程,介绍了如何实现内部签名。该教程来自于 Comodo 的经销商,所以他们应该知道自己在说什么。 - TLama
2
@TLama你的答案解决了我的问题。我按照指示进行操作,编译过程中没有出现任何错误。感谢所有人以及Ksign背后的团队...它使一切变得如此简单。 - mtn
3
http://revolution.screenstepslive.com/s/revolution/m/10695/l/95041-signing-installers-you-create-with-inno-setup - Michael Fitchett
6
@TLama提到的链接已更改:http://certhelp.ksoftware.net/support/solutions/articles/17169-how-do-i-automate-code-signing-with-innosetup-and-ksign- - bvanderw
2
我的教程是独立的,不需要任何第三方软件。(我尝试了TLama的教程,但对我没有用,所以我编写了自定义解决方案)。 - Slappy
显示剩余5条评论

2

如果您还没有将 signtool.exe 添加到系统路径变量中,在下载和安装了来自 Microsoft 的 signtool.exe 后,将其完整路径添加到签名工具的命令中:

这是上一个回答中第三步的补充。

原始答案:Original Answer

D:\GUI\signtool.exe sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /a $p

enter image description here


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