以下に、ログイン実行時に発生する可能性のある問題、およびその解決方法に関する提案を示します。
- java.lang.SecurityException at javax.security.auth.login.Configuration.getConfiguration
原因:JAAS ログイン構成ファイルの処理で問題が発生しました。原因は、ファイル内の構文エラーと考えられます。
解決法:構成ファイルに誤りがないか、注意深く確認します。ログイン構成ファイルに必要な構文の詳細は、「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:クロックを同期させます (またはシステム管理者に同期を依頼)。
- 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 のクロックとクライアントのクロックがほぼ同期していることを要求します。 (The default is within 5 minutes.)同期していない場合、エラーが発生します。
解決法:クロックを同期させます (またはシステム管理者に同期を依頼)。
- 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 クレデンシャルの取得が行われていない場合、このエラーが発生します。特に、基盤となる機構でクレデンシャルの取得を行う予定であったのに、
useSubjectCredsOnly
システムプロパティ値をfalse
に設定 すること (たとえば、実行コマンドに-DuseSubjectCredsOnly=false
を含めて) を忘れてしまった場合、このエラーが発生します。解決法: JAAS を使って認証を実行するアプリケーションやラッパープログラム (このシリーズのチュートリアルで使用した Login ユーティリティなど) ではなく、基盤となる機構でクレデンシャルの取得を行う場合、
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
を使用できます。Kerberos 構成ファイルには、デフォルト領域および 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
原因:使用する KDC が、要求された暗号化タイプをサポートしません(一般に、暗号化タイプは、Kerberos 構成ファイル
krb5.conf
内で指定される)。解決法:使用する KDC がサポートする暗号化タイプを選択します。サンの Kerberos 実装がサポートする暗号化タイプは、DES_CBC_MD5,DES_CBC_CRC,and DES_CBC_MD4 です。
- KDC reply did not match expectations
原因:KDC により、クライアントが認識不可能な応答が返されました。
解決法:
krb5.conf
ファイルの構成パラメータすべてが適正に設定されていることを確認し、KDC ベンダー提供のドキュメントを参照してください。
注: システムプロパティ
sun.security.krb5.debug
を「true」に設定することで、デバッグモードを有効にできます。これにより、プログラムが Kerberos V5 プロトコルを実行する様子を確認できます。直面している問題についての情報をフィードバックする場合、完全なデバッグ出力を含めていただけると非常に助かります。