gpt4 book ai didi

spring-security - Spring Security SAML 可信证书条目不受密码保护

转载 作者:行者123 更新时间:2023-12-01 11:36:56 24 4
gpt4 key购买 nike

我正在将 spring-saml2-sample 应用程序集成到我自己的应用程序中。我的服务提供商连接到 Shibboleth IDP。
我正在使用 Spring Security SAML 应用程序附带的 samlKeystore.jks 中提供的私有(private)证书测试 SP。我使用以下命令在 keystore 中注册了 IDP 签名公钥:
keytool -importcert -alias idpSignKey -keypass passwordS -file key.cer -keystore samlKeystore.jks

我能够运行应用程序并使用 IDP 登录。我可以在日志中看到,他们在 saml 消息中发回给我的公共(public)证书与我在 idp 元数据中拥有并在 keystore 中注册的证书相对应。我的应用程序在从 JKSKeyManager 获取 idp 凭据时中断。

java.lang.UnsupportedOperationException:受信任的证书条目不受密码保护
java.security.KeyStoreSpi.engineGetEntry(未知来源)
java.security.KeyStore.getEntry(未知来源)
org.opensaml.xml.security.credential.KeyStoreCredentialResolver.resolveFromSource(KeyStoreCredentialResolver.java:132)
org.opensaml.xml.security.credential.AbstractCriteriaFilteringCredentialResolver.resolve(AbstractCriteriaFilteringCredentialResolver.java:57)
org.opensaml.xml.security.credential.AbstractCredentialResolver.resolveSingle(AbstractCredentialResolver.java:30)
org.opensaml.xml.security.credential.AbstractCredentialResolver.resolveSingle(AbstractCredentialResolver.java:26)
org.springframework.security.saml.key.JKSKeyManager.resolveSingle(JKSKeyManager.java:172)
org.springframework.security.saml.key.JKSKeyManager.getCredential(JKSKeyManager.java:194)
org.springframework.security.saml.trust.MetadataCredentialResolver.retrieveFromMetadata(MetadataCredentialResolver.java:102)
org.opensaml.security.MetadataCredentialResolver.resolveFromSource(MetadataCredentialResolver.java:169)

这是 KeyManager 在 contextSecurity.xml 中的外观:
<!-- Central storage of cryptographic keys -->
<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="classpath:security/samlKeystore.jks"/>
<constructor-arg type="java.lang.String" value="nalle123"/>
<constructor-arg>
<map>
<entry key="apollo" value="nalle123"/>
<entry key="idpSignKey" value="passwordS"/>
<entry key="idpEncKey" value="passwordE"/>
</map>
</constructor-arg>
<constructor-arg type="java.lang.String" value="apollo"/>
</bean>

这是 idp 的扩展元数据:
<bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
<property name="local" value="false"/>
<property name="securityProfile" value="metaiop"/>
<property name="sslSecurityProfile" value="pkix"/>
<property name="signingKey" value="idpSignKey"/>
<property name="encryptionKey" value="idpEncKey"/>
<property name="requireArtifactResolveSigned" value="false"/>
<property name="requireLogoutRequestSigned" value="false"/>
<property name="requireLogoutResponseSigned" value="false"/>
<property name="idpDiscoveryEnabled" value="false"/>
</bean>

最佳答案

IDP 的证书通常不需要导入到 keystore ,因为它们是从 IDP 的元数据中提供的。您应该只使用 ExtendedMetadata和属性 signingKey和/或 encryptionKey如果您想补充元数据中已有的 key 。

作为文件key.cer仅包含您的 IDP 的公钥,您无法对其进行密码保护。您只需将其从 Map 中删除即可。用于初始化JKSKeyManager因为它只需要包含私钥的条目的密码。初始化将如下所示:

<!-- Central storage of cryptographic keys -->
<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="classpath:security/samlKeystore.jks"/>
<constructor-arg type="java.lang.String" value="nalle123"/>
<constructor-arg>
<map>
<entry key="apollo" value="nalle123"/>
</map>
</constructor-arg>
<constructor-arg type="java.lang.String" value="apollo"/>
</bean>

关于spring-security - Spring Security SAML 可信证书条目不受密码保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25982759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com