Requests: Установил certifi, установил REQUESTS_CA_BUNDLE env var, по-прежнему получаю ошибку SSL.

Созданный на 25 июл. 2013  ·  10Комментарии  ·  Источник: psf/requests

Я использую модуль jenkinsapi, который использует внутренние запросы. Если я попытаюсь использовать его из коробки, указав на сервер jenkins, который использует SSL, я получу:

SSLError: [Errno 1] _ssl.c: 504: error: 14090086 : SSL- подпрограммы: SSL3_GET_SERVER_CERTIFICATE : не удалось проверить сертификат

jenkinsapi не предоставляет ловушку для установки verify = False. Я попытался сохранить сертификат с сервера jenkins и установить переменную среды REQUESTS_CA_BUNDLE, чтобы указать на него, но все равно получил ту же ошибку. Я также пробовал установить certifi, но это не имеет значения.

Я знаю, что могу взломать код jenkinsapi, но это неудовлетворительно, потому что все пользователи моего кода должны будут делать то же самое. Я что-то не замечаю?

Самый полезный комментарий

Я столкнулся с той же проблемой и проблемой ssl certifacate verify failed, просмотрев код boto3, я обнаружил, что REQUESTS_CA_BUNDLE не установлен, поэтому я исправил обе проблемы, установив его вручную:

from boto3.session import Session
import os

# debian
os.environ['REQUESTS_CA_BUNDLE'] = os.path.join(
    '/etc/ssl/certs/',
    'ca-certificates.crt')
# centos
#   'ca-bundle.crt')

Для aws-cli, я думаю, установка REQUESTS_CA_BUNDLE в ~ / .bashrc устранит эту проблему (не проверено, потому что мой aws-cli работает без него)

REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt # ca-bundle.crt
export REQUESTS_CA_BUNDLE

Все 10 Комментарий

Не могли бы вы показать мне, как выглядел сохраненный сертификат? Должно быть возможно просто вставить его сюда.

Спасибо за ответ. Я повторно сохранил сертификат, и теперь все работает.

Черт! Я заговорил слишком рано. Вот сертификат:

----- НАЧАТЬ СЕРТИФИКАТ -----
MIIGQDCCBSigAwIBAgIKWQnHpQAAAAAIzjANBgkqhkiG9w0BAQUFADBZMRMwEQYK
CZImiZPyLGQBGRYDY29tMRQwEgYKCZImiZPyLGQBGRYEZWJheTEUMBIGCgmSJomT
8ixkARkWBGNvcnAxFjAUBgNVBAMTDUFNRVItU1NMQ0EtMDIwHhcNMTIxMTE4MDUz
MTA4WhcNMTQxMTE4MDUzMTA4WjB1MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs
aWZvcm5pYTERMA8GA1UEBxMIU2FuIEpvc2UxFDASBgNVBAoTC1BheVBhbCBJbmMu
MQwwCgYDVQQLEwNDRUkxGjAYBgNVBAMTEWZ1c2lvbi5wYXlwYWwuY29tMIIBIjAN
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwOZj4ezQ / k5vTU6E63uNsP + LZjeg
4kTEUwSzFsRj3NImQdfOrQ7W7S386ep2EZZqmjevO6HBzkaXaYYQ0GSqthdspd53
A8GnLi0q43oFy + kyAc2ItAM0SH / GOt0J + 5EUdS12S821WMiwebHInSHINAjexAHN
Sm87yXCyO8mZ3Jzc3 + PFraveF9WFmE0NLZUDpEMxq17K3 / 6iGLsVO / YZkUpaAXNJ
962fGrIZ4xcvK // S903ehloKwQnRCgtNoGCmvsoDftbYye6LfRh / rH3xWFXIUmWG
Wib27ZwAgbyxz2FPcexie4FB / IzbH2l9Tp5rzGWfs1159VmVhQ / L3EJIDQIDAQAB
o4IC7DCCAugwHQYDVR0OBBYEFMkZJD5QaahE21k37UvPIP1VmZ1SMB8GA1UdIwQY
MBaAFLI24M3s4ViBTJbTf1lWAEsUzehVMIIBDQYDVR0fBIIBBDCCAQAwgf2ggfqg
gfeGgb9sZGFwOi8vL0NOPUFNRVItU1NMQ0EtMDIsQ049QU1FUi1TU0xDQS0wMixD
Tj1DRFAsQ049UHVibGljJTIwS2V5JTIwU2VydmljZXMsQ049U2VydmljZXMsQ049
Q29uZmlndXJhdGlvbixEQz1jb3JwLERDPWViYXksREM9Y29tP2NlcnRpZmljYXRl
UmV2b2NhdGlvbkxpc3Q / YmFzZT9vYmplY3RDbGFzcz1jUkxEaXN0cmlidXRpb25Q
b2ludIYzaHR0cDovL3BraS5jb3JwLmViYXkuY29tL0NlcnREYXRhL0FNRVItU1NM
Q0EtMDIuY3JsMIIBTgYIKwYBBQUHAQEEggFAMIIBPDCBsQYIKwYBBQUHMAKGgaRs
ZGFwOi8vL0NOPUFNRVItU1NMQ0EtMDIsQ049QUlBLENOPVB1YmxpYyUyMEtleSUy
MFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9Y29ycCxE
Qz1lYmF5LERDPWNvbT9jQUNlcnRpZmljYXRlP2Jhc2U / b2JqZWN0Q2xhc3M9Y2Vy
dGlmaWNhdGlvbkF1dGhvcml0eTBbBggrBgEFBQcwAoZPaHR0cDovL3BraS5jb3Jw
LmViYXkuY29tL0NlcnREYXRhL0FNRVItU1NMQ0EtMDIuY29ycC5lYmF5LmNvbV9B
TUVSLVNTTENBLTAyLmNydDApBggrBgEFBQcwAYYdaHR0cDovL3BraS5jb3JwLmVi
YXkuY29tL29jc3AwIQYJKwYBBAGCNxQCBBQeEgBXAGUAYgBTAGUAcgB2AGUAcjAL
BgNVHQ8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDQYJKoZIhvcNAQEFBQAD
ggEBAFj5s9SdtRpXLz03BjPFsDvQPzoyML9ngHL5zyYMlotUpD7d + aO41Q2E2 + LO
REfbd3NAnLT3MfWMHAxNaZ4TRUog1fFJmLJxHTBax5fpmY8YAhiPjQIO + IZOUZO3
4lAwXKsq4ylWS2tlbxL56mPngN2EzLisWgIZqJSx9zd1K / LvKyvs / R3wxBerhTN5
LyHFf9 / ByUhaqgIE8jydM4qiS8o3zxjrPAIbi6lnZjktkguYTSAKDoHb17BkNoPr
mU1xDtD1 / FuX22dfHpqmJSYVubPVfUTvGB3julT2GNNREoHsQI7wmgFBEMaTdvJq
42DUnHIK0pdMzb2urxL / toZ3mHY =
----- КОНЕЦ СЕРТИФИКАТА -----

Отслеживание (последний вызов последний):
Файл "goal.py", строка 3, в
J = api.Jenkins ('https: // fusion. [УДАЛЕНО] .com / jenkins /')
Файл "C: \ python27 \ lib \ site-packages \ jenkinsapi \ jenkins.py", строка 35, в init
JenkinsBase. init (сам, baseurl)
Файл "C: \ python27 \ lib \ site-packages \ jenkinsapi \ jenkinsbase.py", строка 27, в init
self.poll ()
Файл "C: \ python27 \ lib \ site-packages \ jenkinsapi \ jenkinsbase.py", строка 49, в опросе
self._data = self._poll ()
Файл "C: \ python27 \ lib \ site-packages \ jenkinsapi \ jenkinsbase.py", строка 53, в _poll
вернуть self.get_data (url)
Файл "C: \ python27 \ lib \ site-packages \ jenkinsapi \ jenkinsbase.py", строка 57, в get_data
response = Requester.get_url (url)
Файл "C: \ python27 \ lib \ site-packages \ jenkinsapi \ utils \ Requester.py", строка 59, в get_url
вернуть requests.get (url, _requestKwargs)Файл "C: \ python27 \ lib \ site-packages \ requests \ api.py", строка 55, в getзапрос на возврат ('get', url, * _kwargs)Файл "C: \ python27 \ lib \ site-packages \ requests \ api.py", строка 44, в запросевернуть session.request (метод = метод, url = url, * _kwargs)Файл "C: \ python27 \ lib \ site-packages \ requests \ sessions.py", строка 335, в запросеresp = self.send (подготовка, * _send_kwargs)Файл "C: \ python27 \ lib \ site-packages \ requests \ sessions.py", строка 438, в отправкеr = adapter.send (запрос, * kwargs)
Файл "C: \ python27 \ lib \ site-packages \ requests \ adapters.py", строка 331, в отправке
поднять SSLError (e)
requests.exceptions.SSLError: [Errno 1] _ssl.c: 504: ошибка: 14090086 : подпрограммы SSL

Не могли бы вы попытаться подключиться с помощью запросов напрямую, не проходя через jenkinsapi, но при передаче сертификата, который вы сохраняете для запросов.

r = requests.get (url, verify = certfile)

SSLError: [Errno 1] _ssl.c: 504: error: 14090086 : SSL- подпрограммы: SSL3_GET_SERVER_CERTIFICATE : не удалось проверить сертификат

r = requests.get (URL, сертификат = файл сертификата)

SSLError: [Errno 336265225] _ssl.c: 351: ошибка: 140B0009 : подпрограммы SSL

Означает ли это, что у меня должен быть закрытый ключ? Сомневаюсь, что владельцы серверов дадут мне его.

Извините, не обращайте внимания на вторую часть - я понял, что указание "сертификата" касается аутентификации на сервере, а это не проблема.

Теперь мы знаем, что проблема в сертификате :-)
Учитывая, что сертификат исходит от центра сертификации, а не от самого сервера: завершена ли цепочка тяги?
Вы должны увидеть эту цепочку в своем браузере, куда вы экспортировали сертификат.
Для проверки сертификата требуется полная цепочка. Последний элемент отправляется сервером, я предполагаю, что вы сохранили только корневой сертификат в файл.
Вам по-прежнему нужны все сертификаты между корнем и листом. Они могут быть отправлены сервером вместе с листовым сертификатом, или вы должны иметь возможность добавить их в файл сертификата.

Спасибо - наконец-то все заработало! Подводя итог, на случай, если это будет полезно для кого-то другого: мне нужно было экспортировать каждый сертификат в цепочке с самого сервера в корень, сохраняя каждый в формате base64, затем скопировать все сертификаты в один файл и установить среду переменная REQUESTS_CA_BUNDLE, чтобы указать на нее.

В очередной раз благодарим за помощь!

Для других гуглеров - вы можете отключить проверку SSL в jenkinsapi, используя:

from jenkinsapi.jenkins import Jenkins
from jenkinsapi.utils.requester import Requester

j = Jenkins(base_url, requester=Requester(username, password, baseurl=base_url, ssl_verify=False))

Я столкнулся с той же проблемой и проблемой ssl certifacate verify failed, просмотрев код boto3, я обнаружил, что REQUESTS_CA_BUNDLE не установлен, поэтому я исправил обе проблемы, установив его вручную:

from boto3.session import Session
import os

# debian
os.environ['REQUESTS_CA_BUNDLE'] = os.path.join(
    '/etc/ssl/certs/',
    'ca-certificates.crt')
# centos
#   'ca-bundle.crt')

Для aws-cli, я думаю, установка REQUESTS_CA_BUNDLE в ~ / .bashrc устранит эту проблему (не проверено, потому что мой aws-cli работает без него)

REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt # ca-bundle.crt
export REQUESTS_CA_BUNDLE
Была ли эта страница полезной?
0 / 5 - 0 рейтинги