SSLによるSecureWWWサーバの構築(Windows編)SSLによるSecureWWWサーバの構築(Windows編)Windows環境でのいろいろなサーバソフトの動作確認をするため、クライアントにApacheを入れていますが、SSL対応ができておらず不便なので対応させてみました。Apache+SSLのWindows版に関してはインターネット上にいろいろ情報はあったのですが、1.3系が主体で情報が古く、2.0系ではうまく動作しませんでした。調査した結果、何とか動作するようになったのでここにまとめておきます。Apacheでは、SSLの運用形態の一つとして単に情報の暗号化を行うだけでなく、認証局(ここではプライベートCAを利用)で認証したクライアント証明書を使用することにより、その証明書を持ったクライアント以外からのアクセスを制限することができます。運用は煩雑になりますので、特別なケースでの運用形態と思われますが、より強力なセキュリティアクセスが可能となります。自宅サーバでも、ローカルな運用に使用したりできますので、その設定方法も簡単に解説しておきます。SP2で行っています。Win32のインストールApacheのサイトにあるファイルはSSLに対応していません。そこで、こちらにSSL対応のオールインワンのバイナリがありますので、これを使うことにしました。ダウンロードしたのは、Apache_2.0.53-Openssl_0.9.72-Win32.zipです。最近(2005.12.03)、上記のHunterのサイトがDNSも牽けずアクセスできなくなっています。以前も同様のことがあったのですが、今回は少し長い気がしますので、Apache2+SSL対応のWindows版が置いてあるサイトを紹介して置きます。http://brandleadershipmarketing.com/apache/元々、HunterのArchiveが置いてあったサイト。binaries"というサイト名をどう思うかがあるが、SSL対応のバイナリが置かれている。httpd-2.0.55-w32.zipの動作はおやじは確認済み。なっているので、そこだけ注意すればおやじのコンテンツが適用できる。等が組み込まれた"XAMPP"というオールインワンバイナリである。下手にバラバラにインストールするより整合がとられているので、これを使用してしまうほうがよいかもしれない。XAMPPでググレば情報があるので、参考にするとよい。ダウンロードしたファイルをディレクトリ付きで適当な場所に解凍する。(おやじは、D:\work配下に解凍)現在、Apacheがインストールされているなら、アンインストールする。Apache.0系がインストールされていたなら、httpd.confがほとんど流用できるので、インストールされていたディレクトリ名を変更し、バックアップしておくとよい。新規インストールの場合は、この項の作業は不要。新規インストールの場合は、Apacheのインストールディレクトリをシステムがインストールされているパーティションに作成する。インストール済みの場合は、バックアップ前のディレクトリ名でインストールディレクトリを作成する。作成したディレクトリ配下に、1項で展開した中身を全てコピーする。C:\WINNT\system32内にコピーする。この後、インストールするが、httpd.confやssl.confの設定及びSSLの鍵や証明書の準備ができていないと蹴られるので、そちらの準備を先にする。Win32を動かすため、httpd.confやssl.confの設定及びSSLの鍵や証明書の準備を行います。SSL用証明書等の作成については、こちらを参考に必要なものを作成してください。今までApache.0系を使用していた場合は、SSLモジュールの組み込み以外は、バックアップしてあったhttpd.confと同じでよいので作業は簡単です。新規インストールの場合は、下記により設定していきます。設定情報は、Apacheディレクトリ中のconfディレクトリにあるhttpd.confにあるので、テキストエディタで編集していきます。設定を変更した項目は以下のとおりです。変更する場合は、失敗に備えて変更行を下の行にコピーし、元の行の先頭に「#」を付加することにより、コメント行として保存しながら作業しました。ならなくなったら、httpd.default.confやssl.default.confが初期のhttpd.confやssl.confと同一なので、いじくりすぎたhttpd.confやssl.confを削除して、httpd.default.confやssl.default.confをコピーしてファイル名を変更すれば初期状態に戻るので頭を整理しながらやり直したほうが早い場合もあります。(青字は削除、赤字は追加、緑字は変更したものです。)サーバルートの変更Apacheをコピーしたディレクトリを指定する。C:\Apache2)に変更する。ここを変更、即ちデフォルト以外にすると他の設定にも影響がでるので、見落とさないように修正が必要である。"c:/apache2"SSLモジュールの組み込みSSLを動かすため、DSOでSSLモジュールを組み込むよう指定する。今回は、おやじだけでなく、あっこやリナもホームページを作りたいとのことなので、以下のようなディレクトリ構成で、プロバイダと同じように”http://www.aconus.com/~oyaji/といった形式でアクセスできるようにしてみました。ルート(http://www.aconus.com/)は将来使うこととして、空けてあります。ディクトリは、管理面とセキュリティ面から独立したドライブ(Eドライブ)に作成しました。おやじがドキュメントを異なるディレクトリにした最大の理由は、システムが不安定になったときにCドライブをバックアップから復元するが、そのときに焦っていて最新のコンテンツ(BBS等)のバックアップを忘れて戻してしまうと、コンテンツがパーになってしまうといった事故防止のためである。]ドキュメントルートの変更ドキュメントルートでは、http://www.aconus.com/やhttpd://192.168.1.100/のようにホスト名やサーバのIPアドレスでアクセスしたときにApacheがアクセスするディレクトリを指定する。デフォルトはC:/Apache/htdocsであり、最初にApacheにうまくアクセスできたときにご対面するApacheのテストページは、C:/Apache/htdocs配下にある、index.html.varファイルからジェネレートされたものである。おやじは、上記のようにEドライブ下にコンテンツ用ディレクトリを作成したので下記のように変更する。上記のドキュメントルートの変更に伴い、Directoryディレクティブでドキュメントルートの振る舞いを指定しているので、これも合わせて変更する。(ドキュメントルートのDirectoryディレクティブ内)Indexesがあると、ディレクトリ指定でアクセスされた場合(http://www.aconus.com/のように「/」で終わるか最後がディレクトリだった場合)に、Apacheはそのディレクトリ内に後述のDirectoryIndexディレクティブで指定したHTMLファイルが無いか左側から探し、対象ファイルが見つからないとインデックスリストが表示されてしまうので削除しました。ExecCGI/Includesはこのディレクトリ配下でCGI/SSIの実行を許可する場合に指定する。cgii-binディレクトリでしか動作させない場合は、指定しないこと。(Optionsの意味はユーザディレクトリでも同様。詳しくは、こちらを参照のこと。Includesユーザディレクトリの変更UserDirでは、http://www.aconus.com/~oyaji/といった形式でアクセスさせる場合のディレクトリを指定する。*はワイルドカードで、http://www.aconus.com/~oyaji/のように[~aaa]で指定したディレクトリ名と同等になり、[~oyaji]ならE:/web/oyaji/public_html配下のファイルが表示される。メソッドに限定するもので、それ以外のメソッドは、影響を受けない。それ以外のメソッドについてはアクセス制御がかからない。標準のメソッドと標準外や未認識のメソッドの場合の両方を設定できる。メソッド以外のアクセス制御が行われ、ここでの設定では不許可になる。<LimitExcept>は未設定のメソッド全てに制御がかかるので、こちらで設定したほうが確実である。all</LimitExcept></Directory>HTMLファイル名の追加ディレクトリ指定でアクセスされた場合(http://www.aconus.com/のように「/」で終わるか最後がディレクトリだった場合)に、Apacheはそのディレクトリ内にここで指定したファイルが無いか左側から探し、見つかればそのファイルを転送する。見つからない場合は、そのディレクトリでのOptions指定でIndexesが有効ならインデックリストを表示し、未指定なら404エラーとなる。おやじは、index.htmというファイル名をデフォルトとしているのでそれを追加している。下記の例ではSSI用のindex.shtmlも追加してある。index.html.varホストネームでのログ収集デフォルトではログのアドレスはIPアドレスで行われるが、この機能を使うとDNSで逆牽きしてホスト名で記録できる。DNSの逆牽きをすると負荷が重くなるが、アクセスがまだまだ少ないのとホストネームのほうが常連さんならすぐにわかること、動的IPの場合は後で逆引きしても牽けないことが多々あるため、あえて使用しています。逆牽き設定をしていないDNSや設定が誤っているDNSが多く、エラーログがかなり出てしまいます。(BINDの設定でログらないようにしています。modules/mod_setenvif.soがアンコメントアウトされていることを確認。コメントアウトし、以下を記述。・2/8行目で、家庭内からのアクセスをhome.logに採取。ログ不要ならコメントアウト。・3/9行目で、娘のサイトへのアクセスをakirin.logに採取。combinedとしてreferrerを採取。・4行目でCodeRed、5〜7行目でNimudaからアタックを識別し、10行目でworm.logに採取。ログ不要ならコメントアウト。・11行目で残りのアクセスをaccess.logに採取。combinedとしてreferrerを採取。おやじのサイトへのアクセスは、ここに含まれる。詳細は、こちらを参照のこと。環境でブラウザが言語の優先順位を提供してない場合の優先度を指定するもので、通常はコンテンツも対応していないので変更不要。先頭(左)に持ってくること。下記の設定をした場合は、ドキュメントで必ずcharsetを指定しないと文字化けする。Offとしても良い)、ドキュメントに依存して表示させている。等も改造しているので注意が必要である。して動作させたい拡張子を記述する。Apacheのディレクトリ配下にコピーする。C:\Apache\certsssl.confの設定を行う。c:/Apache/certs/server.key◆クライアント認証を動かすための設定クライアント認証関係の設定は、単に通信を暗号化(httpsでのアクセス)するだけなら不要です。このクライアント用証明書によるクライアント認証を導入すると、予め認証局で署名されたクライアント用証明書を持たない端末がアクセスしても、接続そのものが拒否されるのでセキュリティ的にかなり強固になります。反面、クライアント毎に証明書を発行することになるので、運用はかなり面倒になりますが、セキュリティとのバータなので止むを得ません。このようなクライアント認証は、一般的に企業などで導入されており、具体例としてはwebを使用して外勤の営業マンが社外から社内システムにアクセスできるシステムや株取引のシステムなどに導入されています。このようなシステムの場合、不特定多数にアクセスされるとApacheの認証やアプリ認証だけではセキュリティが甘くなるため、アクセスレベルでセキュリティを強化するためにクライアント認証を導入します。作成したCA用証明書を、Apacheのディレクトリ配下にコピーする。C:\Apache\certs証明書失効リストを、Apacheのディレクトリ配下にコピーする。C:\Apache\certsなお、失効が発生するたびにこの作業は必要になるので、ssl.confでcrl.pem作成ディレクトリを直接指定したほうが良いかもしれない。Windowsの場合は、リストを有効にするためApacheの再起動が必要である。ssl.confの設定を行う。c:/Apache/certs/crl.pem◆サービス起動の設定と起動ここで、サービス起動できるように設定します。一部レジストリを触るので注意が必要です。サービスへの登録コマンドプロンプトで下記のようにして、サービスに登録する。上記でサービス起動できるようになるが、SSLでは起動できない。実行ファイルのパスのオプションを書き換えるため、レジストリエディタでパラメータを追加する。[スタート]->[ファイル名を指定して実行]で、名前欄に「regedit」と入力し[OK]を押す。2.レジストリエディタが起動されるので、左の欄で[マイコンピュータ]を選択する。runservice」と入力し検索する。4.[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Apache\ImagePath](下段に枠内に表示)で停止するので、名前欄のImagePath上で右クリックし、「変更」を選択する。runservice」となるようにする。後は[OK]を押してウインドウを閉じればおしまいである。Monitorの自動起動の設定スタートアップに登録するだけである。1.[スタート]->[設定]->[タスクバーとスタートメニュー]で、プロパティを開く。2.[詳細タブ]->[追加]で、ショートカットの作成が開くので、[参照]でApacheをインストールしたディレクトリにある「ApacheMonitor.exe」(c:\Apache\bin\ApacheMonitor.exe)を選択し、[OK]を押す。3.[次へ]を押し、ショートカットを保存するフォルダとして[スタートアップ]を選択し、[次へ]を押し、判りやすい名前を付けて[完了]を押せばおしまい。Monitorを起動し、Apacheを起動する。-an」と入力すると、アクティブはコネクションが表示されるので、[80]と[443]が存在するか確認する。Perlのインストールさて、このままでは、CGIが動きません。CGIを動かすため、Perlをインストールします。Perlをこちらからダウンロードします。おやじがダウンロードしたのは、以下のファイルです。ActivePerl-5.8.6.811-MSWin32-x86-122208.msiダウンロードしたファイルをインストールする。2.0が必要)途中で、インストール先をC:\perlからC:\usr\localに変更してインストール。(おやじはこれで苦労した)これは、一般に提供されているCGIスクリプトの多くが、下記のようにPerlへのパスを指定しているからです。ASPN」にチェックを入れインストールを続行する。PPMを有効にしておくと後でいろいろなperlモジュールが必要になったとき簡単にインストールできる。インストールが完了したら、Windowsを再起動する。ここで、Perlが正常にインストールできたか確認します。スタートメニューからMSDOSプロンプトを起動。Page.と表示されれば、成功。これで、CGIも動かせます。カウンタを動作させて見ましたが、うまく動作しているようです。