SAML SP 抱怨 "Invalid digital signature"

SAML SP complaining "Invalid digital signature"

我们正在尝试设置与 Cisco WebEx 的自定义 SAML 集成。但是,在将 SAML 响应发送到 WebEx 后,WebEx SP 一直抱怨 "Invalid digital signature"。

我们已经检查了 SAML 响应、签名证书和 SAML 事务的 Fiddler 跟踪。似乎没有什么不寻常的。我们已经为其他几项服务完成了此操作,并且 运行 没有遇到任何问题。

是否有好的工具可以帮助我们调试 WebEx 认为数字签名无效的原因?

数字签名可能被视为无效的原因有几个。

修改文件: 确保您签署的文件在签署后没有以任何方式被更改。即使添加空白字符也会使签名无效。

字符编码: 如果您的文档包含 unicode 字符,请确保您指定了正确的编码。大多数 SAML 文档都应该像这样以 UTF8 编码:<?xml version="1.0" encoding="utf-8"?>

错误的元素签名:包含断言的 SAML 文档通常期望在断言本身上有签名,而不一定在整个文档上有签名。

不正确的证书:确保您授权的证书与您签名的密钥匹配。某些实现会让您在文档中包含证书,而其他实现可能会要求您预定义证书。如果您文件中的签名与他们存档的签名不匹配,则签名将被视为无效。您是否使用 SSL 证书签名?你最近更新了吗?

最终你应该自己测试文档。许多 SAML 库都有验证签名的机制。你的图书馆对你的图书馆有效吗?如果做不到这一点,您可以使用 xmlsec1 之类的东西通过您的证书手动验证您的文档。这可能是您的图书馆用来加密的内容,也可能是权威机构用来验证的内容。

使用XML秒: 给定一个名为 cert.pem 的证书和一个名为 doc.xml 的 SAML 响应 XML 文档,您将像这样验证它:

$ xmlsec1 --verify --pubkey-cert-pem cert.pem --id-attr:ID Response doc.xml
OK
SignedInfo References (ok/all): 1/1

您可能需要更改 --id-attr 值以匹配文档的 ID 属性。您正在寻找与上述类似的输出,以通知您您的文档签名对于提供的证书有效。

检查您签署的是断言元素,而不是顶层响应元素。