Ubuntu18环境下go get下载Go依赖报x509证书未知权威错误求助
Ubuntu 18 环境下Go拉取依赖报x509证书错误的处理方案
首先明确报错本质:Go 1.13及以上版本默认开启模块代理模式,未自定义GOPROXY时会优先请求官方模块地址proxy.golang.org拉取依赖元数据,当前系统证书链无法校验该地址的HTTPS证书合法性时就会触发报错;且常规更新ca-certificates包无法解决的场景下,可按以下优先级操作:
最高效解法:替换默认Go模块代理
该方案可直接绕开当前对proxy.golang.org的证书校验故障,不需要调整本地证书配置,操作步骤:
- 打开终端依次执行配置命令,固定模块模式,替换默认代理地址为国内可正常访问的模块源:
go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.cn,direct - 执行
go env查看输出,确认GOPROXY字段已显示为刚配置的地址,再重新运行拉取命令:go get github.com/go-sql-driver/mysql
如必须使用原官方代理:定位修复证书链路
如果网络规则不允许切换第三方模块代理,需要逐一定位证书校验失败的诱因:
- 排查HTTPS流量拦截问题:执行
curl -v https://proxy.golang.org,查看返回的证书颁发主体,如果是企业内网网关、本地防火墙的自签证书,说明单纯更新系统证书包无效,需要手动将拦截设备提供的根证书导入系统证书目录:- 将根证书文件放到
/usr/local/share/ca-certificates/路径下 - 执行
sudo update-ca-certificates完成证书注册
- 将根证书文件放到
- 补全Ubuntu 18的证书包残留文件:即使你之前执行过
ca-certificates的更新操作,也需要强制重装补全缺失的根证书列表(很多时候仅更新包版本不会重新落地所有新的根证书文件):sudo apt updatesudo apt install --reinstall ca-certificates - 显式指定Go读取系统证书库的路径,避免Go内置证书库读取系统证书失败:
执行命令设置全局证书路径变量:go env -w SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt,让Go发起HTTPS请求时直接读取系统生成的统一证书库文件,不用内置的证书列表。
临时兜底方案(仅调试场景可用)
如果以上操作仍未解决问题,可临时跳过SSL证书校验完成依赖拉取,注意该操作会跳过所有HTTPS请求的证书合法性校验,存在依赖被篡改的安全风险,生产环境严禁使用:
执行拉取命令时添加临时跳过参数:
GONOSUMDB="*" go get --insecure github.com/go-sql-driver/mysql
内容的提问来源于stack exchange,提问作者alok rai
相关产品推荐
相关产品推荐

