在使用docker镜像构建golang项目时,部署的web前端页面以及接口,通过https协议都可以正常访问,但是当接口中包含了模拟http请求,去请求其他三方接口(阿里云,微信公众平台等)时,都报x509:certificate signed by unknown authority错误,如下图所示。
刚开始通过修改请求头,绕过ssl认证临时解决了
但是在请求阿里云封装的sdk,底层代码不能通过配置请求头来绕过ssl认证,才考虑来解决这个问题。
通过查询各种文档,最后发现一般使用的是 linux(centos或者ubuntu等待) 系统,默认是不带 ca-certificates 根证书的,导致无法识别外部 https 携带的数字证书。
为了解决证书验证的问题,我们要在构建 docker 镜像的时候把 ca-certificates 根证书给装上,这样就能识别来自外部 https 的数字证书了。
这里有两种方案来解决问题,这里以utuntu基础镜像为例:
方案一:apt-get是utuntu的下载命令在编辑 Dockerfile 的时候加入以下命令即可:
#Debian12更换了源的配置文件使用以下方式更换为国内源
RUN echo "hello,xiaoXin" && sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources \
&& apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
netbase \
&& rm -rf /var/lib/apt/lists/ \
&& apt-get autoremove -y && apt-get autoclean -y
方案二:
如果不想重新构建镜像的话,可以直接进入容器:
docker exec -it '容器ID或容器名称' /bin/bash
然后执行安装根证书命令:
apt-get -qq update
apt-get -qq install -y --no-install-recommends ca-certificates curl
然后重启容器即可:
docker restart '容器ID或容器名称'
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。