InstallShield使用EV代码+硬件令牌对代码进行签名

时间:2017-07-11 14:19:38

标签: installshield code-signing-certificate

我们需要通过带有硬件令牌的EV代码通过InstallShield 2013 express签署我们的安装,但是无法导出私钥证书文件,因此唯一的方法是使用DigiCertUtil工具手动签署最终的exe文件,但是这不是解决方案,因为当安装程序调用msi文件时,Windows仍会弹出未知发布者,是否有人在此之前解决此问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

我花了一天的时间来弄清楚如何实现这一目标,但我终于设法让它在虚拟项目上工作。

设定:

我们的想法是从InstallShield的PrecompressionPostbuild事件中运行批处理命令。 .msi Precompression事件中签名,设置可执行文件在Postbuild事件中签名。

第1步 - 启用批代码签名

  • 按照Digicert here的说明进行操作。其他供应商可能有相同的说明。
  • 确保提取正确的证书Thumbprint,并将其用作Signtool的参数。即使您的计算机上没有安装其他证书,我也建议您这样做

第2步 - 准备InstallShield项目

  • " Path Variables"添加以下值:
    • SignToolFolder - signtool.exe所在的路径
    • CertificateThumbprint - 步骤1中提取的证书指纹
  • 在"发布"下,选择您的发布,然后转到"事件"标签。
  • 预压缩事件中写入(用您的msi&name;和路径替换Test.msi和路径​​): cmd /c "<SignToolFolder>\signtool.exe" sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /sha1 <CertificateThumbprint> <ISReleasePath>\<ISProductConfigName>\<ISReleaseName>\DiskImages\DISK1\Test.msi
  • Postbuild Event 中写道:cmd /c "<SignToolFolder>\signtool.exe" sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /sha1 <CertificateThumbprint> <ISReleasePath>\<ISProductConfigName>\<ISReleaseName>\DiskImages\DISK1\setup.exe。再次,根据需要更改setup.exe路径和名称

<强>说明

  • 奇怪的是,使用<Var>访问路径变量,而不是像常规Windows命令行那样访问%Var%
  • 如果您必须签署安装内容,则无法使用此功能。如果需要 - 在运行IS之前在外部签名
  • 除非您喜欢花费无数时间来打击糟糕的软件,不要在项目名称/路径中包含空格
  • 切换到Wix:)