我正在尝试使用M2Crypto来验证从我的django/python应用程序中从我的SSO/SAML提供程序返回的XML响应中包含的签名,但我似乎无法得到它工作。SAML签名验证使用Python/M2Crypto
我的XML响应看起来有点像第二个示例here。
ETA:和here's我的实际XML的pastebin。
我使用一些像这样的代码来尝试验证:
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进行散列,编码/不编码各个部分,并传入signed_info
参数的各种XML位(SignedInfo标记,Response标记,整个事情),并且我尝试过使用ElementTree/ElementC14N.py来确保XML是完全规范化的,因为Transform暗示应该完成,但是我没有得到正面结果。
我在这里错过了什么?我想验证错误的XML吗?我的验证技术有问题吗?
你有没有想过@Ennael?你介意看看[我的问题](http://stackoverflow.com/questions/21209510/validating-saml-signature-in-python)? – 2014-01-20 12:43:05