信頼された証明書エントリはパスワードで保護されていません Spring SAML 質問する

信頼された証明書エントリはパスワードで保護されていません Spring SAML 質問する

接続しようとしているIDPの509エントリをコピーしてtestIdp.cerファイルを生成しました。次に、次のコマンドを実行してJKSファイルを作成しました。

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

実行すると、パスワードを入力するように求められますが、私はパスワードを入力しました。「この証明書を信頼しますか? [いいえ]:」という質問に対して、私は「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>

しかし、アプリケーションを実行すると、サーバーの起動時とアプリケーションのホームページの読み込み時に次の 2 つの例外が発生します。他に何か見落としている点があれば、どなたか教えていただけませんか。

この例外はサーバーを起動したときに発生します

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)

ベストアンサー1

証明.cer書には公開鍵のみが含まれているため、公開鍵を定義してはなりません<entry key="adfssigning" value="mypassword"/>。公開鍵は秘密鍵にのみ使用できます。エントリを削除しadfssigning、代わりに秘密鍵を含めるようにしてください。これは Spring SAML サンプル アプリケーションの場合と同じです。

SAML キーストアには、公開キーと秘密キーの 2 つの基本キー (およびそれらの証明書) を含めることができます。各キーには、参照に使用されるエイリアスがあります。キーストア自体はパスワード (コンストラクターの 2 番目のパラメーターで指定) で保護できます。また、各秘密キーも追加のパスワードで保護できます (これらは、コンストラクターの 3 番目のパラメーターで alias->password のマップで定義されます)。キーストアにインポートする公開キー (上記のコマンドで行ったのと同じ) は、このマップで定義しないでください。追加の宣言なしでインポートされた後、公開キーは自動的に使用可能になります。Spring SAML が機能するには、キーストアに少なくとも 1 つの秘密キー (サンプル アプリケーションには、エイリアス apollo の秘密キーが含まれています) が含まれている必要があり、そのエイリアスをコンストラクターの 3 番目のパラメーターで提供する必要があります。

上記の例は、公開鍵をインポートしたが、秘密鍵にのみ使用できるマップにそれを含めたため失敗します。

おすすめ記事