一、场景描述
在 JAVA 应用中通过 HttpClient 调用外部 https 协议的接口抛出 x509:certificate signed by unknown authority 的错误,导致容器内部应用程序的接口返回 500 的错误。
二、问题分析
我们在构建 Docker 镜像时一般都采用的是 Alpine Linux 系统,默认是不带 ca-certificates 根证书的,导致无法识别外部 https 携带的数字证书。为了解决证书验证的问题,我们要在构建 Docker 基础镜像的时候把 ca-certificates 根证书安装上,这样就能识别来自外部 https 的数字证书了。
三、解决方案
-
在构建基础镜像的时候加上
ca-certificates根证书RUN apk update && apk upgrade && apk add ca-certificates && update-ca-certificates && rm -rf /var/cache/apk/* -
如果基础镜像不想重复构建,则可以进入依赖了基础镜像后进行安装
# 进入容器 docker exec -it 容器名称/容器ID sh or bash # 安装根证书 RUN apk update && apk upgrade && apk add ca-certificates && update-ca-certificates && rm -rf /var/cache/apk/* # 退出容器 exit # 重启容器 docker restart 容器名称/容器IDP.S
出现如下警告可以忽略
WARNING: ca-certificates.crt does not contain exactly on certificate or CRL: skipping
1万+

被折叠的 条评论
为什么被折叠?



