通过Dart调用带Firebase认证的Cloud Run gRPC服务遇证书未知颁发机构错误
错误原因
你遇到的报错和客户端ChannelCredentials配置无关,错误发生在服务端内部逻辑:
Firebase Admin SDK 验证ID令牌时需要从Google官方接口拉取签名公钥,但你的服务端容器镜像没有预装CA根证书,无法校验Google API的SSL证书,才抛出了x509: certificate signed by unknown authority错误。本地运行正常是因为你的开发环境自带了通用CA根证书。
解决方案
你只需要修改服务端的Dockerfile,在镜像中添加CA根证书即可,针对Go服务的常见构建场景参考以下配置:
- 基于Alpine基础镜像构建:
# 在原有Dockerfile中添加安装CA证书的命令 RUN apk add --no-cache ca-certificates
- 基于Scratch空镜像构建:
# 构建阶段 FROM golang:1.21-alpine AS builder RUN apk add --no-cache ca-certificates WORKDIR /app COPY . . RUN go build -o server . # 运行阶段 FROM scratch # 复制构建阶段的CA证书到运行镜像 COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ COPY --from=builder /app/server /server ENTRYPOINT ["/server"]
额外说明
- 你的客户端
ChannelCredentials.secure()配置完全正确,Cloud Run默认提供受公共信任的SSL证书,不需要额外传参。 - 你已经开启的Cloud Run HTTP2支持、允许未认证调用配置均不影响该问题,不需要修改。
内容的提问来源于stack exchange,提问作者Louis Beaumont
相关产品推荐
相关产品推荐

