Maison >développement back-end >Golang >Comment résoudre l'erreur « x509 : certificat signé par une autorité inconnue » dans Docker Multi-Stage Go Image Build ?

Comment résoudre l'erreur « x509 : certificat signé par une autorité inconnue » dans Docker Multi-Stage Go Image Build ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-04 03:05:02936parcourir

How to Resolve

Docker Multi-Stage Build Go Image : Résolution de l'erreur "x509 : certificat signé par une autorité inconnue"

Dans un réseau d'entreprise privé, il Il est courant de rencontrer l'erreur « x509 : certificat signé par une autorité inconnue » lors de la tentative de création d'images Go à l'aide de versions en plusieurs étapes en raison du manque de certificats de confiance pour accéder aux dépendances externes.

Cause fondamentale

Cette erreur se produit car git, qui est utilisé par go get and go mod download, s'appuie sur curl pour accéder aux serveurs HTTPS. Dans un réseau privé, le magasin de l'autorité de certification du système peut ne pas disposer des certificats nécessaires pour vérifier l'authenticité de ces serveurs.

Solution

Pour résoudre ce problème, vous devez importez les certificats requis dans le magasin de l’autorité de certification du système. Ceci peut être réalisé à l'aide de la commande openssl, comme indiqué dans le Dockerfile mis à jour suivant :

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"]

Vérification

Après avoir appliqué ce correctif, la création de l'image Docker devrait se poursuivre. sans l'erreur « x509 : certificat signé par une autorité inconnue » car les certificats nécessaires sont désormais installés dans le magasin CA.

...

Step 5/19 : RUN openssl s_client -showcerts -connect github.com:443 </dev/null 2></dev/null|openssl x509 -outform PEM > ${cert_location}/github.crt
 ---> Running in bb797e26d4b4
Removing intermediate container bb797e26d4b4
 ---> 6c68ddafd884
Step 6/19 : RUN openssl s_client -showcerts -connect proxy.golang.org:443 </dev/null 2></dev/null|openssl x509 -outform PEM >  ${cert_location}/proxy.golang.crt
 ---> Running in 61f59939d75e
Removing intermediate container 61f59939d75e
 ---> 72d2b03b11e6
Step 7/19 : RUN update-ca-certificates
 ---> Running in 6cf9aa248776
Updating certificates in /etc/ssl/certs...
2 added, 0 removed; done.

...

Step 8/18 : COPY go.mod go.sum ./
 ---> 436263b76050
Step 9/18 : RUN go mod download
 ---> Running in 2387c78147db
Removing intermediate container 2387c78147db
 ---> a37c05c2b531
Step 10/18 : COPY . .
 ---> 01b49c388f59

...

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn