Я использую Zeep, чтобы обернуть файл WSDL и пытаюсь подключиться к удаленному веб-сервису. Он использует SSLv3 и пытается загрузить закрытый ключ, который я извлек из файла PFX, созданного для меня поставщиком веб-услуг.
Я видел, что у других людей возникают проблемы с загрузкой закрытого ключа (вызов функции OpenSSL SSL_CTX_use_PrivateKey_file
) в той степени, в которой он защищен паролем, но, похоже, это приводит к ошибке. В моем случае закрытый ключ выглядит правильно отформатированным, не защищенным паролем, но вызов Python для вышеупомянутой привязки просто зависает. Трассировка стека до этой точки выглядит следующим образом:
-> return self._client.service.MarketInfo(Header=header, Request=req)
c:\users\phennings\venvs\ercot-ews-py-3.6.7-x64\lib\site- packages\zeep\proxy.py(42)__call__()
-> self._op_name, args, kwargs)
c:\users\phennings\venvs\ercot-ews-py-3.6.7-x64\lib\site- packages\zeep\wsdl\bindings\soap.py(124)send()
-> options['address'], envelope, http_headers)
c:\users\phennings\venvs\ercot-ews-py-3.6.7-x64\lib\site-packages\zeep\transports.py(95)post_xml()
-> return self.post(address, message, headers)
c:\users\phennings\venvs\ercot-ews-py-3.6.7-x64\lib\site-packages\zeep\transports.py(67)post()
-> timeout=self.operation_timeout)
c:\users\phennings\venvs\ercot-ews-py-3.6.7-x64\lib\site-packages\requests\sessions.py(572)post()
-> return self.request('POST', url, data=data, json=json, **kwargs)
c:\users\phennings\venvs\ercot-ews-py-3.6.7-x64\lib\site-packages\requests\sessions.py(524)request()
-> resp = self.send(prep, **send_kwargs)
c:\users\phennings\venvs\ercot-ews-py-3.6.7-x64\lib\site-packages\requests\sessions.py(637)send()
-> r = adapter.send(request, **kwargs)
c:\users\phennings\venvs\ercot-ews-py-3.6.7-x64\lib\site-packages\requests\adapters.py(449)send()
-> timeout=timeout
c:\users\phennings\venvs\ercot-ews-py-3.6.7-x64\lib\site-packages\urllib3\connectionpool.py(600)urlopen()
-> chunked=chunked)
c:\users\phennings\venvs\ercot-ews-py-3.6.7-x64\lib\site-packages\urllib3\connectionpool.py(343)_make_request()
-> self._validate_conn(conn)
c:\users\phennings\venvs\ercot-ews-py-3.6.7-x64\lib\site-packages\urllib3\connectionpool.py(839)_validate_conn()
-> conn.connect()
c:\users\phennings\venvs\ercot-ews-py-3.6.7-x64\lib\site-packages\urllib3\connection.py(344)connect()
-> ssl_context=context)
> c:\users\phennings\venvs\ercot-ews-py-3.6.7-x64\lib\site-packages\urllib3\util\ssl_.py(333)ssl_wrap_socket()
-> context.load_cert_chain(certfile, keyfile)
c:\users\phennings\venvs\ercot-ews-py-3.6.7-x64\lib\site-packages\urllib3\contrib\pyopenssl.py(436)load_cert_chain()
-> self._ctx.use_privatekey_file(keyfile or certfile)
c:\users\phennings\venvs\ercot-ews-py-3.6.7-x64\lib\site-packages\openssl\ssl.py(993)use_privatekey_file()
-> use_result = _lib.SSL_CTX_use_PrivateKey_file(
Без каких-либо ошибок я действительно не уверен, как продолжить устранение неполадок отсюда. Поиски в Google функции SSL_CTX_use_PrivateKey_file
, по-видимому, приводят только к проблемам, которые вызывают какую-то ошибку.
У кого-нибудь есть хороший совет, что делать дальше?