根本原因是Sublime Text内置旧版Python不维护证书信任链,硬编码过期证书导致无法验证Let’s Encrypt新签域名;真解法是手动替换Package Control中的ca_certs.py为最新cacert.pem内容。

为什么 Sublime Text 安装插件时总报 SSL: CERTIFICATE_VERIFY_FAILED
根本原因不是你网络差,而是 Sublime Text 自带的 Python 环境(2.6/3.3 旧版本)不维护证书信任链,certifi 包过期、系统 CA 仓库它压根不读。它硬编码了一套老证书,遇到 Let’s Encrypt 新签的域名(比如 packagecontrol.io)就直接跪。
手动替换 Sublime 内置的 certifi 证书包(最稳方案)
别信“关代理”“换源”“改设置”那些临时招——它们治标不治本,重启或升级后大概率复发。真解法是让 Sublime 用上新版证书:
- 打开 Sublime Text →
Preferences → Browse Packages…,进入Packages目录 - 回到上一级,进
Installed Packages,找到Package Control.sublime-package(是个 zip 文件) - 用解压工具(如 7-Zip / Archive Utility)打开它,定位到
package_control/ca_certs.py - 删掉这个文件,替换成最新
certifi的 PEM 内容:访问 https://www.php.cn/link/5fe4dadcdb001d8566cd20e6d8a20251,全选复制,粘贴进新建的ca_certs.py,开头加certificates = """,结尾加""" - 保存并重新打包成
.sublime-package(注意压缩格式选 ZIP,不要存档后缀名出错)
Package Control 设置里哪些参数会加剧 SSL 错误
几个看着合理、实则危险的配置项:
-
"http_timeout": 30—— 超时设太短,TLS 握手没完成就被砍,报错变Connection refused或timed out,和 SSL 错误混在一起难排查 -
"channels"列表里混了 HTTP 镜像源(比如某些国内“加速源”)——它们中间人转发,证书链不完整,Sublime 会直接拒绝连接 -
"ssl_verify": false—— 关闭验证看似能过,但后续所有 HTTPS 插件下载都走明文,Package Control本身会拒绝加载非 HTTPS 渠道,反而导致插件列表空白
Mac / Windows 下路径和权限容易卡在哪
替换证书文件时,90% 的失败来自路径或权限没对上:
- macOS:
Installed Packages在~/Library/Application Support/Sublime Text/Installed Packages/,不是~/Library/Sublime Text/(后者不存在) - Windows:路径含空格或中文用户名时,解压工具可能自动截断,务必用支持长路径的工具(如 7-Zip),且确认最终
.sublime-package文件时间戳已更新 - Linux:如果用 snap 安装的 Sublime,它被沙盒隔离,
Installed Packages实际在/var/lib/snapd/hostfs/home/xxx/...,普通用户无法写入 —— 此时必须改用 tarball 版而非 snap 版
证书替换不是一劳永逸的事,Sublime 小版本更新会覆盖 Installed Packages 目录,下次看到插件列表空了,先检查 Package Control.sublime-package 时间戳有没有被重置。










