トラブルシューティング

次に、ログイン時に発生する可能性がある問題と、それらを解決するための推奨事項を示します。

  • 構成可能なKerberos設定: Kerberos Key Distribution Center (KDC)の名前とレルム設定は、Kerberos構成ファイルによって指定されるか、システム・プロパティjava.security.krb5.kdcおよびjava.security.krb5.realmを介して指定されます。ブール型オプションrefreshKrb5Configは、JAAS構成ファイル内のKrb5LoginModuleのエントリに指定できます。このオプションがtrueに設定されている場合は、Krb5LoginModuleのloginメソッドが呼び出される前に、構成値がリフレッシュされます。

    ノート:

    Kerberos構成を切り替える場合、refreshKrb5Configtrueに設定する必要があります。この値を設定しないと、予期しない結果が発生することがあります。

  • java.lang.SecurityException at javax.security.auth.login.Configuration.getConfiguration

    原因: JAASログイン構成ファイルの処理で問題が発生しました。原因は、ファイル内の構文エラーと考えられます。

    解決法: 構成ファイルに誤りがないか、注意深く確認します。ログイン構成ファイルに必要な構文の詳細は、付録B: JAASログイン構成ファイルを参照してください。

  • javax.security.auth.login.LoginException: KrbException: Pre-authentication information was invalid (24) - Preauthentication failed

    原因1: 入力されたパスワードが無効です。

    解決法1: パスワードを確認します。

    原因2: キーの取得にキー・タブを使用している場合(JAASログイン構成ファイルのKrb5LoginModuleエントリで、useKeyTabオプションをtrueに設定するなど)、キー・タブの更新後にキーが変更された可能性があります。

    解決法2: Kerberosドキュメントを参照して新規keytabを生成し、そのキー・タブを使用します。

    原因3: クロック・スキュー - KDC上の時間とクライアント上の時間が大きく異なる場合(通常は5分)、エラーが返されることがあります。

    解決法3: クロックを同期させます(またはシステム管理者に実行を依頼)。原因4: Kerberosレルム名の一部が大文字になっていません。

    解決法4: Kerberosレルム名をすべて大文字にします。ノート: すべて大文字のレルム名を使用するよう推奨されています。レルム名およびホスト名の命名規則を参照してください。

  • GSSException: No valid credentials provided (Mechanism level: Attempt to obtain new INITIATE credentials failed! (null)) . . . Caused by: javax.security.auth.login.LoginException: Clock skew too great

    原因: KerberosはKDCのクロックとクライアントのクロックがほぼ同期していることを要求します。デフォルトは5分以内です。同期していない場合、エラーが発生します。

    解決法: クロックを同期させます(またはシステム管理者に同期を依頼)。

  • javax.security.auth.login.LoginException: KrbException: Null realm name (601) - default realm not specified

    原因: Kerberos構成ファイルkrb5.conf内で、ユーザー名の一部を構成するデフォルト・レルムが指定されていません(Kerberos構成ファイルを使用する場合)。または、デフォルト・レルムが、java.security.krb5.realmシステム・プロパティで指定されていません。

    解決法: Kerberos構成ファイル内(使用する場合)にデフォルト・レルムを指定するエントリが含まれているかどうかを確認します。または、java.security.krb5.realmシステム・プロパティ値にデフォルト・レルムを直接指定し、Kerberosによる認証時にこれをユーザー名に含めます。

  • javax.security.auth.login.LoginException: java.net.SocketTimeoutException: Receive timed out

    解決法: Kerberos KDCが起動済みで、稼動中であることを確認します。

  • GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos Ticket)

    原因: 有効なKerberos資格の取得が行われていない場合、このエラーが発生します。特に、基盤となるメカニズムで資格の取得を行う予定であったのに、javax.security.auth.useSubjectCredsOnlyシステム・プロパティ値をfalseに設定すること(たとえば、実行コマンドに-Djavax.security.auth.useSubjectCredsOnly=falseを含めて)を忘れてしまった場合、このエラーが発生します。

    解決法: JAASを使って認証を実行するアプリケーションやラッパー・プログラム(このシリーズのチュートリアルで使用したLoginユーティリティなど)ではなく、基盤となるメカニズムで資格の取得を行う場合、javax.security.auth.useSubjectCredsOnlyシステム・プロパティ値を確実にfalseに設定します。

  • javax.security.auth.login.LoginException: Could not load configuration file <krb5.conf> (No such file or directory)

    原因: チュートリアルのサンプル実行コマンドは、java.security.krb5.realmおよびjava.security.krb5.kdcシステム・プロパティの値を設定することにより、デフォルトのKerberosレルムおよびKDCを指定します。必要に応じて、かわりに、Kerberos構成ファイルkrb5.confを使用できます。そのファイルには、デフォルトのレルムおよびKDCに関する情報が含まれます。krb5.confファイルを使用するには、システム・プロパティjava.security.krb5.confを使用して(realmおよびkdcプロパティのかわりに)ファイルの位置を指定するか、これらのプロパティのがいずれも設定しない場合、デフォルト位置でkrb5.confファイルの検出が試みられます。ファイルが見つからない場合、「Could not load configuration file <krb5.conf> (No such file or directory)」というエラーが表示されます。

    解決法: Kerberos構成ファイルkrb5.confが、利用可能かつ読取り可能であることを確認します。krb5.confファイルの位置指定方法、および位置を明示的に指定しない場合のデフォルト検索位置については、「Kerberos要件」を参照してください。

  • javax.security.auth.login.LoginException: KrbException: KDC has no support for encryption type (14) - KDC has no support for encryption type

    原因1: 使用するKDCが、要求された暗号化タイプをサポートしません。

    解決法1: OracleのKerberos実装では、暗号化タイプとして、aes256-cts-hmac-sha1-96aes128-cts-hmac-sha1-96des3-cbc-sha1arcfour-hmac-md5des-cbc-crcおよびdes-cbc-md5をサポートしています。

    アプリケーションでは、Kerberos構成ファイルkrb5.confで次のタグを指定することにより、適当な暗号化タイプを選択できます。

    [libdefaults]
    default_tkt_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1
    default_tgs_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1
    permitted_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1  

    指定しない場合のデフォルト値は次のとおりです。

    aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 des3-cbc-sha1 arcfour-hmac-md5

    krb5.confallow_weak_cryptoがtrueに設定されている場合、des-cbc-crcおよびdes-cbc-md5もサポートされます。

    原因2: この例外は、いくつかのWindowsプラットフォームでネイティブ・チケット・キャッシュを使用するとスローされます。Microsoftは新機能を追加しており、その機能ではTicket Granting Tickets (TGT)のセッション・キーがエクスポートされなくなっています。そのため、Windowsで取得したネイティブTGTは、「空の」セッション・キーとnullのETypeを持つことになります。

    解決法2: Windowsのレジストリをアップデートして、この新機能を無効にする必要があります。レジストリ・キーallowtgtsessionkeyを追加し、正しく設定して、KerberosのTicket Granting Ticketでセッション・キーが送信されるようにしてください。通常は、次のレジストリ設定が必要となります。

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters
    Value Name: allowtgtsessionkey
    Value Type: REG_DWORD
    Value: 0x01  ( default is 0 )

    デフォルトでは値が0に設定されています。「0x01」に設定することにより、セッション・キーをTGTに含めることができます。

  • KDC reply did not match expectations

    原因: KDCにより、クライアントが認識不可能な応答が返されました。

    解決法: krb5.confファイルの構成パラメータすべてが適正に設定されていることを確認し、KDCベンダー提供のガイドを参照してください。

    ノート:

    システム・プロパティsun.security.krb5.debugを「true」に設定することで、デバッグ・モードを有効にできます。この設定により、プログラムがKerberos V5プロトコルを実行する様子を確認できます。