Windowsで立てるApache2.2+WebDAV+SSL サーバー(SSLサーバーってなんだよ)

ApacheWebDAV+SSLなファイル共有サーバーを立てたのでメモ。
実は一度PC Aでサーバーを立てたのだが、のっぴきならない事情からPC Bにconfファイル
等々を移して立て直そうとしたものの、どうしてもApacheが元のconfファイルを拒否して
しまい、結局原因がわからなかったので一から立て直した次第。

■やりたいこと
Windows+Apache 2.2+WebDAV(Basic認証)+SSLという至って普通のSecure serverを作る
SSL以外の接続は拒否したい
・TeamFileで接続できればOK
SSLApache 2.2のインストーラ付属のOpenSSL 0.9.8x(xはアルファベット)を使う
・なるべく設定は変更しない(移植時に困る)

Apache 2.2の準備
 Apache 2.2の準備自体は簡単。
 公式サイトからWin32向けのインストーラをダウンロードして、ウィザードに従って
 インストールするだけ。SSLを使うのでOpenSSLが一緒にインストールされるものを使う。
 ここから下は"C:\Apache"にApacheをインストールした前提で進めます。

 <注意点>
 ・インストール先パスのデフォルトは"C:\Program Files (x86)\Apach うんちゃら"
  になるが、"C:\apache"のように短くてスペースを挟まないディレクトリを指定した
  方がいい。長かったりスペースを含んでいると、confファイルを書く際に嫌になる。
 ・インストール物をカスタムで指定した後は、必ずツリーの一番上を選択してから次へ
  行くこと。ここで何か(Docとか)を選択した状態でインストール開始すると、選択さ
  れたものしかインストールされない。

 なるべく標準のものから変更したくないので、httpd.confの下記の設定を変更・追加
 した以外はデフォルトのまま(ServerRootもそのまま)。

 -----------------------------------------------------
 # HTTPの待ち受けポートを変更
 Listen xxxx

 #WebDAVを使うのでコメントアウトを削除
 LoadModule dav_module modules/mod_dav.so
 LoadModule dav_fs_module modules/mod_dav_fs.so
 LoadModule dav_lock_module modules/mod_dav_lock.so

 LoadModule ssl_module modules/mod_ssl.so

 #SSL以外の接続をはじきたいので、すべてのに下記を追加
 SSLRequireSSL

 #WebDAVの設定を使うのでコメントアウトを削除
 Include conf/extra/httpd-dav.conf

 #SSL使うのでコメントアウトを削除
 Include conf/extra/httpd-ssl.conf
 ----------------------------------------------------

WebDAVの準備
 conf/extra/httpd-dav.confをいじる。
 BASIC認証を行うためにUser/Passwordが記載されたファイル(.htpasswd)を作る必要が
 あるが、俺はもう作ってあったのでコピペするだけでした。作り方は5個くらい前の記事を参照。

 その前に
 ○Apacheインストールディレクトリの直下にvarというフォルダを作っておく。
  ここにWebDAVのモジュールがファイルアクセスの排他に使うDavLockというファイル
  が作られる(らしいよ)。

 WebDAVでやりたいことの詳細
 ・認証方式はBASIC認証を使う。Digestじゃなくてもいい。いいんだよ。

 httpd-dav.confは下記を変更・追加。
 ----------------------------------------------------
 #エイリアスは/webdavに。共有するフォルダは適宜設定
 Alias /webdav "C:/webdav"

#あわせて変更
 

 #BASIC認証なので、AuthTypeはBasicを指定
 AuthType Basic

 #AuthUserFileは.htpasswdの場所を指定
 AuthUserFile "C:/apache/conf/.htpasswd"

 #BASIC認証のUserListの形式を指定
 AuthBasicProvider file

 #AuthDigestProviderは使わないのでコメントアウト
 #AuthDigestProvider file

 #全てのUserをFullControlにしたいのでコメントアウト
 #
 #require user admin
 #

 #SSL必須なので追加
 SSLRequireSSL
 ----------------------------------------------------

SSLの準備
 conf/extra/httpd-ssl.confをいじる。
 OpenSSLがインストール時にすでに入っているので特にインストールするものはなし。
 念のためコマンドプロンプトを開いて"openssl"と打って実行して、exeが存在すること
 を確認する。エラーが出たら、openssl.exeのあるフォルダにパスが通っているか確認
 する。

 ちなみに証明書(*.crt)・秘密鍵(*.key)はすでに作ってあるので割愛。
 「Apache OpenSSL 証明書」で検索すればヒットします。

 ・SSLを使う理由
  WebDAVで共有しているフォルダにアクセスするにはBASIC認証による認証が必要だが、
  BASIC認証はUser/Passが平文で流れる。昨今のセキュリティ事情的にこれは大変よろ
  しくないので、せめて通信は暗号化しておきたい。

 ----------------------------------------------------
 #HTTPアクセス時のポート。デフォルトのままだと決め打ちでアタックされそうなので、
 #せめてもの抵抗としてポート番号を変えてみる。
 Listen 4430

 #サーバーのIPアドレス(Local)を指定。ポート番号も合わせる。
 

 #証明書ファイルを指定
 SSLCertificateFile "C:/apache/conf/server.crt"

 #秘密鍵ファイルを指定
 SSLCertificateKeyFile "C:/apache/conf/server.key"

 #httpd-ssl.confの中にもがあるが、ここにSSLRequireSSLを追加すると
 #エラーになるので、そのままにしておく。何故エラーになるのかはわからない。
 #触らぬ神に祟り無し。
 ----------------------------------------------------

 Apacheの設定はこれで終わり(かな?)


ファイアウォールの設定(Windows7)
 Windows標準のファイアウォールは生かしてそのまま使うので、Apacheで使用する
 ポートだけ開放する。ついでにPingも許可する。

 □SSLポートの開放
  SSL接続のみ許可したいので、上で設定したPort4430だけ開放する。
  (1)「コントロールパネル」→「システムとセキュリティ」→「ファイアウォール
    状態の確認」を開く
  (2)左側のメニューから「詳細設定」を開く
  (3)管理コンソール画面が出てくるので、左側のツリーの「受信の規則」を選択し、
    右側のメニューから「新しい規則」を開く
  (4)「ポート」→(次へ)→「TCP」「特定のローカルポート:4430」→(次へ)→
    「接続を許可する」→(次へ)→「ドメイン・プライベート・パブリック」全て
    チェック→(次へ)→「名前」「説明」は適当に設定→「完了」
  これでSSL接続に使うPort:4430が解放される。

 □Pingの許可
  「新しい規則」を作るまでは、SSLポートの開放と同じ手順
  (1)「カスタム」→(次へ)→「すべてのプログラム」→(次へ)→「プロトコルの種類
   :ICMPv4」→(次へ)→「接続を許可する」→(次へ)→全部チェック→(次へ)→
   適当に名前と説明を入力→完了

 これでPort:4430(SSL)への接続とPingが許可された(ICMPv4を選択するステップで
 「カスタマイズ」ボタンを押すとICMPv4で許可するコマンドを選択できる)。


■接続テスト
 ブラウザで「https://192.168.0.2:4430/」とかすると確認できる。
 Apache+WebDAV+SSLWebDAVファイル共有を立てたが、クライアント側はTeamFileという
 SSL対応のWebDAVクライアントを使うので、そちらからの接続テストもする。

 (1)マイコンピュータを開くとTeamFileのアイコンがあるので開く
 (2)右クリックして「サーバーの追加」を選択
 (3)好きな名前を入力し、□詳細設定にチェックを入れる
 (4)「URL:http://192.168.0.2:4430/webdav/」を入力し、□SSLを使用する にチェック
   を入れる。
 (5)ログイン情報の欄
   □自動ログイン にチェックを入れる
   ユーザーIDとパスワードは、.htpasswdに登録されているものを入力。
 (6)「接続テスト」タブを選択し、「テスト」を押すと、「接続ステータス:接続成功」
   になることを確認。


ここまできたらあとはルーターの設定を変えて、Port:4430へのアクセスをサーバーに
ルーティングしてあげるだけ。お疲れ様でした。