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側に持ってくる。

<br />
C:\&gt;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<br />
Targeting domain controller: dc01.addomain.example.local<br />
Successfully mapped HTTP/webserv.addomain.example.local to httpsso.<br />
Password succesfully set!<br />
Key created.<br />
Output keytab to c:\keytab:<br />
Keytab version: xxxx<br />
keysize xx HTTP/webserv.addomain.example.local@ADDOMAIN.EXAMPLE.LOCAL ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x17 (RC4-HMAC) keylength 16 (xxxxxxxx)<br />

FreeBSD側はportsからmod_auth_kerb2を入れる

<br />
# portinstall www/mod_auth_kerb2/<br />

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

/etc/krb5.conf

<br />
[libdefaults]<br />
default_realm = ADDOMAIN.EXAMPLE.LOCAL</p>
<p>[realms]<br />
ADDOMAIN.EXAMPLE.LOCAL = {<br />
kdc = tcp/dc01.addomain.example.local<br />
}</p>
<p>[domain_realm]<br />
.addomain.example.local = ADDOMAIN.EXAMPLE.LOCAL<br />
addomain.example.local = ADDOMAIN.EXAMPLE.LOCAL<br />

.htaccess

<br />
AuthType Kerberos<br />
AuthName &quot;Kerberos Login&quot;<br />
KrbAuthRealms ADDOMAIN.EXAMPLE.LOCAL<br />
KrbServiceName HTTP/webserv.addomain.example.local@ADDOMAIN.EXAMPLE.LOCAL<br />
Krb5Keytab /home/tatsuya/keytab<br />
KrbVerifyKDC Off<br />
Require valid-user<br />

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

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

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

コメントを残す

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

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