在使用docker镜像构建golang项目时,部署的web前端页面以及接口,通过https协议都可以正常访问,但是当接口中包含了模拟http请求,去请求其他三方接口(阿里云,微信公众平台等)时,都报x509:certificate signed by unknown authority错误,如下图所示。

image.png

刚开始通过修改请求头,绕过ssl认证临时解决了
image.png

但是在请求阿里云封装的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或容器名称'

参考文档:https://www.jianshu.com/p/97471c082b2f


杨帆
28 声望3 粉丝