Maison >développement back-end >Golang >Comment corriger l'erreur « x509 : certificat signé par une autorité inconnue » dans les constructions d'images Go en plusieurs étapes Docker ?

Comment corriger l'erreur « x509 : certificat signé par une autorité inconnue » dans les constructions d'images Go en plusieurs étapes Docker ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-04 10:57:30999parcourir

How to Fix

Dépannage de l'erreur « x509 : certificat signé par une autorité inconnue » dans la création d'images Go en plusieurs étapes de Docker

Lors de la tentative de création d'un multi- étape Docker pour une application Go dans un réseau privé, vous pouvez rencontrer l'erreur suivante :

x509: certificate signed by unknown authority

Cette erreur survient en raison de difficultés de vérification du certificat lors du téléchargement des dépendances via go get ou go mod download. Bien que la définition de la variable d'environnement GIT_SSL_NO_VERIFY puisse contourner ce problème pour les variables d'environnement de l'agent, cela ne fonctionne pas lors de l'utilisation de go get ou go mod download.

Solution

Pour résoudre ce problème émettre et activer la vérification sécurisée des certificats, vous pouvez importer les certificats nécessaires dans le magasin CA de votre système à l'aide d'openssl. Par exemple :

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

# Proceed with your build process...

En important les certificats dans le magasin CA, la vérification sécurisée des certificats est activée pour la récupération des dépendances git.

Exemple

Le Dockerfile suivant illustre la solution :

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 Dockerfile importera les certificats nécessaires et mettra à jour le magasin CA, permettant une vérification sécurisée des certificats lors de la récupération des dépendances pour la construction de votre application Go au sein d'un réseau privé.

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