Windowsで立てるApache2.2+WebDAV+SSL サーバー(SSLサーバーってなんだよ)
ApacheでWebDAV+SSLなファイル共有サーバーを立てたのでメモ。
実は一度PC Aでサーバーを立てたのだが、のっぴきならない事情からPC Bにconfファイル
等々を移して立て直そうとしたものの、どうしてもApacheが元のconfファイルを拒否して
しまい、結局原因がわからなかったので一から立て直した次第。
■やりたいこと
・Windows+Apache 2.2+WebDAV(Basic認証)+SSLという至って普通のSecure serverを作る
・SSL以外の接続は拒否したい
・TeamFileで接続できればOK
・SSLはApache 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の中にも
#エラーになるので、そのままにしておく。何故エラーになるのかはわからない。
#触らぬ神に祟り無し。
----------------------------------------------------
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+SSLでWebDAVファイル共有を立てたが、クライアント側はTeamFileという
SSL対応のWebDAVクライアントを使うので、そちらからの接続テストもする。
(1)マイコンピュータを開くとTeamFileのアイコンがあるので開く
(2)右クリックして「サーバーの追加」を選択
(3)好きな名前を入力し、□詳細設定にチェックを入れる
(4)「URL:http://192.168.0.2:4430/webdav/」を入力し、□SSLを使用する にチェック
を入れる。
(5)ログイン情報の欄
□自動ログイン にチェックを入れる
ユーザーIDとパスワードは、.htpasswdに登録されているものを入力。
(6)「接続テスト」タブを選択し、「テスト」を押すと、「接続ステータス:接続成功」
になることを確認。
ここまできたらあとはルーターの設定を変えて、Port:4430へのアクセスをサーバーに
ルーティングしてあげるだけ。お疲れ様でした。