Golang中go mod download报错x509证书由未知机构签发如何解决

Golang中go mod download报错x509证书由未知机构签发如何解决 我在Ubuntu桌面机器上进行Go语言开发已有一些经验;然而,我开始使用AWS EC2实例,并打算在那里进行Go语言开发。

我在AWS上有一个Ubuntu 24.04的EC2实例。我打算在这个实例上进行Go语言开发。

但是,命令 go mod download 却抛出如下错误:

go: github.com/gin-gonic/gin@v1.9.1: Get "https://proxy.golang.org/github.com/gin-gonic/gin/@v/v1.9.1.info": tls: failed to verify certificate: x509: certificate signed by unknown authority

我该如何解决这个问题?我尝试在谷歌上搜索这个问题,但没有找到任何解决方案。我想我需要在EC2实例上进行一些设置……但我不知道具体是什么以及在哪里设置。

如果需要我提供更多细节,请告诉我。 谢谢


更多关于Golang中go mod download报错x509证书由未知机构签发如何解决的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang中go mod download报错x509证书由未知机构签发如何解决的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这个问题通常是由于系统缺少根证书导致的。以下是几种解决方案:

方案1:安装CA证书包(推荐)

# 更新包列表
sudo apt update

# 安装CA证书包
sudo apt install -y ca-certificates

# 更新证书
sudo update-ca-certificates

# 设置GOPROXY使用国内镜像(如果在中国)
go env -w GOPROXY=https://goproxy.cn,direct

方案2:跳过证书验证(仅用于测试环境)

# 设置Golang跳过TLS验证
export GOSUMDB=off
export GOINSECURE=proxy.golang.org

# 或者直接设置环境变量
export GODEBUG=x509ignoreCN=0

# 然后运行
go mod download

方案3:手动添加证书

# 下载证书
curl -k https://proxy.golang.org -v 2>&1 | grep '^* Server certificate:' -A10

# 或者使用openssl获取证书
openssl s_client -connect proxy.golang.org:443 -showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM > proxy.golang.org.pem

# 添加到系统证书目录
sudo cp proxy.golang.org.pem /usr/local/share/ca-certificates/
sudo update-ca-certificates

方案4:使用自定义GOPROXY

# 设置使用阿里云代理
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct

# 或者七牛云
go env -w GOPROXY=https://goproxy.cn,direct

# 验证设置
go env | grep GOPROXY

方案5:检查系统时间

# 检查系统时间是否正确
date

# 如果时间不正确,同步时间
sudo apt install -y ntpdate
sudo ntpdate time.nist.gov

完整解决步骤示例:

# 1. 安装证书
sudo apt update && sudo apt install -y ca-certificates
sudo update-ca-certificates

# 2. 设置GOPROXY(可选)
go env -w GOPROXY=https://goproxy.cn,direct

# 3. 清理mod缓存
go clean -modcache

# 4. 重新下载依赖
go mod download

如果问题仍然存在,检查网络代理设置:

# 检查是否有代理设置
env | grep -i proxy

# 如果有不需要的代理,取消设置
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY

大多数情况下,方案1就能解决问题。如果EC2实例在受限网络环境中,可能需要联系网络管理员确认证书策略。

回到顶部