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 ?

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

Barbara Streisand
Barbara Streisandoriginal
2024-11-05 08:05:02459parcourir

How to Resolve

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!

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