我正在嘗試使用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