当前位置: 首页 > 知识库问答 >
问题:

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

卜方伟
2023-03-14

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

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

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

然后,我在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)

共有3个答案

严昀
2023-03-14

当密钥库中没有私钥时,也会发生此错误。SAML使用私钥生成用于与IDP通信的服务提供商元数据。只需向密钥库添加一个,如下所示:

keytool -genkey -v -keystore some_key_store.jks -alias some_alias -keyalg RSA -keysize 2048 -validity 36500

填写问题并将有效期设置为适当的天数。(在我的例子中,它的有效期为100年)请记住从 IDP 添加公共证书。然后你应该准备好了。

微生鸿轩
2023-03-14

弗拉基米尔正确回答了为什么会出现错误的问题。在我的回答中,我想展示如何将证书导入到密钥库中来解决这个问题:

您必须导入证书和私钥,而密钥工具无法直接完成。

详细描述的解决方案可在此处找到:https://stackoverflow.com/a/8224863/1909531

以下是摘录:

openssl pkcs12 -export -in server.crt -inkey server.key \
           -out server.p12 -name [some-alias] \
           -CAfile ca.crt -caname root

keytool -importkeystore \
    -deststorepass [changeit] -destkeypass [changeit] -destkeystore server.keystore \
    -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass some-password \
    -alias [some-alias]
裴兴学
2023-03-14

您的<代码>。cer证书只包含一个公钥,不能定义< code >

SAML 密钥库可以包含两种基本类型的密钥 - 公钥和私有密钥(以及它们的证书)。每个键都有一个别名,用于引用它。密钥库本身可以由密码保护(在第二个构造函数参数中提供),并且每个私钥也可以由一个附加密码保护(这些密码在别名映射的构造函数的第三个参数中定义-

上面的示例失败,因为您导入了一个公钥,但将其包含在只能用于私钥的映射中。

 类似资料:
  • 为此,我使用以下命令将。cer文件导入到jks文件中。(密码和密码一样,提示要求接受证书,我给y,然后说证书加到keystore了) keytool-importcert-file xyz.cer-keystore test.jks-alias“testsp” 然后我使用这个jks文件创建凭据,如下所示。 谁能指导我解决这个问题吗?

  • 我正在将spring-saml2-sample应用程序集成到我自己的应用程序中。我的服务提供商连接到Shibboleth IDP。我正在使用Spring Security SAML应用程序附带的samlkeystore.jks中提供的私有证书测试SP。我使用以下命令在密钥库中注册了IDP签名公钥:keytool-importcert-alias idpsignkey-keypass passwor

  • 得到了一个证书来签署Android未签名的发布apk文件,所以我导入了使用命令: 但使用android studio对应用程序进行签名时会产生错误: 我的推断是,由于密钥没有密码保护,因此我再次尝试并使用以下方法设置密钥密码: 但错误依然存在。 我还尝试使用jarsigner的手动程序: 出现错误: 请帮助我无法获得有关Android apk登录错误的相关帖子

  • 问题内容: 我有一个受密码保护的Excel电子表格。我需要打开此电子表格并从中读取数据。我一直在尝试使用POI API无济于事。首选Java解决方案,但任何想法都会有所帮助。 编辑:是的,我有密码。该文件在excel中受密码保护;必须输入密码才能查看电子表格。 Edit2:我无法使用带有密码的POI打开它,我在寻找替代解决方案。 问题答案: 您可以使用JExcelApi。 自从我这样做已经有一段时

  • 我刚刚在Google Cloud上的VM上设置了我的Neo4j服务器,我使用的是企业版4.1.1,并且我已经完成了David Allen关于如何使用LetsEncrypt获得证书的精彩帖子(在这里)。 这一切都工作得很好,我现在有了一个完全安全的Neo4j服务器,我可以通过浏览器()使用我的主机名访问它。但是,我现在在让我的应用程序使用javascript驱动程序连接到服务器时遇到了问题。 我不断

  • 我正试图使用Gradle在Ubuntu服务器上构建我的Android项目。 在我的Windows 10 PC上使用Android Studio进行构建工作正常 但是,使用或失败,输出如下: 在我的研究中,我只发现了两个类似的问题,两个答案都不适合我: Paul Lammertsma-gradlew.bat(和gradlew)SSLHandShakeExc0019 这个错误非常相似,但没有真正的解决