Зашифруйте тело запроса SOAP с помощью Python

#python #soap #python-requests #zeep

Вопрос:

Я использую библиотеку Python Zeep для отправки запросов SOAP. Моя проблема в том, что первый запрос возвращает сертификат, который конечная точка ожидает использовать для шифрования тела для всех других методов.

Я пытался подписывать запросы в соответствии с документацией Zeep, но, похоже, это не одно и то же.

Я не уверен, правильно ли я использую настройку для выполнения запросов soap такого типа. Есть ли способ зашифровать тело с помощью Zeep или любой другой библиотеки python? (принимается любое рабочее решение)

К сожалению, мне пришлось анонимизировать некоторую информацию, но, пожалуйста, не стесняйтесь запрашивать подробности, если они могут оказаться полезными для решения проблемы

 from zeep import Client as cl from requests import Session from zeep.transports import Transport from zeep.plugins import HistoryPlugin  history = HistoryPlugin() session = Session() session.verify = False # the response is signed with a certificate that fails verification, as it is just a placeholder certificate used in the test environment  transport = Transport(session=session, timeout=10, operation_timeout=10) client = cl(url, transport=transport, plugins=[history],)  headers = {...} # Here the headers contain some unique ids and time of the request  response = client.service.getCertificate(_soapheaders=headers) # this returns a object that has a certificate at .body.content  certPEM = response('body')('content') # this is the certificate I need to use to encrypt the body  factory = client.type_factory('ns0') expectedData = factory.expectedData(expectedData1=base64.b64encode(str.encode(someData)), expectedData2=str.encode(someOtherData))  # the factory seems to work just fine and the soap data object seems to be parsed correctly. client.service.secondRequest(_soapheaders=headers, expectedData=expectedData) # This fails, with a "certificate not valid" error, and, according to the endpoint documentation, it sees to be caused by the fact that the body is not encrypted with the certificate received above  

пример зашифрованного тела SOAP (согласно документации)

 lt;soapenv:Bodygt;  lt;xenc:EncryptedData Id="ED-F3FCAC3C34D9D25B87163351066951112" Type="http://www.w3.org/2001/04/xmlenc#Content"  xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"gt;  lt;xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/gt;  lt;ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"gt;  lt;wsse:SecurityTokenReference wsse11:TokenType="http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#EncryptedKey"  xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"  xmlns:wsse11="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd"gt;  lt;wsse:Reference URI="#EK-F3FCAC3C34D9D25B87163351066951111"/gt;  lt;/wsse:SecurityTokenReferencegt;  lt;/ds:KeyInfogt;  lt;xenc:CipherDatagt;  lt;xenc:CipherValuegt;cTBg4srW4xEOlz2/ycn8PLbBeh7FzZflqZ/k87oDClpaumzuAoiTUnRBSQJiaLXlnh4oS7/BlyC8JXMYr2m4N7RoWspUphDMkemA8/q0vF00J1Vf MP uOOQKOIBpHKsnMt8bqmFrCDXp0WUebLy6oEd/CVKlRFYkzw0lkj15NcL/wZMhKvRB2Qyz20W3gpzyz7eN2bg fWvPsCVXLZJRTY8CEtGRvBsuddmt5pUiSSAAYbKXksKg9BgeywD2pRNghuhOcMYPrV6n1Oi7 183ShrBVZcO84PyNpsrwlCRC Bnbl3HYOeLxAljXkxjbxkBCGYXaJWZ1IzQ2a0Sg/HLO6hDAMriqnnpLnRsbIkpGBjHFT7M0GeO7FEDHAg3LKyeCm4ivR9fTSxIOijZDXdAoy4pANRsYPyGLbGEYu e cPMlX5LE63T41C5mJ61qynla1HTbvxelsHVm3bXevj5Umq5HdVDlPD0kLSRQ4KPOlPGnLG9QTyzxAbSliBygQLDpdMM1zydEU7kcNfRUZQK1a536R0VyEcfFTvBKk4QBk87TtOuSAd BhT/IlGp91xKToWLvLXc76m46rBRuTgt1LZzj07WucRFsvxpO3iDB889Oy v7BKFJmrIR7i QHHYpjD1/ZRSRZo Hl9wXPOh2kXOZquc 6K8GsFa74OfS6otVduBM431vhzqL4jwKJYAXDgN9D/q7R/duIUE2MfvwyqFBNC/NTo9PQdielnyU6R7v1r/Xd7RgR/vWtSvfsDxGwV9uSr2N9/MiJZ7s3VK7o3BmMB3adHX7wiqy8fu e2wZ4pJi9fvcxN/8dx6jrDnCUU7886CK8Etu4lUnCHUrOKnOyn3vq0qylw7aEhnyVzjG8eMPXWuRCP/SwB8RRQ604csZjYQDE1C1XHpw3d9iaR1UuKA6DgI0u4YASl22hb21CNGpUiMP4EUcUwHVONdhBlfnniRxyMi4m6V8/n9iMevIIfA27W3D4YSMAQ oABdCscTC95rC8QK8X2jlfPQGbZmjIGV6xaHqU64K4xQDVCUQTHcycpPkJ59MpJ2/L4BhEHlPngrBLrZMrXkmh3qV8P9 Cgsm3qzwJI8KeSfeUKkEx xFz34HFFbHDmuN5FohLUt/Z/ICmLtaSVzD6EIWLf2sLl9jk4xFfIHI3d/nmvE8tqnKh54VVDYkow1oBv5NM0M2I1U7NfkOneOj3g9yLItQM472HU7UQDY xkwZ9N6Zj3Q/ipakXlD6/oDulPIwB/QhNKSMRHoczY32b/qjiBkvEC8eYT3XZgdsGQ1WUQo g5AhuYNtEseu5hIYjXxp/SeLfKRIDtDiNOKlsIocAkJo9VXD77zTvt90ydUUp2sLkThZlxvn0XqrSEpowgKBOeVyH0Y1Ok4Sk/iP3IyJzg28izuo7eL5KxlTnGdr0Cr26J9C1H5 lN/9FFf 4bXAznkNUqOItMGP/jUIXr8MqnGS8us/F32qMjCnNJmYUvKNykY5U Jjyiz3NUo5GZMQpx kNEgr/WDbg54rHJmmyGVDD9XyvfIg1ZEMaJHHb/egn/bhIUjEAYj8ByYVruovKtUq6CLKFSvKrRg/2Zvr8J1vAsPrVgTOUFSuyVeTaH6xz nc0fr 9kp6swuMp/pKs3xVWG0d/SqdcSyq9ult;/xenc:CipherValuegt;  lt;/xenc:CipherDatagt;  lt;/xenc:EncryptedDatagt; lt;/soapenv:Bodygt;