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 ?
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!