Не удается выполнить запрос к URL с самозаверяющим сертификатом SSL - PullRequest
1 голос
/ 16 апреля 2019

Я не могу сделать запрос на этот URL: https://cobranca.homologa.bb.com.br:7101/registrarBoleto с самозаверяющим сертификатом SSL.

Я создаю SDK для интеграции с Banco do Brasil. BB является одним из крупнейших банков в Бразилии.

В документах, которые они дают, говорят, чтобы получить доступ к этому URLs и загрузить сертификат SSL для использования при запросах.

И конечная точка WSDL:

Я скачал все SSL возможные сертификаты из этих URLs и попытался выполнить этот запрос

from zeep import Client, Transport
from requests import Session

session = Session()
session.cert = "sdk_bancodobrasil/certificados/cobrancahomologabbcombr.pem"

transport = Transport(session=session)

cli = Client(
    'https://cobranca.homologa.bb.com.br:7101/Processos/Ws/RegistroCobrancaService.serviceagent?wsdl',
     transport=transport
)

Я получаю эту ошибку

Traceback (most recent call last):
  File "<input>", line 6, in <module>
  File "/usr/local/lib/python3.7/site-packages/zeep/client.py", line 62, in __init__
    wsdl, self.transport, settings=self.settings)
  File "/usr/local/lib/python3.7/site-packages/zeep/wsdl/wsdl.py", line 82, in __init__
    document = self._get_xml_document(location)
  File "/usr/local/lib/python3.7/site-packages/zeep/wsdl/wsdl.py", line 143, in _get_xml_document
    location, self.transport, self.location, settings=self.settings)
  File "/usr/local/lib/python3.7/site-packages/zeep/loader.py", line 74, in load_external
    content = transport.load(url)
  File "/usr/local/lib/python3.7/site-packages/zeep/transports.py", line 110, in load
    content = self._load_remote_data(url)
  File "/usr/local/lib/python3.7/site-packages/zeep/transports.py", line 126, in _load_remote_data
    response = self.session.get(url, timeout=self.load_timeout)
  File "/usr/local/lib/python3.7/site-packages/requests/sessions.py", line 546, in get
    return self.request('GET', url, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.7/site-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/requests/adapters.py", line 449, in send
    timeout=timeout
  File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 600, in urlopen
    chunked=chunked)
  File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 343, in _make_request
    self._validate_conn(conn)
  File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 839, in _validate_conn
    conn.connect()
  File "/usr/local/lib/python3.7/site-packages/urllib3/connection.py", line 344, in connect
    ssl_context=context)
  File "/usr/local/lib/python3.7/site-packages/urllib3/util/ssl_.py", line 335, in ssl_wrap_socket
    context.load_cert_chain(certfile, keyfile)
  File "/usr/local/lib/python3.7/site-packages/urllib3/contrib/pyopenssl.py", line 436, in load_cert_chain
    self._ctx.use_privatekey_file(keyfile or certfile)
  File "/usr/local/lib/python3.7/site-packages/OpenSSL/SSL.py", line 995, in use_privatekey_file
    self._raise_passphrase_exception()
  File "/usr/local/lib/python3.7/site-packages/OpenSSL/SSL.py", line 972, in _raise_passphrase_exception
    _raise_current_error()
  File "/usr/local/lib/python3.7/site-packages/OpenSSL/_util.py", line 54, in exception_from_error_queue
    raise exception_type(errors)
OpenSSL.SSL.Error: [('PEM routines', 'PEM_read_bio', 'no start line'), ('SSL routines', 'SSL_CTX_use_PrivateKey_file', 'PEM lib')]

Я пробовал все сертификаты, но безуспешно. Любая помощь будет потрясающей.

Кроме того, я попробовал несколько других so ответов об использовании SSL сертификата с requests, но не нашел ничего полезного.

1 Ответ

0 голосов
/ 18 апреля 2019

requests проверка библиотеки по умолчанию для доверенного CA certifi , если мы добавим правильный корневой сертификат в параметре verify, он пропустит запрос.

Попытка получить центр сертификацииpem-файл из цепочки сертификатов SSL домена https://cobranca.homologa.bb.com.br:7101/Processos/Ws/RegistroCobrancaService.serviceagent?wsdl.

и просто измените свой код на session.verify и передайте путь CA pem-файла.

session.verify = './sdk_bancodobrasil/certificados/AC_Banco_do_Brasil_v3_HOM.pem'
...