Я работаю над простым скриптом, который включает CAS, проверку безопасности jspring, перенаправление и т.д. Я хотел бы использовать python requests Кеннета Рейца, потому что это отличная работа! Однако CAS требует проверки через SSL, поэтому я должен сначала пройти этот шаг. Я не знаю, чего хотят запросы Python? Где должен находиться этот SSL-сертификат?
Traceback (most recent call last): File "./test.py", line 24, in <module> response = requests.get(url1, headers=headers) File "build/bdist.linux-x86_64/egg/requests/api.py", line 52, in get File "build/bdist.linux-x86_64/egg/requests/api.py", line 40, in request File "build/bdist.linux-x86_64/egg/requests/sessions.py", line 209, in request File "build/bdist.linux-x86_64/egg/requests/models.py", line 624, in send File "build/bdist.linux-x86_64/egg/requests/models.py", line 300, in _build_response File "build/bdist.linux-x86_64/egg/requests/models.py", line 611, in send requests.exceptions.SSLError: [Errno 1] _ssl.c:503: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Переведено автоматически
Ответ 1
Проблема, с которой вы столкнулись, вызвана ненадежным SSL-сертификатом.
Как и @dirk, упомянутый в предыдущем комментарии, самое быстрое исправление - это настройка verify=False:
requests.get('https://example.com', verify=False)
Обратите внимание, что это приведет к тому, что сертификат не будет проверен. Это подвергнет ваше приложение угрозам безопасности, таким как атаки типа "человек посередине".
Конечно, применяйте суждение. Как упоминалось в комментариях, это может быть приемлемо для быстрых / одноразовых приложений / скриптов, но на самом деле не должно использоваться в производственном программном обеспечении.
Если простой пропуск проверки сертификата неприемлем в вашем конкретном контексте, рассмотрите следующие варианты, ваш лучший вариант - установить для verify параметра строку, которая является путем к .pem файлу сертификата (который вы должны получить каким-либо безопасным способом).
Итак, начиная с версии 2.0, verify параметр принимает следующие значения с их соответствующей семантикой:
True: вызывает проверку сертификата в собственных доверенных центрах сертификации библиотеки (Примечание: вы можете увидеть, какие корневые сертификаты использует Requests, через библиотеку Certifi, доверенную базу данных RCS, извлеченную из Requests: Certifi - Trust Database for Humans).
False: полностью обходит проверку сертификата.
Путь к файлу CA_BUNDLE, который запросы будут использовать для проверки сертификатов.
Запросы могут проверять SSL-сертификаты для запросов HTTPS, точно так же, как веб-браузер. Чтобы проверить SSL-сертификат хоста, вы можете использовать аргумент verify:
Если вы не хотите проверять свой SSL-сертификат, сделайте verify=False
Ответ 3
Я столкнулся с той же проблемой, и проверка ssl-сертификата не удалась при использовании aws boto3, просмотрев код boto3, я обнаружил, что REQUESTS_CA_BUNDLE не установлено, поэтому я исправил обе проблемы, установив их вручную:
Я предполагаю, что для aws-cli установка REQUESTS_CA_BUNDLE в ~/.bashrc исправит эту проблему (не тестировалось, потому что мой aws-cli работает без нее).