Windows桌面端开发设置签名证书及Innosetup打包自动签名

概述

找到一个带有数字签名的程序的的exe文件,右键属性(注意快捷方式上右键不行)

image-20220208091408477

我们可以看到有数字签名一栏,如果没有签名的就没有该选项卡,那么程序在安装或运行的时候就有可能被阻拦,那么怎么设置数字签名呢?

搜索makecert.exe的位置

我的是在下面的这个目录下

C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86

添加到环境变量

如果没有可以下载 Windows SDK for Windows

注意

一定要根据系统下载,否则会安装失败。

Windows 10

https://download.microsoft.com/download/E/1/F/E1F1E61E-F3C6-4420-A916-FB7C47FBC89E/standalonesdk/sdksetup.exe

Windows 7

https://www.microsoft.com/en-us/download/confirmation.aspx?id=8279

步骤

这种方式生成的数字签名,其实意义不大,虽然程序确实是添加了数字签名,但是数字签名是不受信任的状态,最好还是从微软签发。这里生成只是方便和InnoSetup进行测试。

购买的话可以看:https://www.wosign.com/price_code.htm

image-20220208164714525

创建 X.509 证书

键入命令:

1
2
3
4
cd D:\Tools
mkdir cert
cd cert
Makecert -sv xhkj_signature.pvk -r -n "CN=河南星火燎原软件科技有限公司" xhkj_signature.cer

记住这里输入的密码,接下来会用到。

输出Succeeded即为成功。

创建发行者证书

键入命令:

1
Cert2spc xhkj_signature.cer xhkj_signature.spc

输出Succeeded即为成功。

导出pfx证书文件

键入命令:

1
pvk2pfx -pvk xhkj_signature.pvk -pi 密码 -spc xhkj_signature.spc -pfx xhkj_signature.pfx -f

其中,密码为刚刚你设置的密码。

什么都不输出,即为成功。

软件签名

键入命令:

1
signtool sign /f xhkj_signature.pfx /p 密码 "D:\程序打包\星火智慧校园-测试版\星火智慧校园 v3.1.8.exe"

主要要写exe的全路径。

其中,密码为刚刚你设置的密码。

加盖时间戳

键入命令:

1
signtool timestamp /t http://timestamp.digicert.com "D:\程序打包\星火智慧校园-测试版\星火智慧校园 v3.1.8.exe"

除了上面 Digicert 那个网址,还有如下网址可以作为替换:

Innosetup自动签名

工具=>配置签名工具 设置完如下

1
mysigntool=signtool.exe sign /v  /f D:\Tools\cert\xhkj_signature.pfx /p 证书密码 /t http://timestamp.digicert.com $f

注意 其中证书密码要改成自己的实际密码

Setup下添加两行配置

1
2
3
[Setup]
SignTool=mysigntool
SignedUninstaller=yes

注意

这样会对打包之后的exe文件以及打包中卸载对应的exe进行数字签名,程序本身的exe是不会签名的。

要想程序本身的exe也签名就要在Source中对应可执行文件的最后添加signonce,结果如下:

1
2
3
[Files]
Source: "{#MySourcePath}{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion signonce
Source: "{#MySourcePath}*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs