运行golang http.Docker的Docker容器客户端收到错误的``证书由未知权限签名''

Wes*_*101 8 go docker tls1.2

我创建了一个docker容器,用于使用GoLang与Google api通讯。我开始使用SCRATCH容器,并certificate signed by unknown authority在更改为ubuntu / alpine 时遇到错误,但仍然收到错误。

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

解决这个问题的任何帮助都是很好的。我可以在Mac上正常运行代码。

做完一些研究后,我可以看到问题了 https://github.com/golang/go/issues/24652

但是我不知道这是否直接相关,或者是否需要与容器共享一些证书。

BMi*_*tch 23

从头开始,除了图像中的应用程序之外,您还需要包括受信任的证书。例如

FROM scratch
ADD ca-certificates.crt /etc/ssl/certs/
ADD main /
CMD ["/main"]
Run Code Online (Sandbox Code Playgroud)

如果您使用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"]
Run Code Online (Sandbox Code Playgroud)


小智 0

您可以使用专门针对 ubuntu 的自签名证书。在开始之前,您应该为非 root 用户配置 sudo 权限。您可以按照我们针对 Ubuntu 16.04 的初始服务器设置来了解如何设置此类用户帐户。