Mod_auth_kerbを使用してApacheHTTPD 2.4をセットアップし、Active Directoryでサービスアカウントを作成し、httpホスト名にSPNを追加し、Linuxマシンでkeytabファイルを作成し、IEからADドメインにログインしたユーザーに対してSSOが正常に機能するようにしました。 。良かったです!
ただし、毎週かそこらで、ユーザーはWebサイトにサインインする代わりに、代わりにhttp基本認証プロンプトを受け取ります。これは資格情報を受け入れません。 httpdサーバーのログを見ると、次のようなエントリがあります。
[auth_kerb:error] [pid 8040] [client 192.168.100.100:54460] gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information (, Key version number for principal in key table is incorrect)
ADのKVNO(Kerberosキーバージョン番号)が増加したため、キータブが無効になっているようです。次のようなことを行うことでそれを確認できます。
$ kinit '[email protected]'
Password for [email protected]
$ kvno HTTP/sso.example.com
HTTP/[email protected]: kvno = 12
$ klist -k krb5-keytab
Keytab name: FILE:krb5-keytab
KVNO Principal
---- ---------------------------------------------
11 HTTP/[email protected]
ADが報告されるKVNOは何らかの形でインクリメントされており、Apacheが使用しているキータブのKVNOよりも1つ高いため、KerberosSSOが失敗します。
キータブを次のように再作成すると、次のようになります。
$ kinit '[email protected]'
Password for [email protected]
$ KEYTAB=krb5-keytab
$ SN="HTTP/[email protected]"
$ KVNO=`kvno $SN | awk -F'kvno = ' '{print $2}'`
$ echo "KVNO for $SN is $KVNO"
KVNO for HTTP/[email protected] is 12
$ rm $KEYTAB
$ ktutil
addent -password -p HTTP/[email protected] -k 12 -e arcfour-hmac
wkt krb5-keytab
$ chown Apache.apache $KEYTAB
$ chmod 440 $KEYTAB
$ chcon -u system_u -t httpd_config_t $KEYTAB
$ service httpd restart
その後、Kerberos SSOが再び機能し始め、すべてが正常になります。 KVNOが静かにそして不思議なことにADで1つ高い値にぶつかったので、1週間かそこらの間、突然それは再び失敗するでしょう。
したがって、ADで、またはLinuxでkerberos keytabファイルを作成する方法で、KVNOが1〜2週間ごとにランダムに増加し続けないようにするために、何をする必要がありますか。 ?
Active Directoryは、RFC 4120に従ってKVNOをインクリメントします。Microsoftは、ドキュメントMS-KILEセクション3.1.5.8にその実装を文書化しました。
ActiveDirectoryは基本的にKVNOを無視します。 (読み取り専用DCを除き、RODCが危険にさらされた場合、保持しているキーを別のDCに対して再利用することはできません。)したがって、ADは通常、KVNOを維持していてもKVNOが何であるかを気にしません。チケットが有効で有効期限が切れていない場合にのみ気になります。 (LinuxクライアントがKVNOの厳密なチェックを行うかどうかはわかりませんが、明らかにそうです。)
Active Directoryは、そのプリンシパルに対して持っている最新のキーを使用して復号化/検証を試みます。それが機能しない場合は、前のキーを使用して試行します(前のキーが存続期間内にある限り、 )それが機能しない場合は、リクエストが失敗します。クライアントが送信するKVNOに関係なく。ただし、すべてのドメインコントローラーがKVNO-1(つまり、以前のKVNO)を持っているわけではなく、最後にチケットを発行したドメインコントローラーだけを持っていることに注意してください。
KVNOは、クライアントコンピューターがパスワードを変更するか、チケットを更新するか、チケットの有効期限が切れると増分されます。デフォルトでは、Active Directoryはチケットが更新される最大時間に7日を使用します。これは、「1週間ほど機能します。」の説明と一致します。
ドメインメンバーコンピューターから有効なパスワード変更またはチケットローテーションを受信したときに、ActiveDirectoryがKVNOをインクリメントするのを停止するメカニズムはありません。つまり、Active DirectoryはKVNOを「不思議なことに」更新しないということです。つまり、特定の理由で更新します。
Linuxマシンは、最大有効期間が7日を過ぎても、(現在は期限切れの)チケットを使用しようとしているように見えます。 (または、Active Directoryがより短いもの用に構成されています。)
/etc/krb5.conf
を調べて、最大チケット有効期間がActive Directory(デフォルトドメイングループポリシーのKerberosポリシー)で指定されている最大チケット有効期間内であることを確認します。チケットを更新する必要があります(KVNOは増加)ADによって指定された間隔内。
あなたはおそらくこのバグにぶつかっています https://bugzilla.samba.org/show_bug.cgi?id=675
それを解決するsamba設定の変更がいくつかあります。設定しました
kerberos method = secrets and keytab