FreeBSD + ApacheでAD連携 SSO

投稿者: | 2013年2月18日

FreeBSD上のApacheとWindows Server上のADを連携させてSSOをやってみた。
ちなみに手元の環境がFreeBSD 7.1Rとか言う化石的な環境なところだけご注意ください。
(時間が取れれば、9.1Rとかで試したいところですが・・・)

検索してみた感じだと、面倒そうだったけど結構あっさり出来た。

  • ドメイン名:addomain.example.local
  • ドメインコントローラ:dc01.addomain.example.local
  • Webサーバ:webserv.addomain.example.local
  • SSOユーザ名(認証用ダミーユーザ):httpsso
  • SSOユーザパスワード:httpssoPass

Windows Server側で以下のコマンドを実行し、生成された keytab と言うファイルをFreeBSD側に持ってくる。

C:\>ktpass.exe -princ HTTP/webserv.addomain.example.local@ADDOMAIN.EXAMPLE.LOCAL -mapuser httpsso@addomain.example.local -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -pass httpssoPass -out c:\keytab
Targeting domain controller: dc01.addomain.example.local
Successfully mapped HTTP/webserv.addomain.example.local to httpsso.
Password succesfully set!
Key created.
Output keytab to c:\keytab:
Keytab version: xxxx
keysize xx HTTP/webserv.addomain.example.local@ADDOMAIN.EXAMPLE.LOCAL ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x17 (RC4-HMAC) keylength 16 (xxxxxxxx)

FreeBSD側はportsからmod_auth_kerb2を入れる

# portinstall www/mod_auth_kerb2/

FreeBSD側の設定としては以下の2つ

/etc/krb5.conf

[libdefaults]
default_realm = ADDOMAIN.EXAMPLE.LOCAL

[realms]
ADDOMAIN.EXAMPLE.LOCAL = {
kdc = tcp/dc01.addomain.example.local
}

[domain_realm]
.addomain.example.local = ADDOMAIN.EXAMPLE.LOCAL
addomain.example.local = ADDOMAIN.EXAMPLE.LOCAL

.htaccess

AuthType Kerberos
AuthName "Kerberos Login"
KrbAuthRealms ADDOMAIN.EXAMPLE.LOCAL
KrbServiceName HTTP/webserv.addomain.example.local@ADDOMAIN.EXAMPLE.LOCAL
Krb5Keytab /home/tatsuya/keytab
KrbVerifyKDC Off
Require valid-user

FreeBSD側で確認するには以下のコマンドが使えるらしい。
ticketが取れればOKって感じかな?

# kinit --use-keytab -t /home/tatsuya/keytab HTTP/webserv.addomain.example.local
kinit: NOTICE: ticket renewable lifetime is 1 week

ブラウザで表示するときは、ホスト名で指定しないとダメっぽいですね。
IEなら http://webserv/ と言う感じで、ゾーンがイントラにならないとダメかな。
Chromeだと http://webserv.addomain.example.local/ でも大丈夫そう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください