在其他电脑运行PyInstaller生成的EXE时出现SSL证书验证失败错误
问题分析与解决方案
核心原因
这个报错本质是目标电脑的系统根证书存储中缺少对应SSL证书的颁发机构证书,哪怕两台电脑配置看起来一致,也可能存在这些差异:
- 其中一台电脑此前访问过目标XML-RPC服务,浏览器或其他应用已自动安装了所需根证书;
- 两台电脑的系统根证书更新不同步,比如一台安装了最新的根证书补丁,另一台未更新;
- 其中一台电脑的管理员手动导入过该服务的根证书,另一台没有;
- 部分安全软件(杀毒、防火墙)拦截了证书验证流程,或修改了系统证书存储。
解决办法
1. 手动导入根证书
找到目标XML-RPC服务SSL证书对应的根颁发机构证书,在报错的电脑上操作:
- 打开控制面板 → 管理工具 → 证书管理器;
- 定位到「受信任的根证书颁发机构」,右键选择「所有任务」→「导入」;
- 按照向导完成根证书文件(.cer或.pem格式)的导入。
2. 打包时将证书嵌入程序
如果不想依赖目标电脑的证书存储,可把需要的证书打包进EXE:
- 将根证书文件(比如
ca_cert.pem)放在项目目录下; - 修改
connect.py中建立连接的代码,指定证书路径:
import xmlrpc.client client = xmlrpc.client.ServerProxy( "https://你的服务地址/", ssl_ca_certs="./ca_cert.pem" )
- 用PyInstaller打包时,通过
--add-data参数将证书纳入打包范围:
pyinstaller --add-data "ca_cert.pem;." main.py
(Windows系统用;分隔路径,Linux/macOS用:)
3. 临时跳过证书验证(仅测试环境可用)
如果是内部测试场景、安全性要求极低,可临时关闭证书验证,但生产环境绝对禁止使用:
import xmlrpc.client import ssl context = ssl._create_unverified_context() client = xmlrpc.client.ServerProxy( "https://你的服务地址/", context=context )
内容的提问来源于stack exchange,提问作者BartTechne
相关产品推荐
相关产品推荐

