2017-01-02 6 views
16

पर कॉल करते समय URL के लिए अमान्य और/या अनुपलब्ध SSL प्रमाणपत्र, इसलिए मैं dev_appserver.py के साथ स्थानीय रूप से अपना Google एंडपॉइंट चला रहा हूं। मैं एप्लिकेशन का परीक्षण करने के लिए एपीआई एक्सप्लोरर का उपयोग करता हूं।apiclient.discovery.build

कोड मैं सेवा बनाने के लिए उपयोग कर रहा हूँ, इसलिए मैं एपीआई कॉल कर सकते हैं है निम्नलिखित:

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

मैं SSL त्रुटि (अमान्य और/या लापता SSL प्रमाणपत्र) प्राप्त करते हैं, यहां तक ​​कि जब हालांकि मैं ब्राउज़र के माध्यम से निर्दिष्ट यूआरएल तक पहुंचता हूं यह ठीक काम करता है (यानी, हरा पैडलॉक दिखाता है)।

मुझे यकीन नहीं है कि क्या बदल गया है, लेकिन यह बहुत पहले ठीक काम नहीं कर रहा था।

मैंने 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 

कोई भी विचार क्या इस समस्या का कारण हो सकता है?

क्या मुझे पाइथन द्वारा उपयोग किए गए SSL प्रमाणपत्रों को "इंस्टॉल" या अपडेट करना है?

+1

इसी मुद्दे को आज सुबह से प्राप्त करना। वर्ष 2016 के बदलाव के कारण हो सकता है -> 2017. – allsyed

उत्तर

26

App Engine issue 13477 के अनुसार ऐसा लगता है कि प्रमाण पत्र urlfetch_cacerts.txt में पाया गया कि App Engine Python SDK/gcloud-sdk में शामिल है में से कुछ की समय सीमा समाप्त 2017-01-01

एक अस्थायी समाधान के रूप में, आप https://curl.haxx.se/ca/cacert.pem

+0

बताए गए प्रमाणपत्रों को हटाने से वास्तव में समस्या हल हो गई। बहुत बहुत धन्यवाद। यह मुझे पागल कर रहा था। – diogovk

+0

ग्रेट @ डैनियलक्स! यह काम करता हैं। धन्यवाद। लेकिन मुझे आश्चर्य है कि उन्होंने इसे अभी तक तय नहीं किया है – neaGaze

-1

अगस्त 2017 के रूप में हाल ही में के रूप में स्थानीय देव पर्यावरण पर यह त्रुटि आई के साथ <your-cloud-sdk-path>/platform/google_appengine/lib/cacerts/urlfetch_cacerts.txt की सामग्री को बदल सकते हैं ठीक सभी UrlFetch कॉल और प्रमाणपत्र के बल सत्यापन अद्यतन करने के लिए है:

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

gcloud certs (MacOS) को स्पर्श करने की आवश्यकता नहीं थी। Issuing an HTTPS request देखें।

+0

इससे मेरे लिए समस्या ठीक नहीं हुई। – svpino

0

मैकोज़ पर उन लोगों के लिए @danielx द्वारा उत्तर देने के लिए, यह मेरे लिए काम करता है। मेरे लिए प्रमाण पत्र के लिए पथ था:

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 प्रमाण पत्र एक चाल:

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

इसे अद्यतन करने के लिए, मैं निम्नलिखित चरणों का इस्तेमाल किया उन्हें उपरोक्त फ़ोल्डर में। यदि यह पहले से चल रहा है, तो App Engine dev सर्वर को पुनरारंभ करना न भूलें।