问题描述: Qt自制了一款exe安装包,放在互联网上供别人下载,但下载后运行,提示:
经查安装包需要进行数字签名。
数字证书的目的就是防止软件被篡改,表明软件的签发日期。对于我们来说最重要的防止被当病毒查杀。所以这就需要受信任的机构颁发的证书。
主要使用的工具:signTool.exe,命令行运行,但不能cmd,需要“VS开发人员命令提示”,且以管理员运行。
步骤:
1、创建 X.509 证书
工具:Makecert.exe(证书创建工具)
证书创建工具生成仅用于测试目的的 X.509 证书。
它创建用于数字签名的公钥和私钥对,并将其存储在证书文件中。
此工具还将密钥对与指定发行者的名称相关联,并创建一个 X.509 证书,该证书将用户指定的名称绑定到密钥对的公共部分。
使用这个命令行创建证书:
Makecert -sv abc.pvk -r -n “CN=XXX公司” abc.cer
-sv abc.pvk创建一个密钥文件,来保存私钥,创建时需要输入一个密码。
2、创建发行者证书
工具:Cert2spc.exe(软件发行者证书测试工具)的介绍:
发行者证书测试工具通过一个或多个 X.509 证书创建发行者证书 (SPC)。
Cert2spc.exe 仅用于测试目的。
可以从证书颁发机构(如 VeriSign 或 Thawte)获得有效的 SPC。
使用下面的命令行创建发行者证书:
Cert2spc abc.cer abc.spc
使用pvk2pfx.exe工具从pvk文件中导出pfx文件:
pvk2pfx -pvk abc.pvk -pi mypassword -spc abc.spc -pfx abc.pfx -f
把"mypassword "密码替换为第二步时输入的密码
使用signtool.exe进行签名,MSDN对SignTool.exe(签名工具)的介绍:
签名工具是一个命令行工具,用于对文件进行数字签名,验证文件和时间戳文件中的签名。
如果要对abc.exe进行签名:
signtool sign /f abc.pfx /p mypassword abc.exe
把其中的密码替换为自己的密码。
可以使用WoSign提供的时间戳服务:http://timestamp.wosign.com/timestamp
signtool timestamp /t http://timestamp.verisign.com/scripts/timstamp.dll abc.exe
///
实操:
C:\Users\lc\Desktop\Output\1111>Makecert -sv test.pvk -r -n "CN=lc" test.cer
Succeeded
C:\Users\lc\Desktop\Output\1111>Cert2spc test.cer test.spc
Succeeded
C:\Users\lc\Desktop\Output\1111>pvk2pfx -pvk test.pvk -pi 1234 -spc test.spc -pfx test.pfx -f
C:\Users\lc\Desktop\Output\1111>signtool sign /f test.pfx /p 1234 IosMobileRecovery.exe
Done Adding Additional Store
Successfully signed: IosMobileRecovery.exe
C:\Users\lc\Desktop\Output\1111>signtool timestamp /t http://timestamp.verisign.com/scripts/timstamp.dll IosMobileRecovery.exe
Successfully timestamped: IosMobileRecovery.exe