python - google - Certificado SSL no válido y/o faltante para la URL cuando se llama a apiclient.discovery.build
library api (2)
Según el número 13477 de App Engine , parece que algunos de los certificados encontrados en urlfetch_cacerts.txt
que están incluidos en el App Engine Python SDK
/ gcloud-sdk
App Engine Python SDK
caducaron el 2017-01-01
.
Como una solución temporal, puede reemplazar los contenidos de <your-cloud-sdk-path>/platform/google_appengine/lib/cacerts/urlfetch_cacerts.txt
con https://curl.haxx.se/ca/cacert.pem
Así que estoy ejecutando mi punto final de google localmente con dev_appserver.py
. Uso el explorador API para probar la aplicación.
El código que estoy usando para crear el Servicio, para que pueda llamar a la API es el siguiente:
from apiclient.discovery import build
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
service = build(''speech'', ''v1beta1'', credentials=credentials)
Recibo un error SSL (certificado SSL no válido o faltante), aunque cuando accedo a la URL indicada mediante el navegador funciona bien (es decir, aparece el candado verde).
No estoy seguro de qué cambió, pero esto funcionaba bien no hace mucho tiempo.
Traté de desactivar la verificación SSL, pero no pude.
Registros completos a continuación:
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
¿Alguna idea de qué podría estar causando este problema?
¿Tengo que "instalar" o actualizar los certificados SSL utilizados por python?
Tengo este error en el entorno de desarrollo local tan recientemente como agosto de 2017. La solución es actualizar todas las llamadas a urlfetch y forzar la validación de los certs:
urlfetch.fetch(url=url, validate_certificate=True)
No tuvo que tocar los cert de gcloud (MacOS). Consulte Emitir una solicitud HTTPS .