🐾 个人主页 🐾

阿松爱睡觉,横竖醒不来

🏅你可以不屠龙,但不能不磨剑🗡

目录

一、前言二、签名工具三、签名流程四、InnoSetup 配置签名工具五、签名和未签名对比六、时间戳网址七、拓展

一、前言

安装包在发布至应用市场的时候需要进行审核,部分审核会要求安装包需要带数字签名才允予通过,这时候需要使用签名工具对安装包进行签名,相当于给安装包打一个绿色、人畜无害的标签,让其可以更便捷的通过各项审查,包括但不限于人工审查、系统审查。

二、签名工具

Windows系统中自带一个签名工具,一般情况下可以在下面的地址中找到

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

找到之后直接在该文件夹下的控制台操作(管理员身份运行)或者找出用到的工具复制另外一个文件进行操作

签名过程相关工具:

cert2spc.exemakecert.exesigncode.exe :签名向导工具,可视化的(系统一般不带,没有的话需要自行检索资源)signtool.exe :命令行签名,一般这个够用了certmgr.exe

三、签名流程

提示:命令中的这些文件名是可以自定义更换的,可以按照自己的需求自行更改

创建X.509证书,cert.pvk和cert.cer两个证书文件

Makecert -sv cert.pvk -r -n “CN=阿松爱睡觉” cert.cer

CN:组织或公司的称

makecert.exe -sv cert.pvk -ss CertName -n “CN=ASong,E=Email,C=China,S=Shenzhen” -r cert.cer

CN:组织或公司名称E:电子邮箱C:国家S:省份

回车之后会弹出一个让你输入密码的窗口,这里的密码需要记住后面还要反复输入,我这里就简单1234 再次确认密码

成功之后会显示 Succeeded

下一步创建发行者证书。就是把cert.cer转换为cert.spc PKCS#7证书

Cert2spc cert.cer cert.spc

成功之后会显示 Succeeded

解决cert.spc证书不受信任

certmgr.exe -add -c cert.spc -s -r localMachine root

成功之后会显示 CertMgr Succeeded

失败会显示 CertMgr Failed ,如果不成功需要管理员身份运行命令行

注意命令行头部,上面是普通用户身份,下面的是管理员身份,注意辨别!

完成之后证书就会受计算机信任,这里可以看下不受信任(左)和受信任(右)的证书对比:

你说上面的图片在哪里看? 直接双击最开始创建cert.cer即可,或者双击cert.spc,然后剥洋葱找到证书,双击里面的文件打开就看可以看到(其实看的也是cert.cer)

插播一条消息! 上面这些操作是创建证书,下面才是签名。签名有两种方式:一个是直接命令行,一个是签名向导工具 下面紧接着就是命令行进行签名,就是使用signtool.exe, 如果有igncode.exe的可以直接跳过,转到使用向导签名教程

命令行创建 使用命令行签名的话需要先导出pfx证书,可以理解为将cert.pvk和cert.spc合并为cert.pfx,为后续签名使用

导出pfx证书文件。注意:1234是第一步输入的密码

pvk2pfx -pvk cert.pvk -pi 1234 -spc cert.spc -pfx cert.pfx -f

成功之后不显示任何字符

软件签名。即给"D:\XObject\Object\Demo\启动.exe"文件签署cert.pfx安全证书

signtool sign /f cert.pfx /p 1234 “D:\XObject\Object\Demo\启动.exe”

成功会显示图中字样

加盖时间戳(也可不加盖)。即给"D:\XObject\Object\Demo\启动.exe"文件加盖一个时间戳 时间戳是使用的网址,网址在文章末,列举了好几个,如果有失效的可以换其他的。

signtool timestamp /t http://timestamp.comodoca.com/authenticode “D:\XObject\Object\Demo\启动.exe”

成功会显示Successfully timestamped: D:\XObject\Object\\.exe

O的K,到这里就完成了,结束了,可以审核发布了!

签名向导工具创建 使用签名向导工具签名,双击signcode.exe即可

选择对哪个文件进行数字签名? 就是程序的启动文件,比如:D:\XObject\Object\Demo\启动.exe,unity的话,就是你构建Build出来的项目名.exe 这里选自定义,然后下一页

选择前面生成的cert.spc证书(不用焦虑,只有一个,无脑选就行),选完下一页

选择前面生成的cert.pvk证书(不用焦虑,这玩意也只有一个,无脑选就行),选完下一页 输入前面第一步的时候设置的密码,我设的1234,输完点OK。(第一步选None没输密码的,应该没有这一步) 直接默认sha1,下一页 默认,下一页 可默认

描述:简单描述程序(不用管)Web位置:你的程序官网网址(没有就不用管,有官网也可以不用管) 可不加盖,盖的话勾选,然后填入时间戳网址即可,不盖的话不勾选直接下一页就行 签名完成(点击完成还要再输入一次密码) 最后输入一次密码1234

OK了,可以去提交审核发布了。

四、InnoSetup 配置签名工具

如果你用的是InnoSetup打包工具,可以配置一下签名工具,这样打包出来的安装向导就会自动含有数字签名,不需要在进行上面的步骤

配置流程如下:

选择工具,点击配置签名工具©…

点击添加

输入签名工具名称。随便自定义即可,或者signtool、mysigntool都行,输入完点击确定

输入以下命令,这个命令就相当于上面步骤三中命令行签名部分的最后两步的合集“软件签名”+“加盖时间戳”(感兴趣可以自行对比一下)。注意更换密码,核对pfx证书以及该证书对应设置的密码

signtool.exe sign /v /f D:\XObject\Inno\cert\cert.pfx /p 1234 /t http://timestamp.comodoca.com/authenticode $f

如果前面走的签名向导签名的,这里需要额外生成一下cert.pfx证书,命令见命令行签名部分的第一步pvk2pfx -pvk cert.pvk -pi 1234 -spc cert.spc -pfx cert.pfx -f。

确定之后可以看到已经配置成功了,点击确定即可。

[Setup]区段命令配置

[Setup]

SignTool=AsongSignTool

SignedUninstaller=yes

前面做的这些配置是给InnoSetup工具打包出来的安装向导配置数字签名的,如果想要给程序本身也签署上安全证书,还需要做区段命令配置:在[File]区段的Source中指定安装源文件最后后面加上signonce 即可为程序本身签署安全证书

[Files]

Source: "{#MySourcePath}{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion signonce

Source: "{#MySourcePath}*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

五、签名和未签名对比

上面的步骤做完之后,可以发现目标文件属性中多了一个数字签名的选项。 配置了签名工具的Inno打出的安装向导文件的属性也多了数字签名的选项。

六、时间戳网址

http://timestamp.comodoca.com/authenticodehttp://timestamp.globalsign.com/scripts/timestamp.dllhttp://timestamp.digicert.comhttp://timestamp.entrust.net/TSS/RFC3161sha2TShttp://timestamp.globalsign.comhttp://rfc3161timestamp.globalsign.com/advancedhttp://sha256timestamp.ws.symantec.com/sha256/timestamphttp://timestamp.wosign.com/rfc3161http://timestamp.comodoca.com/rfc3161http://tsa.starfieldtech.comhttp://tsa.swisssign.nethttp://timestamp.entrust.net/TSS/AuthenticodeTShttp://timestamp.globalsign.com/scripts/timstamp.dllhttp://timestamp.verisign.com/scripts/timstamp.dllhttp://timestamp.wosign.com/timestamphttp://timestamp.comodoca.com/authenticode

七、拓展

让计算机信任证书的脚本,点击之后可以自动将证书安装到“受信任的根证书颁发机构”存储区。 新建一个文件config.bat,使用文本编辑器打开,键入以下内容保存即可。 使用的时候直接双击运行即可。

@echo off

mshta vbscript:msgbox("请关闭一切杀毒软件并授予Windows命令处理程序管理员权限,即允许Windows命令处理程序具对您的设备进行更改,否则操作可能会失败!",64+4096,"证书操作")(window.close)

%1 %2

mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto runas","goto notadmin","runas",1)(window.close)&&exit

:runas

cd /d %~dp0

setlocal enabledelayedexpansion

certmgr.exe -add -c root.spc -s -r localMachine root>>%temp%\config.tmp

for /f "delims=" %%a in (%temp%\config.tmp) do (set var=%%a)

echo %var% | find "CertMgr Failed" > NUL && goto no

echo %var% | find "CertMgr Succeeded" > NUL && goto yes

del /f /q %temp%\config.tmp

:no

del /f /s %temp%\your.app.name.key

cls

mshta vbscript:msgbox("证书导入失败,请尝试重新关闭杀毒软件并以管理员权限运行此脚本!",64+4096,"证书操作")(window.close)

exit

:yes

echo CertMgr Succeeded>>%temp%\your.app.name.key

mshta vbscript:msgbox("证书导入成功!",64+4096,"证书操作")(window.close)

exit