You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为Python应用创建安全证书?解决PyInstaller打包程序遭Windows智能屏提示不安全的问题

解决PyInstaller打包程序被Windows SmartScreen提示不安全的问题及代码签名指南

先聊聊你遇到的SmartScreen提示问题——这其实是Windows的安全机制在起作用,因为你的exe没有被微软信任的数字签名,属于“未知发布者”,所以它会默认警告用户。下面分两种场景给你解决方案:

一、快速解决当前提示问题

1. 临时绕过(仅适合自己使用)

如果只是你自己的电脑运行,每次弹出提示时,点击界面上的「更多信息」,然后选择「仍要运行」就能启动程序了。但这个方法只适合个人使用,没法解决分发时其他用户遇到的警告。

2. 提交程序到微软SmartScreen筛选器

微软提供了针对开发者的程序审核入口,你可以把打包好的exe提交给他们审核,通过后SmartScreen就会把你的程序标记为安全。步骤大概是:

  • 登录微软开发者账户(如果没有需要注册)
  • 找到SmartScreen提交页面,上传你的exe文件
  • 填写程序的基本信息(比如功能、用途)
  • 等待审核,一般几个工作日会有结果,审核通过后用户再运行就不会有警告了

3. 用可信代码签名证书签名(根本解决方案)

这是最彻底的办法,给你的exe加上权威CA颁发的签名后,Windows会直接信任它,SmartScreen也不会再提示。下面详细讲怎么获取和使用签名证书。

二、为Python应用创建安全证书(代码签名)

代码签名证书分两种类型,适合不同场景:

1. 自签名证书(仅用于测试)

如果你只是自己测试或者内部小范围使用,可以用Windows自带工具生成自签名证书,但这种证书不被微软信任,其他用户运行时还是会有提示,不过能解决一些基础的签名验证问题。
步骤如下:

  • 打开PowerShell(以管理员身份),运行命令生成证书:
    New-SelfSignedCertificate -DnsName "你的姓名/组织名" -CertStoreLocation "Cert:\CurrentUser\My" -Type CodeSigningCert
    
  • 从证书存储中导出这个证书为PFX格式(记得设置密码)
  • 使用微软的signtool工具签名你的exe:
    signtool sign /f 你的证书文件.pfx /p 证书密码 你的程序.exe
    
    signtool一般在Windows SDK里,你需要先安装Windows SDK才能使用)

2. 权威CA颁发的代码签名证书(解决分发问题)

如果要把程序分发给其他用户,必须购买权威CA(比如DigiCert、GlobalSign、Sectigo等)的代码签名证书。这些证书是被微软信任的,签名后的程序不会触发SmartScreen警告。

  • 购买流程:选择合适的CA,提交身份验证信息(个人开发者一般需要提供身份证、邮箱验证等;企业需要提供营业执照等),支付费用后获取证书。
  • 使用方法:拿到证书后,同样用signtool工具签名你的exe,命令和自签名的类似,只是用CA给你的证书文件即可。

额外注意事项

  • 如果你在PyInstaller打包时用了UPX压缩,建议先签名再压缩,或者在打包时禁用UPX(在spec文件里设置upx=False),因为UPX压缩可能会破坏签名。
  • 签名后的exe不要随意修改,否则签名会失效,需要重新签名。

内容的提问来源于stack exchange,提问作者Abhinav

火山引擎 最新活动