Maison > Article > développement back-end > Comment résoudre l'erreur « x509 : certificat signé par une autorité inconnue » dans les images Docker Multi-Stage Build Go ?
Docker Multi-Stage Build Go Images avec des problèmes d'autorité de certification
Problème :
Quand Si vous tentez de créer des images Go dans un réseau d'entreprise privé à l'aide d'une construction Docker en plusieurs étapes, vous pouvez rencontrer une erreur indiquant « x509 : certificat signé par une autorité inconnue ». Cela se produit lorsque Git tente de récupérer les dépendances des serveurs HTTPS sécurisés.
Cause :
Le problème provient du manque de certificats requis dans le magasin CA du système, ce qui entraîne Git pour rejeter les connexions HTTPS.
Solution :
Pour résoudre le problème, il est nécessaire d'importer les certificats manquants dans le magasin CA du système à l'aide d'OpenSSL. Voici un exemple de Dockerfile qui montre comment y parvenir :
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"]
Explication :
Ce Dockerfile comprend plusieurs étapes supplémentaires par rapport à l'original. Il installe d'abord OpenSSL et met à jour les certificats CA du système. Ensuite, il utilise OpenSSL pour récupérer les certificats de « github.com » et « proxy.golang.org » et les importe dans le magasin CA. Enfin, il met à jour les certificats, permettant à Git de récupérer avec succès les dépendances lors de la commande go mod download.
Remarque :
Au lieu de modifier le Dockerfile pour importer les certificats, vous pouvez également définir la variable d'environnement GIT_SSL_NO_VERIFY=1 sur les variables d'environnement de votre agent. Cependant, cette approche n'est pas recommandée pour une utilisation en production car elle désactive la vérification SSL.
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!