我们正在尝试与Cisco WebEx建立自定义SAML集成。然而,WebEx SP一直在抱怨"无效的数字签名" SAML响应发送到WebEx后。
我们已经检查了SAML响应,签名证书和SAML事务的Fiddler跟踪。没什么好看的。我们已经为其他几项服务做了这个,并没有遇到任何问题。
是否有一个好的工具可以帮助我们调试为什么WebEx认为数字签名无效?
答案 0 :(得分:3)
数字签名可能被视为无效的原因有几个。
更改文档: 确保签署的文档在签名后不会以任何方式更改。即使添加空白字符也会使签名无效。
字符编码:
如果您的文档包含unicode字符,请确保指定了正确的编码。大多数SAML文档都应该以UTF8编码,如下所示:<?xml version="1.0" encoding="utf-8"?>
签名错误的元素:包含断言的SAML文档通常应该在断言本身上有一个签名,而不一定在整个文档上。
证书不正确:确保您授予权限的证书与您要签名的密钥匹配。某些实现将使您在文档中包含证书,其他人可能会要求您预定义证书。如果文档中的文档与文件中的文档不匹配,则签名将不会被视为有效。您是否使用SSL证书进行签名?你最近更新了吗?
最终你应该自己测试文档。许多SAML库将具有验证签名的机制。你的图书馆看起来有效吗?如果不这样做,您可以使用类似xmlsec1
的内容来手动验证您的证书。这可能是您的库用于加密的内容,也可能是管理机构用于验证的内容。
使用XMLSec :
给定名为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属性。您正在寻找与上述类似的输出,以通知您文档的签名对提供的证书有效。
答案 1 :(得分:1)
检查您是否签署了Assertion元素,而不是顶层的Response元素。