Go交叉編譯無法使用https

2021-09-12 07:22:52 字數 536 閱讀 7325

x509: failed to load system roots and no roots provided

發現x509的庫沒有問題。查詢資料發現要想正常使用x509,則必須開啟cgo,但是go規定交叉編譯必須關閉cgo,即設定cgo_enable=0;這樣就陷入乙個死迴圈,即交叉編譯環境無法直接使用https。

有兩種方法可以獲取目標平台的證書檔案,第一種是聯絡平台方讓其提供證書檔案,然後整合到目前程式中,該方法如果是公司內部產品相對容易。第二種是通過openssl來獲取:

openssl s_client -connect dest.host.com:443 -showcerts > ca.pem

ca.pem裡刪掉沒用的只留類似gist裡「—–begin certificate—–」、「—–end certificate—–」之間的部分,一般網域名稱的證書鏈大概是兩個或者三個證書。

因為http.client是併發安全的,所以只需要在init裡初始化乙個針對特定網域名稱的全域性的client,就能隨時用隨時client.get/post等等。

**位址在 

go交叉編譯

指定叉編譯目標 goarch 目標平台 編譯後的目標平台 的處理器架構 386 amd64 arm goos 目標平台 編譯後的目標平台 的作業系統 darwin freebsd linux windows 一 windows 下編譯linux 64位可執行程式 set cgo enabled 0 ...

Go交叉編譯

使用go語言做了乙個微服務,微服務中的乙個功能,需要呼叫底層so。該微服務執行於arm64架構,系統為aarch64 gnu linux。因此需要交叉編譯。第一步 編寫編譯指令碼,指令碼中需要設定環境變數 go build v 第二步 調整gcc編譯環境。如下圖中5項,預設用於編譯和鏈結的工具。位於...

Go交叉編譯

golang的交叉編譯要保證golang版本在1.5以上,本解決方案例項 1.9版本執行的。goos linux goarch amd64 go build hello.go這裡用到了兩個變數 goos 目標作業系統 goarch 目標作業系統的架構 osarch os version linux ...