我在 Tomcat 7 上使用 Spring Security SAML 2.0 示例 webapp,并对其进行了修改以尝试使其针对 Ping Identity 服务进行身份验证。webapp 正在与服务对话,它正在发回一个断言,但在尝试验证签名时失败,如下面的调试输出所示:
- Attempting to verify signature and establish trust using KeyInfo-derived credentials
- Signature contained no KeyInfo element, could not resolve verification credentials
- Failed to verify signature and/or establish trust using any KeyInfo-derived credentials
- Attempting to verify signature using trusted credentials
- Failed to verify signature using either KeyInfo-derived or directly trusted credentials
- Validation of received assertion failed, assertion will be skipped
org.opensaml.xml.validation.ValidationException: Signature is not trusted or invalid
我知道它无法验证签名,并且我已获得 Ping Identity 管理员的证书以供使用,但我不确定如何将其包含在应用程序中。我尝试使用 JDK 的 keytool 程序将其添加到示例应用程序附带的 JKS(密钥库)中,但似乎无法在其中找到它。我还尝试将其添加到服务提供商的元数据 xml 文件中,如下所示:
<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>
[Certificate is here...]
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
但是它仍然返回相同的错误。
是否有我应该放置证书以验证签名的特定位置?一般来说,我对 SAML 和应用程序安全性比较陌生,所以如果我使用了错误的术语,我深表歉意。