mod_auth_kerb の KrbVerifyKDC を on にできた を読んだところ、KrbVerifyKDC off を書いたら今まで Basic 認証が通らなかったところが通るようになった。IEを利用した統合認証だったら KrbVerifyKDC on のままでも問題なく動いている。
使っているバージョンは mod_auth_kerb 5.3 なのだがやはり off にするとBasic認証で通らない。ちなみに KrbVerifyKDC on の状態で ActiveDirectory ドメインコントローラのイベントログ(セキュリティ)を確認すると、1回失敗した後に2回目に成功しているログが確認できる。
Apache/認証にActiveDirectoryを使う方法 でも KrbVerifyKDC off するように書いてあるな。
ちなみに /etc/krb5.conf については、以下のように tcp を指定しないとudpで流しきれないデータ量になった時に通信できなくなってはまる現象が以前あった。(最新の環境だと改善している可能性はある)
[realms]
AD.EXAMPLE.COM = {
kdc = tcp/dc01.ad.example.com:88
}
そういえばと確認したら1月に投げていた ports/119794: patch for www/mod_auth_kerb to fix on FreeBSD 7.0 は採用されてた。ちょっと嬉しい。
(追記)統合認証は由緒正しいKerberos認証なので、
- Windowsクライアントがドメインログオンした時点でTGTを取得。このクライアントがWebブラウザを利用してサイトにアクセス
- Webブラウザがサイトにアクセスするとチケットを要求される
- WebブラウザはドメインコントローラにTGTを渡しつつ、今回アクセスしている先専用のサービスチケットをもらう
- サイト(apache)は keytab にある鍵を使って サービスチケット を検証する。すなわち適用されるサービス名は http
一方Basic認証の場合、ブラウザ側がTGTを持っているわけではないので
- Webブラウザがサイトにアクセス
- apacheはドメインコントローラに向かってユーザ名とパスワードを渡して TGT を要求。
適用されるサービス名は host
- 返事がOKだったら認証したものとみなす
この「返事がOKだったら」の部分、これを検証するための鍵は通常 /etc/krb5.keytab に格納されていて、俺の管理しているマシンでは root でしか読み書きできないようにアクセス権が設定されている。これでは確かに KrbVerifyKDC on で検証するのは無理…
かと思ったが、「更にサービスチケットの発行を依頼してサービスチケットを検証すれぼOK」か。
で、1回 /etc/krb5.keytab を apache の実行ユーザが読めるように変更したら、アクセスできるようになってよしよしと思ってたら、元にもどして root でのみ読み書きできるようにしてもやっぱり KrbVerifyKDC on でBasic認証が通るようになってしまった。何が起きているんだ?