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/ でも大丈夫そう。