WSL Ubuntu 22.04.3 LTS执行add-apt-repository遇CERTIFICATE_VERIFY_FAILED错误求助
WSL Ubuntu 22.04.3 LTS执行add-apt-repository遇CERTIFICATE_VERIFY_FAILED错误求助
嗨,我之前在公司网络下用WSL的时候也碰到过一模一样的问题——因为TLS拦截会替换掉目标站点的证书,而系统默认的CA信任库不认识这个拦截证书,所以add-apt-repository(它是基于Python写的)就会抛出证书验证失败的错误。先把你给出的错误栈整理完整些:
Traceback (most recent call last): File "/usr/bin/add-apt-repository", line 364, in <module> sys.exit(0 if addaptrepo.main() else 1) File "/usr/bin/add-apt-repository", line 347, in main shortcut = handler(source, **shortcut_params) File "/usr/lib/python3/dist-packages/softwareproperties/shortcuts.py", line 40, in shortcut_handler return handler(shortcut, **kwargs) File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 82, in __init__ if self.lpppa.publish_debug_symbols: File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 120, in lpppa self._lpppa = self.lpteam.getPPAByName(name=self.ppaname) # 后续核心错误为ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1006)
给你几个实用的解决办法,按安全程度排序:
方法一:导入拦截CA证书到系统信任库(最安全推荐)
这是从根源解决的办法,让系统信任你的TLS拦截证书:
- 先找公司IT要到你们网络的TLS拦截CA证书(一般是.pem或.crt格式,也可以从本地浏览器导出,注意选择PEM格式)
- 把证书复制到WSL的系统证书目录:
sudo cp your-intercept-cert.crt /usr/local/share/ca-certificates/ - 更新系统的CA信任缓存:
sudo update-ca-certificates
完成后再运行add-apt-repository,应该就能正常验证证书了。
方法二:临时跳过证书验证(仅应急使用,不安全)
如果只是临时需要执行操作,不想折腾证书,可以给Python设置环境变量跳过HTTPS证书验证——因为add-apt-repository会遵守这个Python环境变量:
- 执行命令前先设置变量,连带运行目标命令:
export PYTHONHTTPSVERIFY=0 && sudo add-apt-repository ppa:你的PPA地址 - 注意:这个操作会让当前会话里所有Python的HTTPS请求都跳过证书验证,有安全风险,用完记得取消:
unset PYTHONHTTPSVERIFY
方法三:配置APT的代理与证书(适用于需要代理的网络环境)
如果你的网络还需要代理才能访问外部,同时要给APT配置代理和信任证书:
- 创建APT的代理配置文件:
sudo nano /etc/apt/apt.conf.d/99proxy - 在文件里添加代理地址和证书路径(替换成你实际的代理地址和证书路径):
Acquire::http::Proxy "http://你的代理地址:端口/"; Acquire::https::Proxy "http://你的代理地址:端口/"; Acquire::https::CaInfo "/usr/local/share/ca-certificates/你的拦截证书.crt"; - 保存退出nano(按
Ctrl+O回车确认保存,再按Ctrl+X退出),然后更新APT缓存:sudo apt update
之后再运行add-apt-repository就会走代理并信任拦截证书了。
备注:内容来源于stack exchange,提问作者Enki
相关产品推荐
相关产品推荐

