猿问

不能在基于 linux-amd64 的 darwin-amd64 二进制文件中使用 https

我在 linux-amd64 上构建了一个 darwin-amd64 版本的程序,交叉编译命令是:

GOOS=darwin GOARCH=amd64 GOBIN=/tmp go install <myprogram>

在此之前,我已经使用以下方法准备了 darwin-amd64 工具链:

sudo GOOS=darwin GOARCH=amd64 ./make.bash

但是,把这个 darwin-amd64 版本的二进制文件给我的同事后,他们不能用它来登录,因为登录会发送一个 HTTPS 请求,它将使用 CGO。返回的 Errmsg 是:

x509: failed to load system roots and no roots provided

对于如何解决这个问题,有任何的建议吗?


心有法竹
浏览 301回答 1
1回答

慕哥9229398

这看起来像一个证书的问题,如“中提到的一个大厦泊坞窗图像静态转到二进制”这样做的原因是在 Linux 系统上,tls 包从 中读取根 CA 证书/etc/ssl/certs/ca-certificates.crt,而临时映像中缺少该证书。Contributors 应用程序通过捆绑根 CA 证书的副本并配置出站调用以使用它们来解决此问题。所以你可以检查/etc/ssl/certs/ca-certificates.crt你同事的工作站上是否有。但是这个错误报告表明:刚刚从 go-nuts得到了一些澄清。这是因为交叉编译不适用于加载 x509 证书...交叉编译器在编译期间不能使用“cgo”,但需要“cgo”才能访问 Darwin 上的根证书存储。我有一个类似的问题,crt从这些 linux 发行版中的任何一个复制文件后解决了。要让 golang 读取文件,您必须将文件放在完全相同的目录中。crypto/x509将遍历所有可能的证书文件。另一种解决方案涉及使用“&nbsp;export CGO_ENABLED=0”进行交叉编译。该漏洞8349只显示了一些更近期的围棋进步了。
随时随地看视频慕课网APP

相关分类

Go
我要回答