2017-01-02 133 views
16

所以我在本地运行我的谷歌端点dev_appserver.py。 我使用API​​浏览器来测试应用程序。调用apiclient.discovery.build时URL无效和/或缺少SSL证书

我使用创建服务,这样我就可以调用API的代码如下:

from apiclient.discovery import build 
from oauth2client.client import GoogleCredentials 
credentials = GoogleCredentials.get_application_default() 
service = build('speech', 'v1beta1', credentials=credentials) 

我收到SSL错误(无效和/或丢失的SSL证书),即使当我通过浏览器访问指定的URL,它工作正常(即绿色挂锁出现)。

我不确定发生了什么变化,但是这个工作很好。

我试图禁用SSL检查,但无法。下面

全部日志:

INFO  2017-01-02 03:12:02,724 discovery.py:267] URL being requested: GET https://www.googleapis.com/discovery/v1/apis/speech/v1beta1/rest?userIp=0.2.0.3 
ERROR 2017-01-02 03:12:03,022 wsgi.py:263] 
Traceback (most recent call last): 
    File "/home/vini/opt/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle 
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler()) 
    File "/home/vini/opt/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler 
    handler, path, err = LoadObject(self._handler) 
    File "/home/vini/opt/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject 
    obj = __import__(path[0]) 
    File "/mnt/b117/home/vini/udacity/cerci-endpoint/api.py", line 28, in <module> 
    service = build('speech', 'v1beta1', credentials=credentials) 
    File "/mnt/b117/home/vini/udacity/cerci-endpoint/lib/oauth2client/_helpers.py", line 133, in positional_wrapper 
    return wrapped(*args, **kwargs) 
    File "/mnt/b117/home/vini/udacity/cerci-endpoint/lib/googleapiclient/discovery.py", line 222, in build 
    cache) 
    File "/mnt/b117/home/vini/udacity/cerci-endpoint/lib/googleapiclient/discovery.py", line 269, in _retrieve_discovery_doc 
    resp, content = http.request(actual_url) 
    File "/mnt/b117/home/vini/udacity/cerci-endpoint/lib/httplib2/__init__.py", line 1609, in request 
    (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey) 
    File "/mnt/b117/home/vini/udacity/cerci-endpoint/lib/httplib2/__init__.py", line 1351, in _request 
    (response, content) = self._conn_request(conn, request_uri, method, body, headers) 
    File "/mnt/b117/home/vini/udacity/cerci-endpoint/lib/httplib2/__init__.py", line 1307, in _conn_request 
    response = conn.getresponse() 
    File "/home/vini/opt/google-cloud-sdk/platform/google_appengine/google/appengine/dist27/gae_override/httplib.py", line 532, in getresponse 
    raise HTTPException(str(e)) 
HTTPException: Invalid and/or missing SSL certificate for URL: https://www.googleapis.com/discovery/v1/apis/speech/v1beta1/rest?userIp=0.2.0.3 

任何想法可能是造成这个问题呢?

我必须“安装”或更新python使用的SSL证书吗?

+1

同样从今天上午得到这个问题。可能是由于2016年 - > 2017年的变化。 – allsyed

回答

26

根据App Engine issue 13477似乎有些被列入App Engine Python SDK/gcloud-sdkurlfetch_cacerts.txt发现证书过期2017-01-01

作为临时解决办法,你可以用https://curl.haxx.se/ca/cacert.pem

+0

删除规定的证书确实解决了问题。 非常感谢。这让我疯狂。 – diogovk

+0

很棒@danielx!有用。谢谢。但我很惊讶他们还没有修复它 – neaGaze

-1

上了车本地开发环境,这个错误就在最近的2017年八月替换<your-cloud-sdk-path>/platform/google_appengine/lib/cacerts/urlfetch_cacerts.txt内容的解决方法是更新所有网址抓取调用和证书的验证力:

urlfetch.fetch(url=url, validate_certificate=True) 

没有碰gcloud证书(MacOS)。见Issuing an HTTPS request

+0

这并没有解决我的问题。 – svpino

0

建立在@danielx为macOS上的人的答案,这是对我有用。对我来说,证书路径是:

/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/cacerts/urlfetch_cacerts.txt 

更新它,我用下面的步骤:

cd /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/cacerts 
mv urlfetch_cacerts.txt urlfetch_cacerts.bup 
curl -o urlfetch_cacerts.txt -k https://curl.haxx.se/ca/cacert.pem 

如果您没有安装curl,则可以手动download证书的举动他们到上面的文件夹。 如果它已在运行,请不要忘记重新启动App Engine开发服务器。