de Programmieren Sprachen Golang

Golang Docker Image bauen mit Zertifikaten

Wenn man ein Golang Programm in ein Docker Container packen möchte und um es so schlank wie möglich zu halten vom Image scratch erbt hat man immer ein Problem, wenn ausgehende Anfragen ein Zertifikat validieren möchten. Das problem ist nämlich, dass es in diesem Image keinerlei Zertifikate existieren. Um das Problem zu beheben, muss man in seinem Programm alle Zertifkate akzeptieren ohne diese zu kontrollieren oder die bessere Möglichkeit man mfügt die Zertifikate in das Docker Image mit ein.

Dafür kann man das Dockerfile erweitern mit folgendem Zusatz:

1ADD /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/

fügt die Zertifikate vom System dem Container hinzu

Alternativ, sollte man ein multi Build benutzen können die Zertifikate auch aus dem vorherigen Build kopiert werden:

 1FROM golang:1.21 AS builder
 2
 3WORKDIR /app
 4COPY go.mod go.sum ./
 5RUN go mod download
 6COPY *.go ./
 7RUN CGO_ENABLED=0 GOOS=linux go build -o app-server 
 8
 9# hier werden nun die Zertifikate kopiert
10FROM scratch
11WORKDIR /app
12
13COPY --from=builder /app/app-server /app/app-server
14COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
15
16ENTRYPOINT ["/app/app-server"]

Nun kriegt man keine Fehlermeldung, dass das Zertifikat nicht validiert wurde und es unsicher ist, da die Zertifikate nun vorhanden sind und daher auch validiert werden können.