Недопустимый и/или отсутствующий сертификат SSL при использовании Google App Engine

ОБНОВЛЕНИЕ. Пожалуйста, если кто-то может помочь: Google ждет ввода и примеры этой проблемы в своем инструменте отслеживания ошибок. Если у вас есть воспроизводимые шаги для этой проблемы, поделитесь ими: https://code.google.com/p/googleappengine/issues/detail?id=10937

Я пытаюсь извлечь данные из API StackExchange с помощью бэкэнда Google App Engine. Как вы, возможно, знаете, некоторые из API-интерфейсов StackExchange зависят от сайта, требуя от разработчиков запускать запросы на каждом сайте, на котором зарегистрирован пользователь.

Итак, вот мой внутренний код для получения данных временной шкалы с этих сайтов. Переменная feed_info_site содержит имя сайта StackExchange (например, 'security', 'serverfault' и т.д.).

    data = json.loads(urllib.urlopen("%sme/timeline?%s" % 
        (self.API_BASE_URL, urllib.urlencode({"pagesize": 100, 
        "fromdate": se_since_timestamp, "filter": "!9WWBR
        (nmw", "site": feed_info_site, "access_token": 
    decrypt(self.API_ACCESS_TOKEN_SECRET, self.access_token), "key": 
self.API_APP_KEY}))).read())
for item in data['items']:
    ... # code for parsing timeline items

При выполнении этого запроса на всех сайтах, кроме Stack Overflow, все работает нормально. Что странно, когда для переменной feed_info_site установлено значение 'stackoverflow', я получаю следующую ошибку от Google App Engine:

    HTTPException: Invalid and/or missing SSL certificate for URL: 
https://api.stackexchange.com/2.2/me/timeline?
filter=%219WWBR%28nmw&access_token=
    <ACCESS_TOKEN_REMOVED>&fromdate=1&pagesize=100&key=
<API_KEY_REMOVED>&site=stackoverflow

Конечно, если я запускаю тот же запрос в Safari, я получаю результаты JSON, ожидаемые от API. Таким образом, проблема действительно связана с сервисом Google URLfetch. Я нашел несколько тем в разделе "Переполнение стека", связанных с аналогичными исключениями HTTPS/SSL, но принятый ответ не разрешил мои проблемы. Я попытался удалить файлы cacerts.txt. Я также попытался сделать вызов с помощью validate_certificate=False без каких-либо успехов.

Я думаю, что проблема не связана строго с HTTPS/SSL. Если да, как вы объясните, что изменение одного параметра API приведет к сбою запроса?

Ответ 1

  • Дождитесь следующего обновления для механизма приложения (скоро планируется), а затем обновите его.
  • Замените browserid.org/verify другой службой (verifier.loogin.persona.org/verify - хороший сервис, размещенный Mozilla, который может быть использован)
  • Убедитесь, что cacerts.txt не существует (похоже, что вы отсортированы, но только в кейсе:-))
  • Повторить попытку Удачи! -Brendan

Ответ 2

Я столкнулся с такой же ошибкой, теперь Google обновил движок приложения, исправлена ​​ошибка, проверьте обновленные документы.