首页  >  文章  >  后端开发  >  如何修复 Docker 多阶段 Go 镜像构建中的“x509:证书由未知机构签名”错误?

如何修复 Docker 多阶段 Go 镜像构建中的“x509:证书由未知机构签名”错误?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-04 10:57:30929浏览

How to Fix

解决 Docker 多阶段 Go 镜像构建中的“x509:证书由未知机构签名”错误

尝试构建多阶段时在私有网络中为 Go 应用程序暂存 Docker 镜像时,您可能会遇到以下错误:

x509: certificate signed by unknown authority

此错误是由于在通过 go get 或 go mod download 下载依赖项时证书验证困难而出现的。虽然设置 GIT_SSL_NO_VERIFY 环境变量可以绕过 Agent 环境变量的此问题,但在使用 go get 或 go mod download 时不起作用。

解决方案

解决此问题颁发并启用安全证书验证后,您可以使用 openssl 将必要的证书导入到系统的 CA 存储中。例如:

FROM golang:latest as builder

RUN apt-get update && apt-get install -y ca-certificates openssl

ARG cert_location=/usr/local/share/ca-certificates

# Get certificate from "github.com"
RUN openssl s_client -showcerts -connect github.com:443 </dev/null 2>/dev/null|openssl x509 -outform PEM > ${cert_location}/github.crt
# Get certificate from "proxy.golang.org"
RUN openssl s_client -showcerts -connect proxy.golang.org:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >  ${cert_location}/proxy.golang.crt
# Update certificates
RUN update-ca-certificates

# Proceed with your build process...

通过将证书导入 CA 存储,为 git 依赖项检索启用安全证书验证。

示例

以下 Dockerfile 演示了解决方案:

FROM golang:latest as builder

RUN apt-get update && apt-get install -y ca-certificates openssl

ARG cert_location=/usr/local/share/ca-certificates

# Get certificate from "github.com"
RUN openssl s_client -showcerts -connect github.com:443 </dev/null 2>/dev/null|openssl x509 -outform PEM > ${cert_location}/github.crt
# Get certificate from "proxy.golang.org"
RUN openssl s_client -showcerts -connect proxy.golang.org:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >  ${cert_location}/proxy.golang.crt
# Update certificates
RUN update-ca-certificates

WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN  GO111MODULE="on" CGO_ENABLED=0 GOOS=linux go build -o main ${MAIN_PATH}

FROM alpine:latest
LABEL maintainer="Kozmo"
RUN apk add --no-cache bash
WORKDIR /app
COPY --from=builder /app/main .
EXPOSE 8080
CMD ["/main"]

此 Dockerfile 将导入必要的证书并更新 CA 存储,从而允许在专用网络中构建 Go 应用程序的依赖项检索期间进行安全证书验证。

以上是如何修复 Docker 多阶段 Go 镜像构建中的“x509:证书由未知机构签名”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn