我將spring-saml2示例應用程序集成到我自己的應用程序中。我的服務提供商連接到Shibboleth IDP。 我使用Spring Security SAML應用程序附帶的samlKeystore.jks中提供的私有證書測試SP。我註冊了IDP通過使用命令登錄密鑰庫公鑰: 密鑰工具-importcert -alias idpSignKey -keypass密碼-file key.cer -keystore samlKeystore.jksSpring Security SAML可信證書條目沒有密碼保護
我能夠運行應用程序,並登錄IDP。我可以在日誌中看到他們在saml消息中發回給我的公共證書與我在idp元數據中擁有的證書相對應,並在密鑰庫中註冊。從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) 有機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>
謝謝你的快速答案!你一定在想「她在做什麼?」 – user3754289 2014-09-22 23:02:26
一點都不,當人們開始使用這些技術時,很容易出現「愚蠢」的錯誤。 – 2014-09-23 07:48:50
弗拉基米爾,關於補充關鍵:我們是否應該在元數據中添加一個新的?當IDP發送不在元數據xml中的密鑰(在響應中)時,是否推薦處理該案例? –
Ritesh
2015-04-26 13:34:57