Heim  >  Artikel  >  Backend-Entwicklung  >  Wie behebe ich den Fehler „x509: von unbekannter Stelle signiertes Zertifikat' in Docker Multi-Stage Build Go-Images?

Wie behebe ich den Fehler „x509: von unbekannter Stelle signiertes Zertifikat' in Docker Multi-Stage Build Go-Images?

Barbara Streisand
Barbara StreisandOriginal
2024-11-05 08:05:02649Durchsuche

How to Resolve

Docker Multi-Stage Build Go Images mit Problemen mit der Zertifizierungsstelle

Problem:

Wann Beim Versuch, Go-Images in einem privaten Unternehmensnetzwerk mithilfe eines mehrstufigen Docker-Builds zu erstellen, wird möglicherweise die Fehlermeldung „x509: Zertifikat signiert von unbekannt“ angezeigt Autorität.“ Dies tritt auf, wenn Git versucht, Abhängigkeiten von sicheren HTTPS-Servern abzurufen.

Ursache:

Das Problem ist auf das Fehlen erforderlicher Zertifikate im CA-Speicher des Systems zurückzuführen, wodurch Git um die HTTPS-Verbindungen abzulehnen.

Lösung:

An Um das Problem zu beheben, müssen die fehlenden Zertifikate mithilfe von OpenSSL in den CA-Speicher des Systems importiert werden. Hier ist eine Beispiel-Docker-Datei, die zeigt, wie dies erreicht wird:

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

Erklärung:

Diese Docker-Datei enthält im Vergleich zum Original mehrere zusätzliche Schritte. Es installiert zunächst OpenSSL und aktualisiert die CA-Zertifikate des Systems. Anschließend ruft es mithilfe von OpenSSL die Zertifikate von „github.com“ und „proxy.golang.org“ ab und importiert sie in den CA-Speicher. Schließlich werden die Zertifikate aktualisiert, sodass Git die Abhängigkeiten während des Befehls „go mod download“ erfolgreich abrufen kann.

Hinweis:

Anstatt die Docker-Datei zum Importieren der Zertifikate zu bearbeiten, Sie können auch die Umgebungsvariable GIT_SSL_NO_VERIFY=1 für Ihre Agent-Umgebungsvariablen festlegen. Dieser Ansatz wird jedoch nicht für den Produktionseinsatz empfohlen, da er die SSL-Überprüfung deaktiviert.

Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „x509: von unbekannter Stelle signiertes Zertifikat' in Docker Multi-Stage Build Go-Images?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn