2

わかりましたので、ケルベロス経由でubuntuに座っているWildfly 9からMSSqlサーバーに接続しようとしています。KDC は Microsoft AD です。

次のようなセキュリティドメインを使用して、問題なく動作させることができました。

<login-module code="org.jboss.security.negotiation.KerberosLoginModule" flag="required" module="org.jboss.security.negotiation">
    <module-option name="storeKey" value="false"/>
    <module-option name="useKeyTab" value="true"/>
    <module-option name="keyTab" value="/opt/wildfly-9.0.2/standalone/configuration/krb5.keytab"/>
    <module-option name="principal" value="app-BV"/>
    <module-option name="useTicketCache" value="false"/>
    <module-option name="debug" value="true"/>
    <module-option name="refreshKrb5Config" value="true"/>
    <module-option name="isInitiator" value="true"/>
    <module-option name="addGSSCredential" value="true"/>
    <module-option name="delegationCredential" value="USE"/>
    <module-option name="wrapGSSCredential" value="true"/>
</login-module>

Microsoftのjdbcドライバーはログイン直後にチケットを破棄し、後続のSQL呼び出しでこのフラグが設定されていないNPEを引き起こすため、新しいwrapGSSCredentialフラグも使用しています(バグの説明を参照)

これは正常に動作します。つまり、データベースに接続でき、接続が失われた後に接続が再確立されます。

うまくいかないのは更新です。基本的には次のような状況です。

  1. Wildfly は取得した資格情報をキャッシュします
  2. 資格情報のセットに対する Wildfly のキャッシュ検証は、基礎となるチケットの有効期限が切れていても常にパスします。
  3. 10 時間後 (AD のチケットのデフォルトの有効期間)、Wildfly からドライバーに渡されたチケットの有効期限が切れます。
  4. Sun Kerberos API はチケットで TGT を探しますが、見つからないため、新しいチケットを取得できません。私が得るエラーは次のとおりです。

    GSSException: 有効な認証情報が提供されていません (メカニズム レベル: Kerberos tgt が見つかりませんでした) at sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCredential.java:147)

そこで、私の質問は次のとおりです。Jboss キャッシュを使用しない (または infinispan を使用し、資格情報が古くなる前に削除する) 以外に、新しい Kerberos チケットを取得する方法はありますか?

4

0 に答える 0