Я пытаюсь использовать M2Crypto для проверки подписи, содержащейся в ответе XML, который был получен от моего поставщика услуг SSO/SAML в моем приложении django/python, но я не могу получить его Работа.Проверка подписи SAML с использованием Python/M2Crypto
Мой ответ XML выглядит как второй пример here.
ETA: И here's a pastebin моего фактического XML.
Я использую некоторый код, как это попытка проверки:
def verify_signature(signed_info, cert, signature):
from M2Crypto import EVP, RSA, X509
x509 = X509.load_cert_string(base64.decodestring(cert), X509.FORMAT_DER)
pubkey = x509.get_pubkey().get_rsa()
verify_EVP = EVP.PKey()
verify_EVP.assign_rsa(pubkey)
verify_EVP.reset_context(md='sha1')
verify_EVP.verify_init()
verify_EVP.verify_update(signature.decode('base64'))
result = verify_EVP.verify_final(signed_info)
return result
Я могу успешно получить NameID от ответа, и я знаю, что я успешно загружается сертификат, потому что я могу тянуть эмитент и т. д. из него.
Что касается подписи, тем не менее, я пробовал хэширование переданного в XML, кодирования/не кодирования различных фрагментов и передачи в различных битах XML для параметра signed_info
(тег SignedInfo, тег Response, целое вещь), и я попытался использовать ElementTree/ElementC14N.py, чтобы гарантировать, что XML исключительно канонизируется, поскольку Transform подразумевает, что это должно быть сделано, но я не получаю положительного результата.
Что мне здесь не хватает? Я пытаюсь проверить недействительный XML? Что-то не так с моей техникой проверки?
Вы когда-нибудь думали об этом @Ennael? Не могли бы вы взглянуть на [мой вопрос] (http://stackoverflow.com/questions/21209510/validating-saml-signature-in-python)? –