3

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(不明なソース) 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>

4

1 に答える 1

5

IDP の証明書は、IDP のメタデータから提供されるため、通常はキーストアにインポートする必要はありません。ExtendedMetadataプロパティsigningKeyおよび/またはencryptionKeyメタデータで既に使用可能なキーを補足する場合にのみ使用する必要があります。

ファイル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>
于 2014-09-22T21:14:08.517 に答える