我看过很多问题,包括 https://stackoverflow.com/a/25384924/1317559。我有 IdP 元数据和证书,但似乎无法获得 Spring,所以看看它。
- 将证书添加到密钥库:keytool -importcert -alias adfssigning -keystore samlKeystore.jks -file certificate.crt
- 在元数据中有多个证书(2 个不同的证书)和一个签名值。
- 我尝试使用相同的keytool命令添加签名值,但它不是证书。
- 我也尝试添加元数据中找到的 2 个证书。
启用了调试日志,这就是我得到的:
- 使用密钥信息派生凭据成功验证签名
- 尝试建立对 KeyInfo(关键信息)派生凭据的信任
- 提供的受信任名称为 null 或空,跳过名称评估
- 尝试对不受信任的凭据进行 PKIX 路径验证:[主题名称='O=novell,OU=accessManager,CN=测试签名']
- 不受信任凭据的 PKIX 路径构造失败:[主题名称='O=novell,OU=访问管理器,CN=测试签名']:找不到到请求目标的有效证书路径
- 无法通过签名凭据的 PKIX 验证建立签名信任
- 无法建立对密钥信息派生凭据的信任
- 未能使用任何 KeyInfo派生凭据验证签名和/或建立信任
- PKIX 签名验证失败,无法解析有效且受信任的签名密钥
- 元数据输入 http://idp.ppd.com/nidp/saml2/metadata 的签名信任建立失败
- 从 http://idp.ppd.com/nidp/saml2/metadata 过滤元数据时出错org.opensaml.saml2.metadata.provider.FilterException: 元数据条目的签名信任建立失败at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.verifySignature(SignatureValidationFilter.java:312)
Spring SAML 手册在第 7.2.4 章中描述了元数据信任验证。一种选择是禁用信任检查,或手动从元数据中删除签名 XML。就像您发现的那样,要导入到 samlKeystore.jks 的证书是用于生成元数据签名的证书,而不是特定 SP 或 IDP 实体的签名/加密证书。
还值得注意的是:不要更改签名文件 - 当我重新格式化 ADFS 生成的单行代码时,发生在我身上。显然会更改文件的签名。
已修复。事实上,存在许多问题。我正在使用Spring SAML示例应用程序:
- 需要将公共证书(签名后的第一个,在 idp 元数据中)添加到其他来源、安全性下的 samlKeystore.jks 中。
- 密码是 nalle123 。
- 不要在 securityContext.xml 文件中放置任何内容。