![](/img/trans.png)
[英]How to fix SSL issue SSL_CTX_use_certificate : ca md too weak on Python Zeep
[英]Python-How to solve ssl.SSLError: [SSL: CA_MD_TOO_WEAK]
我的 API 请求的授权遇到了一个大问题。 我正在使用 python 3.10。 为了设置客户端,我有如下代码:
from zeep import exceptions, helpers
from requests import Session
from zeep.transports import Transport
from zeep import Client
def login(register):
.......
elif register == 'XXX':
authTok = '' #only for coherence
wsdl_path = r"path_to_my_wsdl.wsdl"
url = urllib.parse.urljoin('file:', urllib.request.pathname2url(os.path.abspath(wsdl_path)))
session = Session()
session.verify = False
session.cert = (r'path_to_my_cert.pem')
client = Client(wsdl=url, transport=Transport(session=session))
return client, authTok
然后我使用下面的代码来获取客户端:
client, authTok = login('XXX')
search = {}
search['sort'] = {'sort_att': 'number',
'sort_asc': 'True'}
search['criterion'] = {'search_range': 'RP', 'id': '123456789'}
直到这一步没有错误。 最后我尝试像这样发送我的请求: r = client.service.searchcompany(params=search)
在这里我得到这样的错误:
ssl.SSLError: [SSL: CA_MD_TOO_WEAK] ca md too weak (_ssl.c:3862)
使用 openssl 我生成了新证书:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out mycert.pem -sha256 -days 365 -nodes
作为 output,我收到了两个文件:key.pem 和 mycert.pem。 使用命令certifi.where()
我找到了文件 cacert.pem 的位置并将文件 mycert.pem 的内容粘贴到其中。
不幸的是,错误仍然发生。 谁能解释我做错了什么?
就我而言,将 python 的版本降级到 3.8.8 很有帮助。 这解决了我的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.