2017-01-02 89 views
16

Vì vậy, tôi đang chạy điểm cuối google của mình tại địa phương với dev_appserver.py. Tôi sử dụng trình khám phá API để kiểm tra ứng dụng.Chứng chỉ SSL không hợp lệ và/hoặc thiếu cho URL khi gọi apiclient.discovery.build

Mã Tôi đang sử dụng để tạo ra dịch vụ, vì vậy tôi có thể gọi API như sau:

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

tôi nhận được một lỗi SSL (chứng chỉ SSL hợp lệ và/hoặc mất tích), mặc dù khi Tôi truy cập vào URL đã được thông qua trình duyệt nó hoạt động tốt (có nghĩa là, ổ khóa màu xanh lá cây xuất hiện).

Tôi không chắc chắn những gì đã thay đổi, nhưng điều này đã hoạt động tốt cách đây không lâu.

Tôi đã cố tắt kiểm tra SSL nhưng không thể.

bản ghi đầy đủ dưới đây:

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 

Bất cứ ý tưởng gì có thể gây ra vấn đề này?

Tôi có phải "cài đặt" hoặc cập nhật chứng chỉ SSL được sử dụng bởi python không?

+1

Cùng gặp vấn đề này từ sáng nay. Có thể là do thay đổi năm 2016 -> 2017. – allsyed

Trả lời

26

Theo App Engine issue 13477 có vẻ như một số các chứng chỉ được tìm thấy trong urlfetch_cacerts.txt được bao gồm trong các App Engine Python SDK/gcloud-sdk hết hạn 2017-01-01.

Là một workaround tạm thời, bạn có thể thay thế các nội dung của <your-cloud-sdk-path>/platform/google_appengine/lib/cacerts/urlfetch_cacerts.txt với https://curl.haxx.se/ca/cacert.pem

+0

Xóa chứng chỉ đã nêu thực sự đã giải quyết được sự cố. Cảm ơn bạn rất nhiều. Điều này khiến tôi phát điên. – diogovk

+0

Great @danielx! Nó hoạt động. Cảm ơn. Nhưng tôi ngạc nhiên khi họ chưa sửa nó – neaGaze

-1

Got lỗi này trên môi trường dev địa phương như thời gian gần đây như tháng tám năm 2017. Việc sửa chữa là để cập nhật tất cả các cuộc gọi nạp url và xác nhận lực lượng của Certs:

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

Không cần phải chạm vào chứng chỉ gcloud (MacOS). Xem Issuing an HTTPS request.

+0

Điều này không khắc phục được vấn đề của tôi. – svpino

0

Để xây dựng câu trả lời của @danielx cho những người dùng trên hệ điều hành MacOS, đây là những gì đã hiệu quả đối với tôi. Đường dẫn đến các chứng chỉ đối với tôi là:

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

Để cập nhật nó, tôi đã sử dụng các bước sau:

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 

Nếu bạn không có curl cài đặt, bạn có thể tự download giấy chứng nhận một động thái chúng vào thư mục ở trên. Đừng quên khởi động lại máy chủ dev của Máy ứng dụng nếu máy chủ đang chạy.

Các vấn đề liên quan