gpt4 book ai didi

spring - 受信任的证书条目不受密码保护的 Spring SAML

转载 作者:IT老高 更新时间:2023-10-28 13:53:51 27 4
gpt4 key购买 nike

我通过复制我计划连接的 IDP 的 509 条目生成了 testIdp.cer 文件。然后我通过执行以下命令创建了 JKS 文件

keytool -importcert -alias adfssigning -keystore C:\Users\user\Desktop\samlKeystore.jks -file    C:\Users\user\Desktop\testIdp.cer

执行时,它要求输入我已提供密码的密码。对于“信任此证书?[否]:”这个问题,我给出了“y”作为输入。消息显示为“证书已添加到 keystore ”。

然后我在securityContext.xml中配置了以下细节

<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="classpath:security/samlKeystore.jks"/>
<constructor-arg type="java.lang.String" value="mypassword"/>
<constructor-arg>
<map>
<entry key="adfssigning" value="mypassword"/>
</map>
</constructor-arg>
<constructor-arg type="java.lang.String" value="adfssigning"/>
</bean>

<bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
<property name="alias" value="adfssigning" />
<property name="signingKey" value="adfssigning"/>
</bean>

但是当我运行应用程序时,在服务器启动和加载应用程序主页时出现以下两个异常。如果我还缺少其他任何东西,谁能告诉我。

当我启动服务器时发生此异常

Caused by: org.opensaml.saml2.metadata.provider.FilterException: Signature trust establishment failed for metadata entry
at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.verifySignature(SignatureValidationFilter.java:327)
at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.processEntityGroup(SignatureValidationFilter.java:240)
at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.doFilter(SignatureValidationFilter.java:158)
at org.opensaml.saml2.metadata.provider.AbstractMetadataProvider.filterMetadata(AbstractMetadataProvider.java:493)
at org.opensaml.saml2.metadata.provider.AbstractReloadingMetadataProvider.processNonExpiredMetadata(AbstractReloadingMetadataProvider.java:395)

当我运行应用程序的主页时发生此异常

java.lang.UnsupportedOperationException: trusted certificate entries are not password-protected
at java.security.KeyStoreSpi.engineGetEntry(Unknown Source)
at java.security.KeyStore.getEntry(Unknown Source)
at org.opensaml.xml.security.credential.KeyStoreCredentialResolver.resolveFromSource(KeyStoreCredentialResolver.java:132)

最佳答案

您的.cer证书只包含一个公钥,你不能定义<entry key="adfssigning" value="mypassword"/>用于公钥;它只能用于私有(private)的。只需取出 adfssigning输入并确保包含私钥 - 就像在 Spring SAML 示例应用程序中一样。

SAML keystore 可以包含两种基本类型的 key ——公共(public) key 和私有(private) key (加上它们的证书)。每个键都有一个别名,用于引用它。 keystore 本身可以由密码保护(在第二个构造函数参数中提供),另外每个私钥也可以由一个额外的密码保护(这些在构造函数的第三个参数中定义,在 alias->password 的映射中)。您导入到 keystore 的公钥(就像您使用上面的命令一样)不得在此映射中定义。它们在导入后将自动可用,无需额外声明。要使 Spring SAML 工作, keystore 必须包含至少一个私钥(示例应用程序包含具有别名 apollo 的私钥),并且需要在构造函数的第三个参数中提供其别名。

你上面的例子失败了,因为你已经导入了一个公钥,但是将它包含在只能用于私钥的映射中。

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

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