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笔记本电脑上进行此操作的。有没有办法解决这个自签名证书的问题?
我正在使用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验证(不推荐)
设置GOSUMDB为off可以禁用校验和数据库的验证,同时结合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失败问题。根据您的环境选择合适的方式。

