J'exécute donc mon point de terminaison Google localement avec dev_appserver.py
. J'utilise l'API Explorer pour tester l'application.
Le code que j'utilise pour créer le service afin que je puisse appeler l'API est le suivant:
from apiclient.discovery import build
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
service = build('speech', 'v1beta1', credentials=credentials)
Je reçois une erreur SSL (certificat SSL invalide et/ou manquant), même si cela fonctionne correctement lorsque j'accède à l'URL indiquée via le navigateur (le cadenas vert s'affiche).
Je ne sais pas ce qui a changé, mais cela fonctionnait bien il n'y a pas si longtemps.
J'ai essayé de désactiver la vérification SSL, mais je n'ai pas pu.
Journaux complets ci-dessous:
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
Des idées ce qui pourrait causer ce problème?
Dois-je "installer" ou mettre à jour les certificats SSL utilisés par python?
Selon le numéro 13477 d'App Engine , il semble que certains des certificats trouvés dans urlfetch_cacerts.txt
et inclus dans le App Engine Python SDK
/gcloud-sdk
ayant expiré le 2017-01-01
.
Pour contourner le problème, vous pouvez remplacer le contenu de <your-cloud-sdk-path>/platform/google_appengine/lib/cacerts/urlfetch_cacerts.txt
par https://curl.haxx.se/ca/cacert.pem
Pour compléter la réponse de @danielx à ceux qui utilisent macOS, c’est ce qui a fonctionné pour moi. Le chemin d'accès aux certificats pour moi était:
/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/cacerts/urlfetch_cacerts.txt
Pour le mettre à jour, j'ai utilisé les étapes suivantes:
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
Si vous n'avez pas installé curl
, vous pouvez manuellement télécharger les certificats et les déplacer dans le dossier ci-dessus. N'oubliez pas de redémarrer le serveur dev App Engine s'il est déjà en cours d'exécution.