Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';t使用自签名SSL证书执行对URL的请求_Python_Soap_Openssl_Soap Client_Zeep - Fatal编程技术网

Python Can';t使用自签名SSL证书执行对URL的请求

Python Can';t使用自签名SSL证书执行对URL的请求,python,soap,openssl,soap-client,zeep,Python,Soap,Openssl,Soap Client,Zeep,我无法请求此URL: https://cobranca.homologa.bb.com.br:7101/registrarBoleto具有自签名SSL证书 我正在构建一个SDK与巴西银行集成。BB是巴西最大的银行之一 在他们提供的文档中,他们说要访问这个URL,并下载SSL证书以用于请求 而WSDL端点是: 我已经从那些url下载了所有SSL证书,并尝试执行此请求 来自zeep导入客户端,传输 来自导入会话的请求 会话=会话() session.cert=“sdk\u bancod

我无法请求此URL:
https://cobranca.homologa.bb.com.br:7101/registrarBoleto
具有自签名SSL证书

我正在构建一个SDK与巴西银行集成。BB是巴西最大的银行之一

在他们提供的文档中,他们说要访问这个
URL
,并下载SSL证书以用于请求

WSDL
端点是:

我已经从那些
url
下载了所有
SSL
证书,并尝试执行此请求

来自zeep导入客户端,传输
来自导入会话的请求
会话=会话()
session.cert=“sdk\u bancodobrasil/certificados/cobrancahomologabbcombbr.pem”
传输=传输(会话=会话)
cli=客户端(
'https://cobranca.homologa.bb.com.br:7101/Processos/Ws/RegistroCobrancaService.serviceagent?wsdl',
运输
)
我犯了这个错误

回溯(最近一次呼叫最后一次):
文件“”,第6行,在
文件“/usr/local/lib/python3.7/site packages/zeep/client.py”,第62行,在__
wsdl,self.transport,settings=self.settings)
文件“/usr/local/lib/python3.7/site packages/zeep/wsdl/wsdl.py”,第82行,在__
document=self.\u获取\u xml\u文档(位置)
文件“/usr/local/lib/python3.7/site packages/zeep/wsdl/wsdl.py”,第143行,在“获取xml”文档中
位置,self.transport,self.location,settings=self.settings)
文件“/usr/local/lib/python3.7/site packages/zeep/loader.py”,第74行,在load\u external中
content=transport.load(url)
文件“/usr/local/lib/python3.7/site packages/zeep/transports.py”,第110行,已加载
内容=自身。\加载\远程\数据(url)
文件“/usr/local/lib/python3.7/site packages/zeep/transports.py”,第126行,加载远程数据
response=self.session.get(url,超时=self.load\u超时)
文件“/usr/local/lib/python3.7/site packages/requests/sessions.py”,get中的第546行
返回self.request('GET',url,**kwargs)
文件“/usr/local/lib/python3.7/site packages/requests/sessions.py”,请求中的第533行
resp=自我发送(准备,**发送)
文件“/usr/local/lib/python3.7/site packages/requests/sessions.py”,第646行,在send中
r=适配器.send(请求,**kwargs)
文件“/usr/local/lib/python3.7/site packages/requests/adapters.py”,第449行,在send中
超时=超时
文件“/usr/local/lib/python3.7/site packages/urllib3/connectionpool.py”,第600行,在urlopen中
分块=分块)
文件“/usr/local/lib/python3.7/site packages/urllib3/connectionpool.py”,第343行,在请求中
自我验证连接(连接)
文件“/usr/local/lib/python3.7/site packages/urllib3/connectionpool.py”,第839行,位于康涅狄格州
连接
文件“/usr/local/lib/python3.7/site packages/urllib3/connection.py”,第344行,在connect中
ssl(上下文=上下文)
文件“/usr/local/lib/python3.7/site packages/urllib3/util/ssl_uu.py”,第335行,在ssl_wrap_socket中
加载证书链(证书文件,密钥文件)
文件“/usr/local/lib/python3.7/site packages/urllib3/contrib/pyopenssl.py”,第436行,在load\u cert\u链中
self.\u ctx.使用私有密钥文件(密钥文件或证书文件)
文件“/usr/local/lib/python3.7/site packages/OpenSSL/SSL.py”,第995行,正在使用中\u privatekey\u文件
self.\u raise\u passphrase\u exception()
文件“/usr/local/lib/python3.7/site packages/OpenSSL/SSL.py”,第972行,在“提升”密码短语中
_引发当前错误()
文件“/usr/local/lib/python3.7/site packages/OpenSSL/_util.py”,第54行,在错误队列的异常中
引发异常类型(错误)
OpenSSL.SSL.Error:[('PEM routines'、'PEM_read_bio'、'no start line')、('SSL routines'、'SSL_CTX_use_PrivateKey_file'、'PEM lib')]
我尝试了所有的证书,但没有成功。任何帮助都会很棒


另外,我也尝试了一些其他的
,所以
关于使用
SSL
证书和
请求
的答案,但没有发现任何有用的东西。

请求
库默认检查受信任的CA,如果我们在
验证
参数中添加正确的根证书,它将通过请求

尝试从域的SSL证书链获取证书颁发机构pem文件

只需将代码更改为使用
会话。验证
并传递CA pem文件路径

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

请求
库默认检查受信任的CA,如果我们在
验证
参数中添加正确的根证书,它将通过请求

尝试从域的SSL证书链获取证书颁发机构pem文件

只需将代码更改为使用
会话。验证
并传递CA pem文件路径

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

不确定这在您的情况下是否有用,但在一般请求中。get()可以传递verify=False作为参数,以允许请求在出现SSL错误的情况下继续。在这种情况下,服务器验证证书,但我还是会尝试:)不确定这在您的情况下是否有用,但在一般请求中是如此。get()您可以将verify=False作为参数传递,以允许请求在出现SSL错误的情况下继续。在这种情况下,服务器将验证证书,但我还是会尝试:)