VirtualBox上にWindows Serverを構築し、Active Directoryを用いてLDAP認証を通すまでの一連の手順をまとめます。
クライアントから作成したユーザーでログオンできるところまでをゴールとします。
1. 仮想環境の準備
1-1. 仮想マシンの作成
- VirtualBoxをダウンロードしてインストール
- WindowsServer2022(日本語版)のisoファイルをダウンロード
- VirtualBoxで新規仮想マシンを作成
1-2. 仮想マシンの設定
- 作成した仮想マシンの「設定」→「ネットワーク」を「ホストオンリーアダプター」に変更
- 仮想マシンを起動後、固定IPを設定(例:192.168.56.101)
- ファイアウォールを無効化
- クライアントから以下のコマンドでpingが通ることを確認
ping 192.168.56.101
2. Active Directoryの構築
2-1. Active Directory ドメインサービスの追加
2-2. ドメインコントローラーへ昇格
- サーバーマネージャーの旗マークの通知から「このサーバーをドメイン コントローラーに昇格」を実行
- 配置操作は"新しいフォレストを追加する"を選択。ルートドメイン名に
example.org
を指定。
- 適当なパスワードを設定
- DNSオプションは初期表示のまま
- 追加オプションは初期表示のまま
- 前提条件のチェックが問題ないことを確認してインストール
- インストール後は自動で再起動される
3. 組織グループとユーザーの作成
3-1. 組織グループ(OU)の作成
3-2. ユーザーの作成
4. ドメインコントローラーのポリシー更新
4-1. ドメインコントローラーのパスワードポリシー更新
-
Windows + R
→gpmc.msc
と入力し、グループポリシー管理コンソールを開く - 左ペインで以下を開く:
フォレスト: example.org └─ ドメイン └─ example.org └─ [Default Domain Policy]
- [Default Domain Policy] を右クリック → 編集
- ポリシーの編集画面で、以下をたどる:
コンピューターの構成 └─ ポリシー └─ Windows の設定 └─ セキュリティの設定 └─ アカウント ポリシー └─ パスワード ポリシー
- パスワード ポリシーを変更
- コマンドプロンプトで以下を実行し、設定を反映
gpupdate /force
4-2. TEST003
ユーザーのローカル ログオンを許可
-
Windows + R
→gpmc.msc
と入力し、グループポリシー管理コンソールを開く - 左ペインで以下を開く:
フォレスト: example.org └─ ドメイン └─ example.org └─ [Default Domain Controllers Policy]
- [Default Domain Policy] を右クリック → 編集
- ポリシーの編集画面で、以下をたどる:
コンピューターの構成 └─ ポリシー └─ Windows の設定 └─ セキュリティの設定 └─ ローカル ポリシー └─ ユーザー権利の割り当て └─ ローカルでログオンを許可
- test003 を追加
- コマンドプロンプトで以下を実行し、設定を反映
gpupdate /force
5. ログオン確認とトラブル対応
6. Apache Directory StudioでのでのLDAP確認
-
パラメータを設定する
- Host:192.168.56.101
- Port:389
- Bind DN or user:cn=TEST003,ou=operators,dc=example,dc=org
(test003@example.org も可) - Password:a
7. JavaのテストコードでLDAP認証が動作することを確認
以下のコードを使って、LDAP認証がプログラムからも通ることを確認できます。
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
public class LdapADAuthenticator {
public static void main(String[] args) {
// ADのドメイン名、ポート
String ldapUrl = "ldap://192.168.56.101:389"; // 仮想環境のIPに合わせて変更
// 認証対象のユーザー情報(完全なDN形式)
String userDN = "cn=TEST003,ou=operators,dc=example,dc=org"; // 適宜修正
String password = "a"; // 実際に設定したパスワード
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldapUrl);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, userDN);
env.put(Context.SECURITY_CREDENTIALS, password);
try {
DirContext ctx = new InitialDirContext(env);
System.out.println("OK");
ctx.close();
} catch (NamingException e) {
System.out.println("NG " + e.getMessage());
}
}
}
おわりに
仮想環境に構築したActive Directoryを使って、ユーザーの認証からLDAP通信の確認までを一通り試すことができました。開発や検証でADを扱う必要がある方の参考になれば幸いです。