Javaサーバー用のキータブをWindowsネットワーク上でKerberos認証をサポートするように設定しようとしています。コマンドラインツールのレベルでも動作するように苦労していますまだサーバーのセットアップまで来ていません!私の今の計画は、開発作業とデバッグを行うため、開発用PCでそれを動作させることです。したがって、私の目標はJava PCで実行されているサーバーと、それに接続している同じマシンで実行されているクライアント。
これが私がこれまでにやったことです、私はすべての種類の間違ったことをしている可能性があるので、私は本当に自分の道を誤解しています!
ドメイン管理者の1人にこのコマンドを実行してもらいました。
setspn -A TEST/pc-name.mydomain.com my-user-name
これは正常に完了したようで、このSPNを
setspn -L my-user-name
次のコマンドでキータブを作成しました:
ktpass /princ TEST/[email protected] /pass <my-password> /ptype KRB5_NT_SRV_HST /out <keytab-filename>
これにより、キータブが正常に作成されたように見えますが、ptypeとアカウントタイプが一致しないことを警告しています(ただし、ptypeに何を選択しても、同じ警告が表示されます)。このコマンドを実行すると:
klist -k file:/<keytab-filename>
次に、予想されるSPN、つまりTEST/[email protected]がリストされます。
ここで、このSPNでキータブが機能することを確認したいので、
kinit -t <keytab-filename> TEST/[email protected]
次に、「krb_error 6クライアントがKerberosデータベースに見つかりません」というエラーが表示されます。
何が悪いのですか?
My-user-nameがActive Directoryのコンピューターオブジェクトとユーザーオブジェクトのどちらを指しているのか、私にはよくわかりません。ユーザーオブジェクトであると想定します。その場合、setspnは適切ではないと思います。これは、既存のマシンアカウントのSPNを変更するためのものです。ユーザーアカウントについては、SRV_HSTが正しいかどうかは疑問です。
明らかに、ユーザーオブジェクトに関連付けられたSPNのサポートは多少制限されています。これは本当に1人のユーザーに限定されているとどこかで読んだことがあります。また、ktpassの呼び出しをうまく機能させることができませんでした。それは、a)SPNに関連付ける必要があるユーザーアカウントを(mapuserを介して)指定すること、およびb)SPNパスワードを設定することを主張したためです。後者の場合、ktpassでキータブを作成することは避けられないと思います。
「標準的な方法」でキータブを作成できました。つまり、専用のユーザーアカウントを設定してSPNに関連付けました。
ktpass /princ TEST/Host@DOMAIN /mapuser user@DOMAIN /pass * /out foo.keytab /ptype KRB5_NT_PRINCIPAL
その操作は(おそらく)ユーザーのログインを壊しました、しかし私はそれからkinitすることができました
kinit -k -t /tmp/foo.keytab TEST/Host@DOMAIN