web-dev-qa-db-de.com

Ungültiges und/oder fehlendes SSL-Zertifikat für URL beim Aufruf von apiclient.discovery.build

Also führe ich meinen Google-Endpunkt lokal mit dev_appserver.py. Aus. Ich verwende den API-Explorer, um die Anwendung zu testen.

Der Code, den ich für die Erstellung des Dienstes verwende, kann wie folgt aufgerufen werden:

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

Ich erhalte einen SSL-Fehler (ungültiges und/oder fehlendes SSL-Zertifikat), obwohl der Zugriff auf die angegebene URL über den Browser einwandfrei funktioniert (dh das grüne Vorhängeschloss wird angezeigt).

Ich bin nicht sicher, was sich geändert hat, aber das hat vor kurzem funktioniert.

Ich habe versucht, die SSL-Prüfung zu deaktivieren, konnte dies jedoch nicht.

Vollständige Protokolle unten:

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

Irgendwelche Ideen, was dieses Problem verursachen könnte? 

Muss ich die von python verwendeten SSL-Zertifikate "installieren" oder aktualisieren?

17
diogovk

Laut App Engine Ausgabe 13477 scheinen einige der Zertifikate in urlfetch_cacerts.txt, die in App Engine Python SDK/gcloud-sdk enthalten sind, 2017-01-01 abgelaufen zu sein.

Als temporäre Problemumgehung können Sie den Inhalt von <your-cloud-sdk-path>/platform/google_appengine/lib/cacerts/urlfetch_cacerts.txt durch https://curl.haxx.se/ca/cacert.pem ersetzen.

26
danielx

Um auf die Antwort von @danielx für diejenigen unter macOS aufzubauen, hat dies für mich funktioniert. Der Weg zu den Zertifikaten war für mich:

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

Um es zu aktualisieren, habe ich die folgenden Schritte ausgeführt:

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

Wenn Sie curl nicht installiert haben, können Sie die Zertifikate manuell download herunterladen und sie in den Ordner darüber verschieben. Vergessen Sie nicht, den App Engine-Entwicklungsserver neu zu starten, wenn er bereits läuft.

0
seyisulu