Google app engine SSL:证书验证在GAE/Go上失败

Google app engine SSL:证书验证在GAE/Go上失败,google-app-engine,go,google-bigquery,Google App Engine,Go,Google Bigquery,我正在开发GAE/Go应用程序,并试图从本地开发服务器连接Google Big Query 我的代码是这样的 import ( "cloud.google.com/go/bigquery" "golang.org/x/net/context" "google.golang.org/api/option" gaeLog "google.golang.org/appengine/log" newappengine "google.golang.org/appengine" )

我正在开发GAE/Go应用程序,并试图从本地开发服务器连接Google Big Query

我的代码是这样的

import (
  "cloud.google.com/go/bigquery"
  "golang.org/x/net/context"
  "google.golang.org/api/option"
  gaeLog "google.golang.org/appengine/log"
  newappengine "google.golang.org/appengine"
)

func MyFunc(c *gin.Context) {
  r := c.Request
  ctx := newappengine.NewContext(r)
  client, err := bigquery.NewClient(ctx, PROJECT_ID, option.WithServiceAccountFile(SERVICE_ACCOUNT_JSON_FILE_PATH))
  if err != nil {
      (Error Handling)
  }

  tableList := client.Dataset(DATASET_ID).Tables(ctx)
  for {
    v, err := tableList.Next()
    if err == iterator.Done {
        break
    } else if err != nil {
        gaeLog.Errorf(ctx, "Failed to get meta-info: %v", err)
        return
    }
    :
  }
}
我使用
goapp.bat serve
命令调用了本地开发服务器。 当我发布请求时,我得到了一个错误

api_dev.go:344: ERROR: Failed to get meta-info: Get https://www.googleapis.com/bigquery/v2/projects/myproject/datasets/mydataset/tables?alt=json&pageToken=: oauth2: cannot fetch token: Post https://accounts.google.com/o/oauth2/token: API error 6 (urlfetch: SSL_CERTIFICATE_ERROR): [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)
我在谷歌上搜索了“CERTIFICATE\u VERIFY\u FAILED”,但我只能找到python程序。我的申请是GAE/Go计划


如何避免此错误?

这是因为Google已经更新了他们的服务器证书,但没有通知Go SDK团队,因为他们仍然拥有旧的证书

解决办法似乎相当简单

  • 转到
    google\u appengine\lib\cacerts\
  • cacerts.txt
    重命名为
    cacerts.txt.old
    ,将
    urlfetch\u cacerts.txt
    重命名为
    urlfetch\u cacerts.txt.old
  • 下载
  • 在这个Python SDK中还有
    google\u appengine\lib\cacerts\
    目录和这两个证书文件。将它们复制到您的Go SDK
  • 高兴吧!您现在有了更新的证书

  • 试着看看这个解决方案是否适用于您:我从1.9.50升级到1.9.53,我必须从1.9.50获得cacerts.txt和urlfetch_cacerts.txt才能让它再次工作。尝试了1.9.52和1.9.51,但没有成功。