sublime text启动报“证书无效”主因是内置cacert.pem过期或系统时间误差超5分钟,需手动下载最新证书覆盖packages/package control/certifi/cacert.pem并校准时间。

Sublime Text 启动就报“证书无效或已过期”,Package Control 加载失败、插件装不上——根本不是软件坏了,而是 HTTPS 验证链断了。核心问题在 cacert.pem 过期或系统时间不准,90% 的情况靠替换证书文件就能解决,不用关验证、不改 hosts、不重装。
为什么 cacert.pem 会失效
Sublime Text(尤其是 ST4)内置的 Python 不读系统证书库,而是硬依赖 Package Control 自带的 cacert.pem 文件。这个文件来自 certifi 包,但 Sublime 不自动更新它。2026 年当前主流根证书(如 ISRG Root X1、DST Root CA X3 替代链)已迭代多次,旧版 cacert.pem 缺少新根,导致访问 packagecontrol.io 或插件源时 TLS 握手失败。
常见表现:
- 控制台刷出
SSL: CERTIFICATE_VERIFY_FAILED - 菜单里看不到
Package Control: Install Package - 手动执行
import urllib.request在控制台也会报错
注意:Preferences → Browse Packages… 打开的目录里,Packages/Package Control/certifi/ 这个路径在 ST4 中默认不存在,不能指望它“天然就有”。
手动替换 cacert.pem 的完整步骤
这是最稳定、最安全的修复方式,绕过所有代理和系统证书干扰。
操作要点:
- 关闭 Sublime Text 全进程(右键任务栏图标选 Exit,macOS Dock 右键 Quit)
- 进入
Packages/Package Control/certifi/目录:如果该目录不存在,**手动创建**(先建Package Control,再进里面建certifi) - 从可信源下载最新证书:访问
https://www.php.cn/link/5fe4dadcdb001d8566cd20e6d8a20251,保存为cacert.pem(确保后缀是 .pem,不是 .pem.txt) - 把下载的文件直接覆盖进刚建好的
certifi/目录 - 确认用户配置中
"ssl_verification": true(默认就是 true,不用改) - 重启 Sublime Text
验证是否生效:打开控制台,输入 import ssl; print(ssl.get_default_verify_paths()),输出里应包含你刚放进去的路径;再试 Package Control: Install Package,列表能加载出来即成功。
系统时间不准也会触发同样报错
SSL 证书验证对时间极其敏感,误差超过 ±5 分钟就会直接拒绝握手。这不是“可能出问题”,而是协议强制行为。
检查与修复方法:
- Windows:设置 → 时间和语言 → 日期和时间 → 开启“自动设置时间”和“自动设置时区”
- macOS:系统设置 → 通用 → 日期与时间 → 勾选“自动设置日期与时间”
- Linux:运行
sudo timedatectl set-ntp true - 重启后,在控制台执行
import time; print(time.ctime())看是否和网络时间一致
别跳过这步——哪怕你刚校准过,某些虚拟机、双系统或企业域控环境仍会悄悄漂移。
别碰 "ssl_verification": false 和 hosts 屏蔽
临时关掉 SSL 验证看似立竿见影,但它会让所有 HTTPS 请求裸奔,中间人攻击风险真实存在,尤其在公司网络或公共 Wi-Fi 下。而往 hosts 里加 127.0.0.1 packagecontrol.io 这类操作,本质是制造 DNS 污染,反而会让 ST4 的离线签名校验逻辑卡住,出现“Invalid license”等连带问题。
真正需要警惕的是:证书路径写错、文件权限被系统拦截(尤其 macOS Gatekeeper 对非 App Store 下载的 Sublime 有额外限制)、或者用文本编辑器保存 cacert.pem 时用了 UTF-8 BOM —— 这些细节比选哪个镜像源更关键。











