解决http.Get()方法请求https 证书报错问题
1 | resp,err := http.Get("https://XXX") |
原因:http.Get()会对传过来的数字证书进行校验,但是这个证书是由不知名CA签发的
解决方法:
-
修改client.go代码。让client端忽略对证书的校验:
1
2
3
4
5
6
7//通过设置tls.Config的InsecureSkipVerify为true,client将不再对服务端的证书进行校验。
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
client := &http.Client{Transport: tr}
resp, err := client.Get("https://localhost:8081")这种做法可以解决问题,但是可能在生产环境下不进行校验,可能存在风险
-
将CA证书放在项目代码下,加入到dockerfile里
每台ubunt上都有CA证书,在目录
/etc/ssl/certs
下,都有ca-certificates.crt
这个就是证书,将他拷贝到项目代码下,以asr-svc为例
然后再dockerfile加入证书
1 | WORKDIR /etc/ssl/certs |
即可,打包镜像,运行代码。