Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyelesaikan Ralat \'x509: sijil yang ditandatangani oleh pihak berkuasa yang tidak diketahui\' dalam Docker Multi-Stage Go Image Build?

Bagaimana untuk Menyelesaikan Ralat \'x509: sijil yang ditandatangani oleh pihak berkuasa yang tidak diketahui\' dalam Docker Multi-Stage Go Image Build?

Patricia Arquette
Patricia Arquetteasal
2024-11-04 03:05:02936semak imbas

How to Resolve

Imej Docker Multi-Stage Build Go: Menyelesaikan Ralat "x509: sijil ditandatangani oleh pihak berkuasa yang tidak diketahui"

Dalam rangkaian korporat persendirian, ia adalah perkara biasa untuk menghadapi ralat "x509: sijil yang ditandatangani oleh pihak berkuasa yang tidak diketahui" semasa cuba membina imej Go menggunakan binaan berbilang peringkat kerana kekurangan sijil yang dipercayai untuk mengakses kebergantungan luaran.

Punca Punca

Ralat ini berlaku kerana git, yang digunakan oleh muat turun mod go get dan go, bergantung pada curl untuk mengakses pelayan HTTPS. Dalam rangkaian persendirian, stor sistem CA mungkin tidak mempunyai sijil yang diperlukan untuk mengesahkan ketulenan pelayan ini.

Penyelesaian

Untuk menyelesaikan isu ini, anda perlu import sijil yang diperlukan ke dalam stor CA sistem. Ini boleh dicapai menggunakan arahan openssl, seperti yang ditunjukkan dalam fail Docker yang dikemas kini berikut:

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

Pengesahan

Selepas menggunakan pembetulan ini, binaan imej docker harus diteruskan tanpa ralat "x509: sijil ditandatangani oleh pihak berkuasa yang tidak diketahui" kerana sijil yang diperlukan kini dipasang di stor CA.

...

Step 5/19 : RUN openssl s_client -showcerts -connect github.com:443 </dev/null 2></dev/null|openssl x509 -outform PEM > ${cert_location}/github.crt
 ---> Running in bb797e26d4b4
Removing intermediate container bb797e26d4b4
 ---> 6c68ddafd884
Step 6/19 : RUN openssl s_client -showcerts -connect proxy.golang.org:443 </dev/null 2></dev/null|openssl x509 -outform PEM >  ${cert_location}/proxy.golang.crt
 ---> Running in 61f59939d75e
Removing intermediate container 61f59939d75e
 ---> 72d2b03b11e6
Step 7/19 : RUN update-ca-certificates
 ---> Running in 6cf9aa248776
Updating certificates in /etc/ssl/certs...
2 added, 0 removed; done.

...

Step 8/18 : COPY go.mod go.sum ./
 ---> 436263b76050
Step 9/18 : RUN go mod download
 ---> Running in 2387c78147db
Removing intermediate container 2387c78147db
 ---> a37c05c2b531
Step 10/18 : COPY . .
 ---> 01b49c388f59

...

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat \'x509: sijil yang ditandatangani oleh pihak berkuasa yang tidak diketahui\' dalam Docker Multi-Stage Go Image Build?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn