mod_auth_kerb で Basic認証を有効にする (Active Directory を使ったシングルサインオン)

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認証なので、

  1. Windowsクライアントがドメインログオンした時点でTGTを取得。このクライアントがWebブラウザを利用してサイトにアクセス
  2. Webブラウザがサイトにアクセスするとチケットを要求される
  3. WebブラウザはドメインコントローラにTGTを渡しつつ、今回アクセスしている先専用のサービスチケットをもらう
  4. サイト(apache)は keytab にある鍵を使って サービスチケット を検証する。すなわち適用されるサービス名は http

一方Basic認証の場合、ブラウザ側がTGTを持っているわけではないので

  1. Webブラウザがサイトにアクセス
  2. apacheはドメインコントローラに向かってユーザ名とパスワードを渡して TGT を要求。適用されるサービス名は host
  3. 返事がOKだったら認証したものとみなす

この「返事がOKだったら」の部分、これを検証するための鍵は通常 /etc/krb5.keytab に格納されていて、俺の管理しているマシンでは root でしか読み書きできないようにアクセス権が設定されている。これでは確かに KrbVerifyKDC on で検証するのは無理…

かと思ったが、「更にサービスチケットの発行を依頼してサービスチケットを検証すれぼOK」か。

で、1回 /etc/krb5.keytab を apache の実行ユーザが読めるように変更したら、アクセスできるようになってよしよしと思ってたら、元にもどして root でのみ読み書きできるようにしてもやっぱり KrbVerifyKDC on でBasic認証が通るようになってしまった。何が起きているんだ?

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。