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.