ssl: certificate_verify_failed 错误主因是 sublime text 内置 cacert.pem 过期缺 isrg root x1 等新根证书,或系统时间误差超 ±5 分钟;需手动替换证书、校准时间、切换 channel 镜像并全部重启生效。

SSL: CERTIFICATE_VERIFY_FAILED 是证书过期,不是网络问题
这个错误不是你连不上网,也不是 packagecontrol.io 挂了,而是 Sublime Text 内置 Python 用的 cacert.pem 太老——缺 ISRG Root X1 等 2024 年后广泛使用的根证书。系统时间误差超过 ±5 分钟也会触发同一报错,现象包括控制台刷屏、Package Control: Install Package 命令消失、或卡在 “Loading…”。
必须手动替换 Packages/Package Control/certifi/cacert.pem
别信“关掉 ssl_verification 就能用”,那等于裸奔;Sublime 也不会自动更新证书包。你得亲手换:
- 关闭 Sublime Text 全进程(Windows 右键任务栏图标选 Exit;macOS Dock 右键 Quit)
- 按
Preferences → Browse Packages…打开用户目录,进入Packages/Package Control/certifi/ - 如果该路径不存在,手动创建:
Packages/Package Control/→ 进入 → 新建文件夹certifi - 从 https://www.php.cn/link/1087e24f05bed232204689eaae45ab9d 下载最新
cacert.pem(注意后缀必须是.pem,不是.pem.txt) - 把下载的文件直接覆盖进刚建好的
certifi/目录 - 确认用户配置中
"ssl_verification": true(默认就是true,不用改) - 重启 Sublime,打开控制台执行
import ssl; print(ssl.get_default_verify_paths()),输出里应含你放进去的路径
channel 地址加载失败会导致“没反应”,不是报错
There are no packages available 这个提示,本质是 channels 地址根本没加载成功,而非插件源没了。原地址 https://packagecontrol.io/channel_v3.json 在国内多数打不开:
- 打开
Preferences → Package Settings → Package Control → Settings – User - 填入可用镜像:
{"channels": ["https://gitee.com/azl397985856/package_control_channel/raw/master/channel_v3.json"]} - 必须重启 Sublime,否则缓存仍走旧地址
- 浏览器粘贴这个 URL 能看到 JSON 内容才算生效;如果返回 404,说明镜像已失效,得换其他 Gitee 用户维护的 channel
系统时间不准或 macOS 钥匙串策略会静默破坏 TLS
误差超 5 分钟就直接拒连 HTTPS,哪怕证书新也没用:
- Windows:右键任务栏时间 → “调整日期/时间” → 开启“自动设置时间”
- macOS:进“系统设置 → 通用 → 日期与时间”并勾选“自动设置时间”
- macOS 用户额外检查钥匙串:搜索
ISRG Root X1或DigiCert,双击证书 → 展开“信任” → 将“使用此证书时”设为“始终信任” - 企业网络或杀软启用 HTTPS 解密时,
Connection reset by peer很可能是中间人劫持所致,换网络环境可快速验证
最常被忽略的是三者必须同时生效:时间校准、证书替换、channel 切换——缺一不可,且每步都依赖重启。不重启,所有改动只是写进了文件,Sublime 的 Python 进程压根没读它。











