Windows打包签名
签名概述
代码签名需要使用SSL证书(代码签名证书),申请SSL证书时需要审核、验证开发者的身份信息,例如身份证、驾驶证之类的。微软将颁发SSL证书的过程授权给了多家CA机构,这些机构会代替微软审核开发者的身份信息,并为其颁发SSL证书。经过SSL证书签名的程序会被操作系统和杀毒软件信任,因为拥有SSL证书的开发者,其身份都是经过验证的。也正是因为CA机构需要花费人力、物力去审核开发者的身份信息,因此SSL证书不会有免费的。
注:以上提到的SSL证书是代码签名证书,其主要作用是验证开发的身份,与域名SSL证书是不一样的;域名SSL证书更多的是加密网络数据,因此并不需要耗费太大精力去验证开发的身份信息。最后,如果CA机构滥发SSL证书,或没有严格审核开发者的身份信息,则可能会失去颁发SSL证书的权力。说白了,操作系统之所以会信任开发者发布的程序,是因为有CA为开发者做担保。
能够对exe程序代码进行签名的证书目前有两种:
普通证书:适用Win7,但在Win8和Win10上会有安全提示;
EV证书(推荐):适用于所有Windows平台,一般都是使用这个;
价格参见:https://www.trustauth.cn/code-signing
各种签名方式的区别:
无签名的EXE程序:可能会被杀毒软件或系统直接删除;
自签名的EXE程序:不会被直接删除,但安装时会有“未知开发者”的警告;
OV签名的EXE程序:安装会有警告,需要用户点击“信任”;“信任”的用户多了,警告就会消除,然后会达到与EV同样的效果;但每次签名的EXE程序都要在安装初期通过“信任”来积累信誉,从而消除警告;
EV签名的EXE程序:无任何警告、系统完全信任,可直接安装;但价格是OV的3倍左右。
项目初期推荐使用OV证书签名,因为其成本更低;OV签名的exe程序,需要几十到上百次的被下载,且持续几天到几周时间就能消除警告;
若用户是通过edge浏览器下载安装exe,则信誉积累的会更快,能更快消除警告。
若通过 Microsoft Store、GitHub Releases、SourceForge 等有声誉的平台发布exe,也能更容易、更快的消除警告。
注:2023年6月起微软要求软件都使用EV签名,自此OV签名的EXE被视为未签名;
配置
"win": {
"icon": "build/icons/icon.ico",
"target": [
{
"target": "nsis",
"arch": [
"x64",
"ia32"
]
}
],
"verifyUpdateCodeSignature": false,
"signingHashAlgorithms": [
"sha256",
"sha1"
],
"signDlls": true,
"rfc3161TimeStampServer": "http://timestamp.digicert.com",
"certificateFile": "xxx.pfx",
"certificatePassword": "xxxxxx"
},
主要参数说明:
'arch:代表需要打包的位数,win64代表打包64位的,ia32代表打包32位的,最好分开打包,因为一起打包的话最后出来的包是正常开发包的两倍。
'signingHashAlgorithms':代表加密的方式,一般分为'sha256'与'sha1'两种方式,都进行加密即可。
'rfc3161TimeStampServer':代表时间戳,一般使用'http://timestamp.digicert.com'来进行时间戳的覆盖即可
'certificateFile':证书的地址,必须位pfx格式(如何导出会在第二步的时候进行讲解)
'certificatePassword':证书的私钥密码,这个在配置证书的时候进行设置(第二步进行讲解)
详见:https://segmentfault.com/a/1190000011908324
https://blog.csdn.net/WoTrusCA/article/details/109736538