如何为PyInstaller生成的便携exe文件签名以解决跨设备无法运行问题
Windows 下 PyInstaller 打包EXE签名分步操作指南
以下操作仅适用于小范围给熟人分发EXE的场景,如果需要对外给大量陌生用户分发,需要购买受公共信任的CA机构颁发的正规代码签名证书。
1. 准备签名工具
- 优先安装 Visual Studio 社区版,安装时勾选「使用C++的桌面开发」组件,安装完成后系统会自动配置好签名工具
signtool.exe的环境 - 也可以单独安装 Windows SDK,安装完成后
signtool.exe默认路径为C:\Program Files (x86)\Windows Kits\10\bin\<对应系统版本号>\x64\signtool.exe - 所有后续命令操作都需要用管理员权限打开「x64 Native Tools Command Prompt for VS」(VS开发者命令提示符)执行
2. 生成自签名根证书
- 在管理员权限的PowerShell中执行以下命令生成自签名根证书:
New-SelfSignedCertificate -Type Custom -Subject "CN=MyTestRootCA, O=Personal, C=CN" -KeyUsage DigitalSignature,CertSign -FriendlyName "MyTestRootCA" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -NotAfter (Get-Date).AddYears(10)
- 命令执行成功后会返回证书的SHA1指纹,复制保存这串指纹,后续步骤会用到
3. 导出证书文件
- 按下Win+R输入
certmgr.msc打开当前用户证书管理器,进入「当前用户 → 个人 → 证书」目录,找到名为MyTestRootCA的证书 - 右键点击证书选择「所有任务 → 导出」:
- 第一次导出选择「是,导出私钥」,格式选择PFX,设置自定义密码,保存为
myrootca.pfx到本地路径 - 第二次导出选择「不,不要导出私钥」,格式选择DER编码二进制X.509,保存为
myrootca.cer,该文件需要发给运行EXE的用户安装
- 第一次导出选择「是,导出私钥」,格式选择PFX,设置自定义密码,保存为
4. 签名EXE文件
- 回到管理员权限的VS开发者命令提示符,执行以下命令完成签名:
signtool sign /f 你的pfx文件完整路径 /p 你设置的pfx证书密码 /t http://timestamp.digicert.com /v 你要签名的EXE文件完整路径
- 命令返回「Successfully signed: xxx.exe」即为签名成功
5. 对方设备配置信任证书
- 把导出的
myrootca.cer发给运行EXE的用户,让用户双击打开证书,选择「安装证书」 - 存储位置选择「本地计算机」,下一步后选择「将所有证书都放入下列存储」,点击「浏览」选择「受信任的根证书颁发机构」,确认完成安装
- 安装完成后再运行签名后的EXE就不会出现未签名拦截问题
内容的提问来源于stack exchange,提问作者ilikerubikscubes
相关产品推荐
相关产品推荐

