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

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

吉毅
2023-03-14

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

我可以运行应用程序和登录与IDP。我可以在日志中看到,他们在saml消息中向我发回的公共证书对应于我在idp元数据中拥有的并在密钥库中注册的证书。我的应用程序在从JKSKeyManager获取idp凭据时中断。

java.lang.UnsupportedOperationException:受信任的证书项不是受密码保护的java.Security.KeyStorespi.EngineGetEntry(未知源)java.Security.KeyStore.GetEntry(未知源)org.opensaml.xml.Security.CredentialResolver.ResolveFromSource(KeyStoreCredentialResolver.java:132)org.opensaml.xml.Security.CredentialResolver.ResolveFromSource(PenSaml.Security.MetadataCredentialResolver.ResolveFromSource(MetadataCredentialResolver.java:169)

这就是ContextSecurity.xml中KeyManager的外观:

<!--加密密钥的集中存储--> security.saml.key.jksKeyManager”">

这是IDP的扩展元数据:


共有1个答案

戚哲
2023-03-14

IDP的证书通常不需要导入到密钥库,因为它们是从IDP的元数据提供的。如果要补充元数据中已有的密钥,则只应使用extendedmetadata和属性signingkey和/或encryptionkey

由于文件key.cer仅包含IDP的公钥,因此无法对其进行密码保护。您只需从用于初始化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>
 类似资料:
  • 为此,我使用以下命令将。cer文件导入到jks文件中。(密码和密码一样,提示要求接受证书,我给y,然后说证书加到keystore了) keytool-importcert-file xyz.cer-keystore test.jks-alias“testsp” 然后我使用这个jks文件创建凭据,如下所示。 谁能指导我解决这个问题吗?

  • 我已经通过复制我计划连接的Idp的509条目生成了testIdp.cer文件。然后,我通过执行以下命令创建了JKS文件 执行时,它要求输入我已提供密码的密码。对于问题“信任此证书?[no]:“,我给出了”y“作为输入。消息显示为“证书已添加到密钥库”。 然后,我在securityContext.xml中配置了以下详细信息: 但是当我运行应用程序时,在服务器启动和加载应用程序的主页时,我得到了以下两

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

  • 我刚刚在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 这个错误非常相似,但没有真正的解决

  • 我正在使用OpenSSL以避免为此付费。我的服务器正在运行IIS 8和Windows server 2012。 我创建证书的方式是: openssl请求-new-key cakey.pem-x509-days 1825-extensions v3_ca-out ca.crt 最后,我使用以下内容签署了证书请求: openssl x509-req-days 365-in certreq.txt-ca