Golang中解决go get获取包时遇到自签名证书失败的问题

Golang中解决go get获取包时遇到自签名证书失败的问题 朋友们好,

我是Go语言的新手。当我尝试执行:go get github.com/lib/pq 时,遇到了以下错误。

fatal: unable to access ‘https://github.com/lib/pq/’: SSL certificate problem: self signed certificate in certificate chain

我是在公司网络内的Windows 10笔记本电脑上进行此操作的。有没有办法解决这个自签名证书的问题?

6 回复

我正在使用Windows 10操作系统。需要了解如何利用openssl。谢谢,我会朝这个方向进行分析。

更多关于Golang中解决go get获取包时遇到自签名证书失败的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


感谢回复。这是公司网络。我已按照您提到的方式手动将文件复制到 GOPATH 中。

如果你使用openssl连接到GitHub,可以执行 go get

openssl s_client -connect github.com:443

这会禁用验证,但我不建议这样做,仅用于测试

git config --global http.sslVerify false

是公司网络吗?还是有其他代理方式?

如果你没有使用模块而是"传统"的 Go 路径,那么手动将所需包克隆到正确位置应该会"比较容易"。

// 代码示例保留原样
func main() {
    fmt.Println("hello world")
}

你好。github.com 绝对没有使用自签名证书。对你来说 github.com 解析到哪个 IP 地址?应该是下面加粗的两个地址。

nslookup github.com
Server: xxxxx ← 我网络上的某个域名服务器
Address: xxx.xxx.xxx ← 它的 IP 地址

非权威应答:
名称:github.com
地址:140.82.118.3
140.82.118.4

在Go语言中,当使用go get命令获取包时遇到自签名证书错误,通常是由于公司网络中的代理或防火墙拦截HTTPS请求并替换为自签名证书导致的。Go工具链默认会验证SSL证书,因此会拒绝这些证书。以下是几种解决方法:

1. 设置环境变量跳过证书验证(不推荐用于生产环境)

通过设置GIT_SSL_NO_VERIFY环境变量为true,可以跳过Git的SSL证书验证。这会影响所有Git操作,但可以临时解决问题。

# 在Windows命令提示符或PowerShell中设置环境变量
set GIT_SSL_NO_VERIFY=true
go get github.com/lib/pq

或者,在PowerShell中永久设置:

[Environment]::SetEnvironmentVariable("GIT_SSL_NO_VERIFY", "true", "User")

然后重新启动终端并运行go get

2. 配置Git使用自定义CA证书

如果公司提供了自签名证书,可以将其添加到Git的配置中。首先,将证书文件(如company-ca.crt)保存到本地,然后设置Git使用该证书:

git config --global http.sslCAInfo "C:\path\to\company-ca.crt"

之后运行go get命令。

3. 使用Go模块的GOPRIVATE环境变量

如果包位于私有仓库,可以设置GOPRIVATE环境变量,告诉Go工具链跳过对这些域的证书验证:

set GOPRIVATE=github.com/lib/pq
go get github.com/lib/pq

在PowerShell中永久设置:

[Environment]::SetEnvironmentVariable("GOPRIVATE", "github.com/lib/pq", "User")

4. 通过Go环境变量禁用SSL验证(不推荐)

设置GOSUMDBoff可以禁用校验和数据库的验证,同时结合GIT_TERMINAL_PROMPT=1允许交互式输入(但可能不适用于所有情况):

set GOSUMDB=off
set GIT_TERMINAL_PROMPT=1
go get -insecure github.com/lib/pq

注意:-insecure标志在较新Go版本中已弃用,建议优先使用其他方法。

示例:完整步骤(以方法1为例)

在Windows命令提示符中:

set GIT_SSL_NO_VERIFY=true
go get github.com/lib/pq

如果成功,输出将显示包被下载并安装。

注意事项

  • 跳过证书验证会降低安全性,仅在受信任的网络中使用。
  • 长期解决方案是配置系统信任公司CA证书。在Windows中,可以通过“管理用户证书”将CA证书导入“受信任的根证书颁发机构”。
  • 如果问题持续,检查公司网络策略或联系IT部门获取正确证书。

以上方法应能解决自签名证书导致的go get失败问题。根据您的环境选择合适的方式。

回到顶部