spring security saml使用哪个密钥?

Posted

技术标签:

【中文标题】spring security saml使用哪个密钥?【英文标题】:Which key is used by spring security saml? 【发布时间】:2015-03-04 10:56:23 【问题描述】:

我正在使用 Spring Security 的开放式 saml 库进行身份验证。

我的服务提供者是我用 spring saml 配置的 spring web 应用程序。 我的 IDP 是 OpenSSO。

在 spring-security-saml2-core 库中,从不调用 JKSKeyManager,但会调用 KeyManager。

那么库是使用 .jks 密钥库文件作为其密钥还是使用“apollo/nalle123”作为其密钥?他们有什么区别?

【问题讨论】:

【参考方案1】:

org.springframework.security.saml.key.KeyManager 是一个接口,org.springframework.security.saml.key.JKSKeyManager 是它的实现。因此,如果您看到对KeyManager 的调用,在默认配置中,这意味着他们正在访问JKSKeyManager

apollo/nalle123 密钥存储在.jks 文件中(示例应用程序中的samlKeystore.jks),配置为供KeyManager 使用。 Apollo.jks 文件中密钥的别名,nalle123 是其密码。

Spring SAML 结合了 KeyManager 中提供的密钥和 SAML 元数据中提供的密钥的使用。

【讨论】:

谢谢弗拉基米尔。但是,如果我将 OpenSSO 上的 .jks 文件更改为来自 OpenSSO 的另一个实例,同时保持我的 SP 上的 .jks 文件相同。我仍然能够成功验证。特别是在 spring-security-saml 中 AbstractProfileBase 的 Line271 处,它成功验证。有什么我想念的吗?它是否应该检测到 IDP 和 SP 的 .jks 密钥不再相同? 您如何将 IDP 元数据导入您的 SP?您发送给 SP 的消息是否经过数字签名? 我将 OpenSSO 生成的 idp.xml 和 keystore.jks 文件复制到我的 SP 的 war 文件中。是的,从 IDP 发送到 SP 的 SAML 断言已签名(X509 证书)。也许我误解了 .jsk 文件的用途,它是否带有密钥或者我们必须用密钥填充它? Spring SAML 中的默认 jks 带有一个别名为“apollo”的私钥。此密钥用于通过 Spring SAML 创建数字签名。元数据包含 IDP 的公钥,在 SP 中用于验证 IDP 创建的签名。您不应将 jks 从 OpenSSO 复制到 Spring SAML,因为它包含您的 SP 不应访问的 OpenSSO 的私钥。我认为通读 OpenSSO 和 Spring SAML 的手册将帮助您更好地了解 IDP 和 SP 之间的信任是如何建立和配置的。 SAML 规范也包含很好的信息。

以上是关于spring security saml使用哪个密钥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 spring-security-saml 在应用程序中没有配置 IDP 错误

Spring Security SAML 扩展和@PreAuthorize

在使用 Oauth、SAML 和 spring-security 的多租户的情况下从 spring-security.xml 中获取错误

未抛出 Spring Security SAML DisabledException

配置 ADFS 3.0 / SAML 2.0 以使用 Spring Security 进行 SSO 集成

如何使用 Spring Security SAML 插件在项目中指定 updatePasswordUrl,如 loginFormUrl = '/saml/login'