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
配置
"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