一、为什么需要打包和签名
开发完一个Electron应用后,直接扔给用户安装可能会遇到各种问题。比如,Windows系统会弹出“未知发布者”警告,macOS甚至直接阻止运行。这就像你网购时收到一个没有品牌、没有质检标签的商品,谁敢放心用?
打包就是把你的代码、依赖和资源整理成一个标准的安装包(如.exe、.dmg)。签名则是给这个安装包加上“防伪认证”,告诉系统和用户:“这软件是我开发的,没被篡改过”。
二、Electron打包工具选型
目前主流的选择是electron-builder,它支持多平台打包,还能自动处理签名流程。相比之下,electron-packager虽然轻量,但签名需要额外配置。
示例:安装electron-builder
# 在项目中安装electron-builder(技术栈:Node.js)
npm install electron-builder --save-dev
配置示例(package.json片段)
{
"build": {
"appId": "com.example.myapp",
"win": {
"target": "nsis",
"certificateFile": "./certs/my-cert.pfx",
"certificatePassword": "yourpassword"
},
"mac": {
"target": "dmg",
"identity": "Developer ID Application: Your Name (XXXXXXXXXX)"
}
}
}
注释说明:
appId:应用唯一标识,建议反向域名格式win/mac:平台特定配置certificateFile:Windows签名证书文件路径identity:macOS开发者ID(需提前申请)
三、获取签名证书
Windows平台
需要购买代码签名证书(如DigiCert、Sectigo)。流程:
- 生成CSR文件
- 向CA机构提交申请
- 审核通过后获取.pfx证书文件
OpenSSL生成CSR示例
# 生成私钥和CSR(技术栈:OpenSSL)
openssl req -newkey rsa:2048 -nodes -keyout private.key -out request.csr
注释:
-nodes:不加密私钥- 执行后会提示输入国家、公司等信息
macOS平台
需加入Apple开发者计划(年费$99),然后在Xcode中申请Developer ID Application证书。
四、完整打包签名实战
示例:完整打包命令
# 生成带签名的安装包(技术栈:Node.js)
electron-builder --win --mac --publish never
关键流程分解:
- 打包器会自动读取
package.json中的配置 - 对于Windows,会调用
signtool进行签名 - 对于macOS,使用
codesign命令
调试签名问题
如果签名失败,可以手动验证:
# macOS验证签名
codesign -dv --verbose=4 /path/to/your.app
# Windows验证签名
signtool verify /v /pa your_installer.exe
五、常见坑与解决方案
时间戳服务失效
签名时需要添加时间戳,否则证书过期后签名会失效。推荐使用http://timestamp.digicert.com修正配置示例
"win": { "signingHashAlgorithms": ["sha256"], "rfc3161TimeStampServer": "http://timestamp.digicert.com" }macOS公证(Notarization)
从macOS 10.15开始,还需将应用提交Apple公证:electron-builder --mac --publish never --config.afterSign=./notarize.js需要编写
notarize.js脚本处理Apple ID和密码。
六、安全认证的深层逻辑
签名不仅仅是“加个标签”,它实际做了三件事:
- 完整性校验 - 通过哈希值确保文件未被修改
- 身份验证 - 证书链追溯到受信任的CA机构
- 抗抵赖 - 开发者不能否认自己发布的版本
证书链示意图
你的证书 → 中级CA证书 → 根CA证书
七、进阶:自动化CI/CD流程
在GitHub Actions中实现自动签名:
# .github/workflows/release.yml示例
jobs:
release:
steps:
- uses: actions/checkout@v2
- run: npm install
- run: electron-builder --win --mac --publish never
env:
CSC_LINK: ${{ secrets.CSC_LINK }} # Base64编码的.pfx文件
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
八、技术方案对比
| 方案 | 优点 | 缺点 |
|---|---|---|
| 自签名证书 | 免费 | 不被系统信任 |
| 商业证书 | 全平台兼容 | 年费$100+ |
| Apple公证 | 必需流程 | 需等待10-30分钟 |
九、总结与决策建议
- 个人项目:Windows可用自签名证书+禁用安全警告,macOS建议走正规流程
- 企业项目:必须购买商业证书,预算应包括每年的续费成本
- 紧急发布:可先打包未签名版本供内测,同时申请证书
最后提醒:永远保留证书备份!丢失证书意味着所有已发布版本都会变成“不可信”。
评论