web-dev-qa-db-ja.com

Golang http.Clientを実行しているDockerコンテナーでエラー「不明な機関によって署名された証明書」が発生する

GoLangを使用してGoogle APIと通信するためのDockerコンテナーを作成しました。 SCRATCHコンテナーの使用を開始し、ubuntu/Alpineに変更すると_certificate signed by unknown authority_エラーが発生しますが、それでもエラーが発生します。

resp, err := client.Get("https://www.googleapis.com/oauth2/v3/userinfo")

この問題を解決する助けがあれば素晴らしいでしょう。 Macで問題なくコードを実行できます。

いくつかの調査を行った後、問題を確認できます https://github.com/golang/go/issues/24652

これが直接関連しているかどうか、または証明書をコンテナと共有する必要があるかどうかはわかりません。

11
Westy10101

スクラッチでは、イメージにアプリケーションに加えて信頼できる証明書を含める必要があります。例えば。

FROM scratch
ADD ca-certificates.crt /etc/ssl/certs/
ADD main /
CMD ["/main"]

Alpineとマルチステージビルドを使用している場合は、次のようになります。

FROM golang:Alpine as build
RUN apk --no-cache add ca-certificates
WORKDIR /go/src/app
COPY . .
RUN CGO_ENABLED=0 go-wrapper install -ldflags '-extldflags "-static"'

FROM scratch
COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=build /go/bin/app /app
ENTRYPOINT ["/app"]
29
BMitch

Ubuntu専用の自己署名証明書を使用できます。始める前に、非rootユーザーにSudo特権が構成されている必要があります。 Ubuntu 16.04の初期サーバーセットアップに従って、このようなユーザーアカウントをセットアップする方法を学ぶことができます。

0
Meharwan Singh