自 2022 年 11 月起,SignXML 验证开始失败 - “签名验证失败:签名错误”

SignXML verification started to fail as of November 2022 - 'Signature verification failed: bad signature'

提问人:Janicko 提问时间:8/30/2023 最后编辑:LMCJanicko 更新时间:8/30/2023 访问量:24

问:

我们使用使用 SignXML 和 LXML 的 python 解决方案(最新版本)来运行生产 SSO 解决方案。我们是服务提供商。当用户尝试访问我们的系统时,我们确实会收到一个标志 XML 断言。

直到 2022 年 11 月 17 日,一切都很好。从那时起,每个请求都会收到“签名验证失败:签名错误”。

但我认为只是 SignXML 导致了这个问题。 作为 CI/CD 的一部分,我们在每个部署上生成集成测试,我们的测试工作顺利。 我们没有客户的私钥,因此我们无法复制该问题。但是他们的每个请求都是无效的。 有什么想法吗?我查看了 SignXML https://pypi.org/project/signxml 的变化,但什么都没有。谢谢!

我尝试了不同的 python 版本,3.9、3.10、3.11,但我得到了相同的行为。我尝试了不同的方法,但没有修复。 我们的验证方法:

def validate_saml_assertion(saml_value, trusted_cert, tenant_prefix):   
    root = etree.fromstring(saml_value)
    
signature_node = root.findall("Signature", namespaces={None: "http://www.w3.org/2000/09/xmldsig#"})
    
cert_on_file = validate_fingerprint(cert_from_xml, trusted_cert, tenant_prefix)
    
return XMLVerifier().verify(saml_value, x509_cert=cert_on_file).signed_xml

不同的python版本,不同的库版本。 当我们固定较旧的依赖项版本时,它仍然有效。

我们固定了以下版本: lxml==4.9.0 signxml==2.9.0 pyjwt==2.4.0 密码学==37.0.2

python-3.x xml 验证 SAML

评论

0赞 LMC 8/30/2023
问题不是一个最小的可重复的例子。 返回元素列表,但需要单个节点。findall
0赞 Timothy Legge 9/6/2023
您需要进行一些故障排除和调试。您能否验证使用在线 saml 工具之一收到的断言的签名?其中一些将指定摘要是否失败或签名。如果该部分没问题,则需要确定您的故障所在。是肯定的XML签名,还是验证的其他部分失败了?他们是否更改了用于对断言进行签名的证书?如果是这样,则需要更新用于验证的证书。这可能是任意数量的问题,但请使用在线工具进行验证

答: 暂无答案