Python-Как решить проблему ssl.SSLError: [SSL: CA_MD_TOO_WEAK]

#python #api #ssl #zeep

#питон #API #ssl #зип

Вопрос:

У меня огромная проблема с авторизацией моего запроса 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  

В качестве вывода я получил два файла: ключ.пем и микерт.пем. С помощью команды certifi.where() я нашел местоположение моего файла cacert.pem и вставил в него содержимое файла mycert.pem.

К сожалению, ошибка все еще возникает. Кто-нибудь может объяснить, что я делаю не так?

Комментарии:

1. Один дополнительный вопрос. session.cert = (r’path_to_my_cert.pem’) и сертификат из папки certifiразличны. session.cert-это сертификат, предоставленный владельцем API. Я не обратил на это внимания, но в таком коде (с session.cert, определенным как внешний) используется ли этот внешний сертификат вместо сертификата от certifi?

Ответ №1:

В моем случае было полезно понизить версию python до 3.8.8. Это решило мою ошибку.