2017-04-03 81 views
2

我正在開發GAE/Go應用程序,並嘗試從本地開發服務器連接Google Big Query。GAE上的SSL:CERTIFICATE_VERIFY_FAILED/Go

我的代碼是這樣的。

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_VERIFY_FAILED」,但我能找到的只是python程序。我的應用程序是GAE/Go程序。

我該如何避免這個錯誤?

+1

嘗試,如果這個解決方案適用於您:http://stackoverflow.com/questions/43221963/google-app-engine-ssl-certificate-error/43233424#43233424 –

回答

2

這是因爲Google已經更新了他們的服務器證書,但還沒有通知Go SDK團隊這個仍然擁有舊證書的團隊。

該解決方案看起來相當簡單。

  1. 轉到google_appengine\lib\cacerts\
  2. 重命名cacerts.txtcacerts.txt.old,並urlfetch_cacerts.txturlfetch_cacerts.txt.old
  3. 下載Python Linux SDK 1.9.52
  4. 在這個Python SDK中還有google_appengine\lib\cacerts\目錄與這兩個證書文件。將它們複製到您的Go SDK。
  5. 歡喜!您現在擁有較新的證書。看
+0

我從50年9月1日升級到1.9.53,我必須從1.9.50中獲取cacerts.txt和urlfetch_cacerts.txt才能使其再次運行。嘗試1.9.52和1.9.51沒有成功。 – Craig