不能在linux-amd64上构建的darwin-amd64二进制文件中使用https

时间:2014-11-21 06:28:21

标签: linux go cross-compiling darwin

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

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

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

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

但是,在将此darwin-amd64版本二进制文件提供给我的同事后,他们无法使用它进行登录,因为login将发送一个HTTPS请求,该请求将使用CGO。 Errmsg返回的是:

x509: failed to load system roots and no roots provided

有关如何解决此问题的任何建议吗?

1 个答案:

答案 0 :(得分:1)

这看起来像证书问题,正如#34; Building Docker Images for Static Go Binaries&#34;

中提到的那样
  

原因是在Linux系统上,tls包从/etc/ssl/certs/ca-certificates.crt读取根CA证书,这些证书从暂存图像中丢失。
  Contributors应用程序通过捆绑根CA证书的副本并配置出站调用来解决此问题。

因此,您可以检查同事的工作站上是否有/etc/ssl/certs/ca-certificates.crt

但是this bug report suggests

  

刚刚得到some clarifications from go-nuts。由于交叉编译而无法加载x509证书...

     

交叉编译器无法使用&#39; cgo&#39;在编译期间,但是&#39; cgo&#39;需要访问达尔文的根证书存储区。

     

我有类似的问题,在从这些Linux发行版中复制crt文件后解决了。要让Golang读取文件,您必须将文件放在完全相同的目录中   crypto/x509将循环遍历all the possible certificate files

另一个解决方案涉及与&#34; export CGO_ENABLED=0&#34;进行交叉编译。

bug 8349显示了最近Go的一些进展。