NTLM (NT Lan Manager) は、ユーザーに認証、整合性、機密性を提供するマイクロソフトのセキュリティプロトコル群である。 Liferay PortalがNTLMとの統合に成功すると、ログインしているActive DirectoryユーザーはLiferay Portalにシームレスにログインすることができるようになります。 つまり、特定のドメイン上のワークステーションにログインしているユーザーが、Liferay Portalの「サインイン」をクリックすると、Liferay PortalはActive Directoryユーザーの認証情報に基づいて認証します。
NTLM は Microsoft によって推奨されなくなりましたが(現在では Kerberos がデフォルトの Active Directory SSO アプリケーションです)、多くのお客様がまだこの技術を使用していることを認識しています。 NTLMは、Liferay PortalがActive Directoryと正常に同期された時点で設定することができます。
解像度
Active Directoryのセットアップ
Liferay PortalがNTLMで動作するように設定する前に、Active Directory自体でいくつかの事柄が整っていることが必要です。 これらの手順を省略したり、間違って実行した場合、NTLM認証はLiferay Portalで機能しません。
- Active Directoryでサービス/コンピュータのアカウントを作成する
Active Directoryと接続するために、Liferay Portalは jcifs というサードパーティーのアプリケーションを使って、Liferay PortalとActive Directoryの間の一種の仲介役として機能します。 Jcifsは、NTLM認証を適切に処理するために、Active Directory内にサービスアカウントを設定する必要があります。 このサービスアカウントの設定方法については、 Jespa Operator's Manual (Creating a Computer Account on page 8; 今回は代替手順で設定しました。) を参照してください。
- 自分の交渉のフラグを知る(合わせる)。
Active Directoryでは、ネゴシエーションフラグと呼ばれるものを使用します。 この旗には2つの目的があります。 まず、ネゴシエーションフラグは、Active Directoryのセキュリティ設定を表しています。 この16進数コードの取得方法については、マイクロソフト社の 3.1.4.2 Netlogon Negotiable Options を参照してください。 2つ目の用途は、パスワードのようなものである。 これは、Liferay Portal が NTLM を用いて認証を行おうとする際に、Active Directory にネゴシエーションフラグを渡すことを意味している。 このフラグがActive Directoryの実際のフラグと一致すれば、認証を行うことができる。 しかし、一致しない場合は、誰も NTLM で認証することができない。
ntlm.auth.negotiate.flags
プロパティを Active Directory が使用している negotiate フラグに設定するだけです。 Liferay Portalのデフォルトフラグは、Active Directoryのデフォルトフラグを反映するように設定されています。NTLMの設定 / Liferay
Liferay PortalがActive Directoryと同期し、Active Directoryが設定されたので、Liferay PortalをNTLMで使用するための設定をします。
GUIでNTLMを設定する
- コントロールパネル > 設定にアクセスします。
- 認証 > NTLMを選択します。
- Active Directory Server の設定と Computer Account の認証情報を入力します。
portal-ext.properties
で NTLM を設定する。
以下は、 portal-ext.properties
に記述するのと同等の設定です。
ntlm.auth.enabled=true ntlm.auth.domain.controller=192.168.0.50 ntlm.auth.domain.controller.name=vm-win2008r2 ntlm.auth.domain=windows2008r2 ntlm.auth.service.account=VikesTest$@windows2008r2.ntlm ntlm.auth.service.password=test
GUIを使うにせよ、 portal-ext.properties
を使うにせよ、これが最後のステップになるはずです。
NTLMのテスト
- Internet Explorerを開き(IEではNTLMの動作が保証されています)、Liferay Portal(今回の場合はlocalhost:8080)に移動します。 ユーザーとして自動的にログインしている場合は、サインアウトしてください。
- 次にメインページで、 Sign Inをクリックします。
NTLMで構成され、Active DirectoryやLiferay Portalと同じドメインにあるワークステーションからログインしている場合、Liferay Portalに自動的にログインされるはずです。
もし、テストにおいて、Active DirectoryとLiferay Portalを含むドメイン外のマシンを使用しなければならない場合、Windowsのダイアログボックスがポップアップ表示されるでしょう。 ユーザーフィールドに、次のように入力します。 domainuser、ドメインはActive Directoryが存在するドメインの名前、ユーザーはそのドメイン上のActive Directoryユーザーです。 私たちの場合、例は次のようになります:
- ユーザー: windows2008r2\randy
- パスワード: test
追加情報
NTLMによるログ取得
NTLMのロギングレベルを上げるためには、jcifsに拾われるような変更をする必要があります。 手順は次のとおりです。
- アプリサーバーを停止する
-
$LIFERAY_WAR/WEB-INF/web.xml
にアクセスします。 - このフィルターを探す
filter> SSO Ntlm Filter com.liferay.portal.servlet.filters.sso.ntlm.NtlmFilter
追加
init-param> jcifs.util.loglevel 6
だから、こんな感じになるはずです:
filter> SSO Ntlm Filter com.liferay.portal.servlet.filters.sso.ntlm.NtlmFilter jcifs.util.loglevel 6
- アプリサーバーを起動する
この設定をすると、コンソール/ログに、ユーザーのコンピュータアカウント、コンピュータ情報、Javaパラメータ、およびログが出力されます。
NTLM バージョン 1 とバージョン 2 の相違点
セキュリティの観点からは、NTLMv2 は NTLMv1 よりもはるかに安全である。 ここでは、各バージョンでの認証の様子を紹介します。
NTLM v1
サーバは8バイトのランダムなチャレンジを送信することでクライアントを認証し、クライアントはLMとNTハッシュを返信する。 これらのハッシュは21バイトの文字列を作り、3つの7バイトに分割した後、64ビットチャレンジ用のDES暗号を形成するために再結合される。
NTLM v2
NTLM v2 は、8 バイトの HMCA-MD5 サーバのチャレンジに対して、2 つの 16 バイトのレスポンスを送信する。 最初のチャレンジは 8 バイトのランダムな値で、最初の 16 バイトのレスポンスに付加して 24 バイトのパッケージを作成し、NTLMv1 と互換性がある。 2番目のレスポンスは、以下のものからなる可変長のクライアントチャレンジです:NTタイム形式の現在時刻、8バイトのランダム値、ドメイン名、および標準的なフォーマットで構成されます。