Docker构建Go镜像时无法使用"go get"命令 - x509: 由未知机构签名的证书。

5
在 Docker Golang 镜像中,我正在尝试通过 go install 安装一个包,但遇到了以下错误:
go install google.golang.org/protobuf/cmd/protoc-gen-go@1.27.0: google.golang.org/protobuf/cmd/protoc-gen-go@1.27.0: invalid version: Get "https://proxy.golang.org/google.golang.org/protobuf/cmd/protoc-gen-go/@v/1.27.0.info": x509: certificate signed by unknown authority

我尝试安装CA证书,但没有成功。

你有什么想法是什么问题吗?

1个回答

12

问题出在我的安全客户端:Cisco AnyConnect "Umbrella"。

它表现得像一个中间人,并重新使用自己的证书对请求进行重新签名。

为了让docker中的go客户端信任由Cisco Umbrella重新签名的流量,需要将"Cisco Umbrella Root CA"证书添加到docker文件中:

Cisco Umbrella证书链

点击.cer URI,我们可以查看该证书。

现在在我的容器内部我可以:

$ wget http://www.cisco.com/security/pki/certs/ciscoumbrellaroot.cer

然后将其从 .cer 转换为 .crt 文件:

$ openssl x509 -inform DER -in ciscoumbrellaroot.cer -out ciscoumbrellaroot.crt

然后将其复制到证书文件夹:

$ cp ciscoumbrellaroot.crt /usr/local/share/ca-certificates/ciscoumbrellaroot.crt

最后更新证书:

$ update-ca-certificates

输出结果如下:

Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

完成!现在我们可以获取任何软件包:

$ go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.27.1
go: downloading google.golang.org/protobuf v1.27.1

这篇文章是关于思科安全客户端的,但适用于任何其他客户端。


那么Mac电脑呢? - Muhammed Ozdogan
谢谢。你的输入很有帮助。我刚刚重新启动了我的Cisco AnyConnect,问题得到了解决。 - Shashi
@MuhammedOzdogan 这是在我的MacBook Pro上完成的。 - danfromisrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接