Windows: проверка сертификата Python SSL не удалась - PullRequest
0 голосов
/ 18 октября 2018

Я установил Anaconda, и у меня возникли проблемы с SSL при попытке выполнить вызовы API через Блокноты Jupyter:

import requests
import certifi

r = requests.get('https://github.com/')
print(r)

Сначала возникла ошибка соединения SSL.Что я смог решить после тщательного поиска и помощи нашего ИТ-отдела.Решением здесь было добавление корневого сертификата компании в хранилище сертификатов.

Теперь, к сожалению, для других запросов у меня остались те же проблемы.Пример кода вызова Google Analytics API с пакетом google2pandas:

from google2pandas import *

query = {
    'reportRequests': [{
        'viewId' : 37616054,

        'dateRanges': [{
            'startDate' : '8daysAgo',
            'endDate'   : 'today'}],

        'dimensions' : [
            {'name' : 'ga:date'}, 
            {'name' : 'ga:pagePath'},
            {'name' : 'ga:browser'}],

        'metrics'   : [
            {'expression' : 'ga:pageviews'}],

        'dimensionFilterClauses' : [{
            'operator' : 'AND',
            'filters'  : [
                {'dimensionName' : 'ga:browser',
                 'operator' : 'REGEXP',
                 'expressions' : ['Firefox']},

                {'dimensionName' : 'ga:pagePath',
                 'operator' : 'REGEXP',
                 'expressions' : ['iPhone']}]
        }]
    }]
}

# Assume we have placed our client_secrets_v4.json file in the current
# working directory.

conn = GoogleAnalyticsQueryV4(secrets='Analytics.json')
df = conn.execute_query(query)

Здесь я все еще получаю ошибку SSL, которую я имел при простом вызове, также:

C: \ ProgramData\ Anaconda3 \ lib \ ssl.py в _create (cls, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname, context, session) 848 # неблокируемый 849 поднять ValueError ("do_handshake_on_connect" не следует указывать для неблокирования),-> 850 self.do_handshake () 851 кроме (OSError, ValueError): 852 self.close ()

C: \ ProgramData \ Anaconda3 \ lib \ ssl.py в do_handshake (self, block)
1106 если тайм-аут == 0.0 и блок: 1107
self.settimeout (нет) -> 1108 self._sslobj.do_handshake () 1109 наконец: 1110 self.settimeout (тайм-аут)

SSLCertVerificationError: [SSL:CERTIFICATE_VERIFY_FAILED] проверка сертификата не удалась: невозможно получить сертификат локального эмитента (_ssl.c: 1045)

Я считаю, что используется другая библиотека, которая не зависит от сертификатаЕсли я?Но я понятия не имею, где и как добавить свой корневой сертификат, поэтому все запросы iPython будут работать.

Любые идеи приветствуются.

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

Я добился прогресса.httplib2 - это пакет, который вызвал проблемы.У него есть собственный файл cacerts.txt, куда я также добавил корневой сертификат.

Cheers,

Andreas

0 голосов
/ 18 октября 2018

Я потратил несколько дней, чтобы понять, как решить эту проблему.Наконец, я добавляю сертификат CA моей компании в файл конфигурации, используемый библиотекой запросов.Вы можете проверить путь к этому файлу:

import requests as r
print(r.certs.where())

Просто добавьте сертификат внизу!

0 голосов
/ 18 октября 2018

Вы можете обезопасить __init__ метод ssl.SSLSocket, чтобы он всегда игнорировал проверку SSL-сертификата путем принудительного ввода параметра cert_reqs=CERT_NONE.

Добавьте это в начало вашего сценария:

import ssl
orig_sslsocket_init = ssl.SSLSocket.__init__
ssl.SSLSocket.__init__ = lambda *args, cert_reqs=ssl.CERT_NONE, **kwargs: orig_sslsocket_init(*args, cert_reqs=ssl.CERT_NONE, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...