Maison  >  Article  >  développement back-end  >  Comment corriger l'erreur « x509 : certificat signé par une autorité inconnue » dans la construction en plusieurs étapes de Docker pour les projets Go ?

Comment corriger l'erreur « x509 : certificat signé par une autorité inconnue » dans la construction en plusieurs étapes de Docker pour les projets Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-04 00:23:30627parcourir

How to Fix

Construction en plusieurs étapes de Docker : résolution de l'erreur « x509 : certificat signé par une autorité inconnue »

Lors de la tentative de création d'images Docker pour Go in un réseau d'entreprise privé utilisant des builds à plusieurs étapes, une erreur « x509 : certificat signé par une autorité inconnue » peut survenir. Ce problème provient de problèmes de certificat et d'authentification lors de la récupération des dépendances Go.

Comprendre le problème :

L'erreur se produit car git, qui est utilisé par Go pour accéder aux dépendances, utilise la boucle. Cela nécessite que les certificats nécessaires soient importés dans le magasin CA du système. Initialement, il a été suggéré d'utiliser la variable d'environnement GIT_SSL_NO_VERIFY=1, mais cette approche s'est avérée inefficace pour obtenir des dépendances.

Solution : importer des certificats dans le magasin CA

Pour Pour résoudre ce problème, il est nécessaire d'importer les certificats appropriés dans le magasin CA du système. La méthode pour ce faire varie selon le système d'exploitation, mais implique généralement l'utilisation de la commande openssl.

Par exemple, dans un système basé sur Debian, les commandes suivantes peuvent être utilisées :

  1. apt-get update && apt-get install -y ca-certificates openssl
  2. openssl s_client -showcerts -connect github.com:443 /dev/null | openssl x509 -outform PEM > /usr/local/share/ca-certificates/github.crt (pour le certificat GitHub)
  3. openssl s_client -showcerts -connect proxy.golang.org:443 /dev/null | openssl x509 -outform PEM > /usr/local/share/ca-certificates/proxy.golang.crt (pour le certificat proxy.golang.org)
  4. update-ca-certificates

Dockerfile modifié :

En incorporant ces étapes d'importation de certificat dans le Dockerfile, le problème peut être résolu, permettant d'obtenir les dépendances et de procéder à la construction avec succès. Vous trouverez ci-dessous un Dockerfile mis à jour :

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

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