org.opensaml.common.SAMLRuntimeException:无法获取 SP 签名密钥

Posted

技术标签:

【中文标题】org.opensaml.common.SAMLRuntimeException:无法获取 SP 签名密钥【英文标题】:org.opensaml.common.SAMLRuntimeException: Can't obtain SP signing key 【发布时间】:2018-07-09 15:34:15 【问题描述】:

无法通过领域发现阶段。虽然示例代码适用于 IDP SSO 圈。使用我们公司的 Metadata.xml 更新我们的 securityContext.xml 时面临问题,导入 pfx 证书并添加到密钥库。

使用以下命令添加到密钥库:

keytool -importkeystore -srckeystore PFX_P12_FILE_NAME -srcstoretype pkcs12 -srcstorepass PFX_P12_FILE_PASS -srcalias SOURCE_ALIAS -destkeystore samlKeystore.jks -deststoretype jks -deststorepass nalle123 -destalias alias

PFB 异常跟踪:

org.opensaml.common.SAMLRuntimeException: Can't obtain SP signing key
    at org.springframework.security.saml.key.JKSKeyManager.getCredential(JKSKeyManager.java:193)
    at org.springframework.security.saml.metadata.MetadataGenerator.getServerKeyInfo(MetadataGenerator.java:205)
    at org.springframework.security.saml.metadata.MetadataGenerator.buildSPSSODescriptor(MetadataGenerator.java:329)
    at org.springframework.security.saml.metadata.MetadataGenerator.generateMetadata(MetadataGenerator.java:189)
    at org.springframework.security.saml.metadata.MetadataGeneratorFilter.processMetadataInitialization(MetadataGeneratorFilter.java:127)
    at org.springframework.security.saml.metadata.MetadataGeneratorFilter.doFilter(MetadataGeneratorFilter.java:86)

和控制台消息如下:

未配置默认元数据,使用默认值生成,请预先配置元数据以供生产使用

无法检索实体 ID(密钥库别名)的密钥库条目:apollo

检查无效的密钥库实体 ID/别名输入密码

使用entityBaseURL 作为与客户端共享的最终方 url。还尝试使用出现在 metadata.xml 中的实体 ID。

非常感谢任何帮助。

【问题讨论】:

改进格式 【参考方案1】:

使用 keytool 命令使用自签名密钥库时,密钥对密码(为 keytool 选项 -keypass 指定)和密钥库文件密码必须相同。

我们可以使用以下命令创建自签名密钥库

keytool -genkeypair -alias springsaml -keypass <password> -keystore saml-keystore.jks

在终端收到“输入密钥库密码”消息时,输入相同的密码,该密码是为keytool选项“-keypass”提供的

【讨论】:

以上是关于org.opensaml.common.SAMLRuntimeException:无法获取 SP 签名密钥的主要内容,如果未能解决你的问题,请参考以下文章