无法上传文件到生产中的谷歌云存储

问题描述 投票:2回答:3

我正在按照此文档将文件上传到GCS。 Setting Up Authentication for Server to Server Production Applications

它在本地工作但在生产中我得到这个错误:

发布https://www.googleapis.com/upload/storage/v1/b/[bucket-name]/o?alt=json&prettyPrint=false&projection=full&uploadType=multipart:x509:无法加载系统根目录,也没有提供根目录。

func UploadIMG(ctx *context.Context, file []byte, fileName string) error {
    storageClient, err := storage.NewClient(*ctx)
    if err != nil {
        log.Fatal(err)
    }
    w := storageClient.Bucket(bucketName).Object(fileName).NewWriter(*ctx)
    if _, err := w.Write(file); err != nil {return err}
    if err := w.Close(); err != nil {return err}

    oauthClient, err := google.DefaultClient(*ctx, cloudkms.CloudPlatformScope)
    if err != nil {
        log.Fatal(err)
    }

    kmsService, err := cloudkms.New(oauthClient)
    if err != nil {
        log.Fatal(err)
    }

    _ = kmsService

    return nil
}
go google-cloud-storage
3个回答
3
投票

您是否真的继续使用链接的教程,确保您拥有正确的凭据?

错误本身可能与证书相关。当它尝试执行请求时,它会在底层系统上查找根证书,但无法找到它们或打开它们。例如,在Ubuntu上,它们应该在/ usr / share / ca-certificates和/或/ etc / ssl / certs下。确保您的证书具有正确的权限,以便能够执行您想要的请求。


1
投票

正如伙计们在他们的回答中所说,这与我在dockerFile中缺少证书颁发机构有关。

就我而言,在阿尔卑斯山,已经有一个名为ca-certificates的软件包实用程序,它附带了预安装的证书。只需要将以下命令添加到我的docker中。

RUN apk --no-cache add ca-certificates

0
投票

对于任何谷歌API,您将需要一个信任的根CA.

不确定您的生产环境,但如果您使用Docker,请将此行添加到您的Dockerfile

COPY /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/

来自,说一个Linux构建,你可以看到命令go将寻找系统根信任文件:

https://golang.org/src/crypto/x509/root_linux.go

"/etc/ssl/certs/ca-certificates.crt",                // Debian/Ubuntu/Gentoo etc.
"/etc/pki/tls/certs/ca-bundle.crt",                  // Fedora/RHEL 6
"/etc/ssl/ca-bundle.pem",                            // OpenSUSE
"/etc/pki/tls/cacert.pem",                           // OpenELEC
"/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem", // CentOS/RHEL 7

如果你的生产(linux)版本中没有这些目录,那么go将没有系统根信任,你将得到你看到的错误。

© www.soinside.com 2019 - 2024. All rights reserved.