我在Tomcat 7上使用Spring Security SAML 2.0示例Web应用程序,并对其进行了修改,以尝试使其针对Ping身份服务进行身份验证。Web应用程序正在与服务对话,并发送回Assert,但在尝试验证签名时失败,如下面的调试输出所示:
- 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身份管理员已经给了我一个证书供我使用,但我不确定如何将其包含在应用程序中。(keystore),它是使用JDK的keytool程序的示例应用程序附带的,但是它似乎在那里找不到它。我也尝试过将它添加到服务提供者的元数据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和应用程序安全性总体上相对较陌生,所以如果我使用了错误的术语,我很抱歉。
2条答案
按热度按时间wwwo4jvm1#
最后,我发现我遗漏了安全上下文文件中的一行配置,并且(看起来)在服务提供者的元数据XML文件中不需要X509证书定义。
基本上,我已经将提供给我的公钥导入到现有的JKS中(使用
keytool
),但我没有告诉应用程序专门使用它。为了做到这一点,我必须进入安全上下文文件(在我的例子中是“securityContext.xml”),并将以下行添加到SP的元数据xml文件的ExtendedMetadata
bean定义中:因此,在此修改之后,
ExtendedMetadataDelegate
bean定义如下所示:希望这对任何可能处于类似情况的人有所帮助。
lpwwtiir2#
在Spring Boot 中,可以在assertingparty配置中配置它