Heim  >  Artikel  >  Backend-Entwicklung  >  Wie behebt man den Fehler „x509: Von unbekannter Stelle signiertes Zertifikat“ in Docker Multi-Stage Build for Go-Projekten?

Wie behebt man den Fehler „x509: Von unbekannter Stelle signiertes Zertifikat“ in Docker Multi-Stage Build for Go-Projekten?

Susan Sarandon
Susan SarandonOriginal
2024-11-04 00:23:30630Durchsuche

How to Fix

Docker Multi-Stage Build: Behebung des Fehlers „x509: Von unbekannter Stelle signiertes Zertifikat“

Beim Versuch, Docker-Images für Go in zu erstellen B. in einem privaten Unternehmensnetzwerk, das mehrstufige Builds verwendet, kann die Fehlermeldung „x509: Zertifikat von unbekannter Stelle signiert“ auftreten. Dieses Problem ist auf Zertifikats- und Authentifizierungsprobleme beim Abrufen von Go-Abhängigkeiten zurückzuführen.

Verstehen des Problems:

Der Fehler tritt auf, weil Git, das von Go für den Zugriff auf Abhängigkeiten verwendet wird, nutzt Curl. Dazu müssen die notwendigen Zertifikate in den CA-Store des Systems importiert werden. Ursprünglich wurde vorgeschlagen, die Umgebungsvariable GIT_SSL_NO_VERIFY=1 zu verwenden, aber dieser Ansatz erwies sich für den Erhalt von Abhängigkeiten als unwirksam.

Lösung: Zertifikate in den CA Store importieren

An Um dieses Problem zu beheben, müssen die entsprechenden Zertifikate in den CA-Speicher des Systems importiert werden. Die Methode hierfür variiert je nach Betriebssystem, umfasst jedoch im Allgemeinen die Verwendung des Befehls openssl.

In einem Debian-basierten System können beispielsweise die folgenden Befehle verwendet werden:

  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 (für GitHub-Zertifikat)
  3. openssl s_client -showcerts -connect Proxy.golang.org:443 /dev/null | openssl x509 -outform PEM > /usr/local/share/ca-certificates/proxy.golang.crt (für Proxy.golang.org-Zertifikat)
  4. update-ca-certificates

Geänderte Docker-Datei :

Durch die Integration dieser Schritte zum Importieren von Zertifikaten in die Docker-Datei kann das Problem behoben werden, sodass die Abhängigkeiten abgerufen werden können und der Build erfolgreich fortgesetzt werden kann. Unten finden Sie eine aktualisierte Docker-Datei:

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

Das obige ist der detaillierte Inhalt vonWie behebt man den Fehler „x509: Von unbekannter Stelle signiertes Zertifikat“ in Docker Multi-Stage Build for Go-Projekten?. 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