Windows2003でLDAPS通信

Windows2003ServerでLDAP over SSLを行う。ldapはAD問い合わせにも使えるプロトコルだ。ADのユーザやグループを問い合わせたり、ldap認証リクエストをやりとりする。しかし、ldapのままでは暗号化されていないため、たとえば認証などに使うとなるとまずいし、問い合わせ結果応答には重要な個人情報なども含まれるため、実際に業務で使う場合にはSSL化は必須だ。今日はこれをWindows2003で行う段取りについてのお話。

 

SSL化するためには証明書が必要になる。Windowsで手軽にオレオレ証明局を立てればよい。Windows2003サーバーで証明局を立てる場合には証明書サービスをインストールする。

Windows2008だとAD CAサービスだったかな。しかし2003を使っている企業もまだまだ多い。ここでは2003のCAで苦労した点をいくつかまとめる。

 

 

CAにはいくつか種類がある。

 

・エンタープライズのルートCA

・エンタープライズの下位CA

スタンドアロンのルートCA

スタンドアロンの下位CA

 

エンタープライズは、アクティブディレクトリが必須だ。エンタープライズCAを構築すると、そのドメインに参加しているコンピュータに自動的にそのルート証明書がクライアントのログイン時に配布される。ユーザはなにもしなくても自分のクライアントマシンのルート証明書ストアにCA証明書が勝手に放り込まれる。スタンドアロンCAにはこの機能はない。

 

ではスタンドアロンCAは役に立たないのかと言うと、そんなことはない。単純な話、ドメインコントローラのない環境でも使えるということだ。ドメインコントローラは組んでないけどADサーバを立てている環境などではこちらが使える。ただし証明書の自動配布などはしてくれないが。

 

 

今回はエンタープライズCA。ドメインコントローラをプライマリとバックアップで冗長化しているケース。

 

証明書サービスのインストールは、コントロールパネルのプログラムの追加と削除から実行する。インストールを実行するユーザはAdministratorだ。たしかNetworkAdminかDomainAdminである必要があったような気がするが詳細は忘れた。プログラムの追加と削除を開き、Windowsコンポーネントのインストールをクリックすると、インストールが始まる。

 

CAの種類の選択、ここではエンタープライズのルートCAだ。次に、証明局(CA)のCommonNameを指定する。ほとんどの場合はドメインFQDNを指定すればいいだろう。たとえばドメインが[example.com]だったら、そのまま[example.com]でよい。というか、CNは見分けがついて他と重複していなければなんでもよい。さらに、ここで証明局の有効期間を指定するのだが、なるたけ長期間にした方がよい。思い切って99年とかでもよい。普通の証明書は長くても2,3年くらいが普通だが、このインストール時に指定する期間は「CAとしての期間」なので、これが短いと話にならない。

 

インストール中にはインストールメディアをドライブに入れておく必要がある。ここでよくあるのが、SP(ServicePack)のバージョンによるエラーだ。Windows2003ではSP2まで出ているが、SP1購入しWindowsUpdateでSP2を適用したような場合には、SP1のメディアしかない。そうすると、インストールの途中で、

 

「XXXXXのファイルが見つかりません」

 

といったエラーに出くわす。こういう場合に役立つのが、SPダウンロードだ。ここでは現時点で普通にMicrosoftのサイトから入手できるものを例に説明する。

 

http://www.microsoft.com/ja-jp/download/details.aspx?id=41

 

まずここからSPのexeをダウンロードする。その後、コマンドラインから

WindowsServer2003-KB914961-SP2-x86-JPN.exe -x

と入力しコマンド実行すると、ファイルを展開だけしてインストールまではやらない展開モードで起動してくれる。展開先を指定し実行すると、そこにi386という名前のフォルダが生成され、その中にServicePackの全ファイル群が解凍される。

 

これを準備しておいて、先ほどの証明書サービスインストール途中で「xxxxxxのファイルが見つかりません」のダイアログが表示されたら、そこで展開したi386のフォルダを指定してやる。すると、ほとんどの場合、そこに「xxxxx.xx_」とファイル名末尾がアンダーバーになっているファイルがあり、それが目的のファイルだ。これで99%解決するだろう。

 

 

証明書サービスがインストールされると、その時点ですでにエンタープライズルートCAのサービスが立ちあがっている。ここでクライアントPCがそのドメインにログオンすると、裏で自動的にADがクライアントPCにルート証明書を配布してくれる。

 

ルート証明書とは何か?詳細は証明書のサイトを見てもらえばいいが、証明書は信頼のつながりで成り立っている。A社はB社にA社の信頼性を保証してもらい、B社はさらにC社にB社の信頼性を保証してもらう。こうしてトラストツリーが出来上がるわけだが、その頂点にいるのがルートCAだ。ルートCAにはその上がない。行き止まりだ。だからルートCAは絶対に信頼できるものでなければならない。世界でもその数は限られていて、サイバートラストやベリサインが有名だ。しかし、わざわざお金をかけてまで保証していらんという場合には、自己証明つまりオレオレCAもありだ。商用でECなどに使うことはできないが、たとえばADでLDAP認証通信をSSL暗号化するLDAPS(Ldap over SSL)に必要なサーバー証明などの場合には、オレオレでも十分だ。

 

Windows2003でLDAPSを実現する場合、ひとつ注意しなくてはならないことがある。それは、証明書サービスをインストールしてCA証明書ができあがるだけではダメで、サーバーの再起動が必要ということだ。

 

Windows2003では、ActiveDirectoryのDomainServiceがサービスとしてOSから分かれていない。そのため、ActiveDirectoryに紐づけた証明書をDomainServiceは認識してくれない。再起動しない限り、そこにある証明書に気づいてくれないのだ。

 

再起動すれば、LDAPS通信ができるようになる。確認するためには、ldp.exeというツールが便利だ。これは単純にOSインストールした状態では存在しないものだが、Windows 2003 Serverのサポートツールをインストールすれば、C:\Program Files\SupportTools\配下にインストールされる。ちなみにサポートツールはインストールメディアのSUPPORT\TOOLS配下にインストーラがあり、特にどこかからダウンロードしたりする必要はない。

 

インストールしたらldp.exeを起動しよう。2003の場合は英語メニューだったような気がする。メニューのConnectionからConnectを選択し、ホスト名にlocalhost、ポート番号は636、SSLにチェックをつけてOKクリックすると、特にエラーが出なければ正常にLDAPS通信ができている。もし何らかの問題があって通信できない場合にはエラーダイアログが出るだろう。その場合は、サーバー再起動を忘れていないか、あるいはファイアウォールで636を閉じていないかなどを確認することになるだろう。

 

 

なお、再起動すると、再起動前にはなかった証明書がひとつ増えている。mmcの証明書スナップインで確認できる。ファイル名を指定して実行でmmc実行し、スナップインの追加で「証明書」、コンピュータアカウントのローカルコンピュータの証明書を選び、スナップインに追加する。ここで「個人」の証明書ストアを見てみよう。名前がそのサーバのFQDNになっている証明書がひとつ増えているはずだ。その有効期限を見てみよう。1年間になっているはずだ。Windowsの証明書サービスでは、発行するサーバー証明書の有効期限はデフォルトで1年になっている。この値はレジストリ変更で変えることも可能だが、それはまた今度にしよう。