Debian の Sarge が公開されて早、えーとどのくらいだったか忘れたけどせこせこといじってます。
久方ぶりの Linux なので簡単なツールの使い方すらあやふやな状態なので、基本的にこれが最善の手段だとは思っていませんが、とりあえず出来たことからちらほらとまとめていこうかと。

と言うわけで一発目は SSL と Webdav を Apache2 に導入してみました。
サーバ機として使っているのは ThinkPad の A21e. CUIで運用するぶんにはこのくらいのスペックで十分ですね。

Debian なんてカテゴリを作ったはいいけどそんなに更新するのかどうかっつう話で、まぁとりあえずしばらくの間はちろちろと更新していくつもりです。

STEP1 - 必要なツールのインストール

とりあえず root で作業しておけば間違いないので、以降の作業は全て root 扱いとします。
# apt-get install apache2 apache2-doc openssl libapache2-mod-encoding libapache-svn
左から順に Apache2 本体、Apache2 のドキュメント、SSL、Webdav、iConvってイメージでいいのかな。 これらをインストールしたらですね、まずはSSLの証明書から作っていきましょう。

STEP2 - 自己署名型証明書の作成

SSLっつうと難しそうな感じがしますが、別段そんなこともないのでさくっと片付けます。 /usr/lib/ssl/ に SSL 関連のデータが詰まってます。CD で移動しましょう。

/usr/lib/ssl# cp music/CA.sh .
CA.shっつうのが証明書やら秘密鍵を作るためのスクリプトです。それ以外のファイルと混同してしまわないようにひとつ上のディレクトリにコピりましょう。

/usr/lib/ssl# bash CA.sh -newca
新しく証明書を発行するっつう意味です。これを走らせると英語で色々と質問されます。
基本的に自己署名なので適当でいいと言えばそうなのですが、ある程度は真面目に答えましょう。
一番最初に聞かれるパスフレーズはきちんと覚えておくか、メモっておかないと後で泣く羽目になります。
質問に全て答えてシェルに戻ったら作業ディレクトリに demoCA っつうディレクトリが出来ているはずです。
そのディレクトリ配下の private ディレクトリを 700 に private/cakey.pem を 600 に chmod しましょう。
/usr/lib/ssl# chmod 600 demoCA/private/cakey.pem
/usr/lib/ssl# chmod 700 demoCA/private
といった感じです。
なんで chmod するのかってぇと、要するにコイツが鍵なので、やっぱ鍵は大事にしまっておかないとねってことなのですよ。
んで、この作業で作られるのが cacert.pem というのが証明書にあたるファイルです。これをベリサイン辺りの認証局に認証してもらうと正規の証明書が発行されるわけですよ。「信頼できる第三者に認証された」ってヤツですね。
でも、そもそも今回の実験では DDNS でドメインを運用しているので、SSL の本質から考えると第三者の認証ってのは現実的にムリだし、そもそも金がかかるのでそれについては言及しません。
ああ、cakey.pem が証明書の秘密鍵です。

STEP3 - SSL サーバの秘密鍵と証明書署名要求の作成

STEP2 で証明書と証明書の秘密鍵を作りましたので、今度は SSL サーバの秘密鍵をさくっと作りましょう。 まず、他のファイルと混同しないためにも root のホームディレクトリに移動しましょう。CD とだけ入力すればホームディレクトリに移動します。
~# openssl genrsa -out server.key 1024
SSL についてのエントリではないので openssl のコマンドについては言及しません。そこらへんについてはまた別の機会にでも、と思っております。
とりあえずこれで SSL サーバの秘密鍵が作られました。
そしたら次はこの秘密鍵から証明書署名のリクエストを生成します。
~# openssl req -new -key server.key -out server.csr
これにより証明書署名のリクエストができました。server.csr というファイルがそれです。
これで必要なファイルはそろいました。さくっと自己署名してしまいましょう。

STEP4 - 証明書の自己署名

STEP2 で作業した /usr/lib/ssl/ に openssl.cnf というファイルがあります。こいつを vi などで開きましょう。
するとブアーッとopensslに関する設定項目がでてくると思われます。
その37行目辺りに dir = ./demoCA と記述されているはずです。これを dir = /usr/lib/ssl/demoCA と、相対指定から絶対指定にしてしまいましょう。STEP2 でスクリプトをコピったことに対するフォローともいえます。
そしたら
~# openssl ca -out server.crt -infiles server.csr
と入力して openssl を走らせます。するとまずパスフレーズを聞かれるはずです。
STEP2 で入力したパスフレーズを入力しましょう。んで、あとはいくつか質問されると思いますのでとりあえず全部 Yes って言っておけば間違いないです。コンピュータに歯向かわないのがコツです。
これで自己署名型証明書ができました。もうちょいで SSL 接続が実現します。

STEP5 - 署名を Apache2 へ

はい、まずは必要なディレクトリを作成しましょう。
/etc/apache2/ 配下に ssl.key ssl.crt という二つのディレクトリを作成します。
ssl.key には server.key
ssl.crt には server.crt と server.csr
をそれぞれ移動します。
そしたら今度は /usr/share/doc/apache2/examples/ssl.conf.gz を /etc/apache2/sites-available/ に展開します。 /etc/apache2/sites-available/ はバーチャルホストの設定ファイルを置くディレクトリです。便利ですね。 展開した ssl.conf を vi などで開いて80行目辺りから編集します。

NameVirtualHost *:443
#<VirtualHost _default_:443>
<VirtualHost *:443>
DocumentRoot "/usr/share/apache2/default-site/htdocs"
ServerName サーバ機のFQDN:443
ServerAdmin 管理者のメールアドレス
ErrorLog /var/log/apache2/error_ssl_log
TransferLog /var/log/apache2/access_ssl_log

とりあえずこんな感じにすれば問題ないでしょう。
アクセスログとエラーログのファイル名を変えたのは、通常のアクセスログと混同しないためです。
んで a2ensite ssl.conf で SSL を有効にして a2enmod ssl で SSL のモジュールを有効にします。

/etc/init.d/apache2 restart でもって Apache2 を再起動したら完了です。
https://FQDNでアクセスしてみましょう。出来なかったらどこかの STEP でつまづいているはずです。
それでも基本的に余り面倒な部分も少なく、今回 server.key などと言った名前付けの規則に関しても設定ファイルやスクリプトをじっくり見れば全て書かれています。
さて、お次は Webdav です。こいつのための SSL だったわけです。

STEP6 - Webdav

Apache2 の設定ファイルをいじるわけですが、こういう作業の前には必ずバックアップをとっておきましょう。 cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak これだけでいざというときの復旧作業がぐっと楽になります。 そしたら /etc/apache2/apache2.conf を vi などで開きます。

<IfModule mod_dav.c>
Alias /home /mnt/nas/home
DAVLockDB /var/lock/DAV/DAVLock
<Directory>
Dav On
AllowOverride None
Options None
AuthType Basic
AuthName "Login"
AuthUserfile /etc/apache2/.dav_passwd
require valid-user
</Directory>
</IfModule>
基本的には Webdav 化したいディレクトリに Dav On と記述するだけでいいのですが、LAN 内で運用する場合のように IP アドレスでアクセス制限がかけられないことを前提としている(インターネット経由でのアクセス)ので、Basic 認証を併記します。
Basic 認証など Apache に関する設定については割愛します。
DAVLockDB /var/lock/DAV/DAVLock が Webdav でのファイル操作に関するロックファイルです。

<IfModule mod_headers.c>
Header add MS-Author-Via "DAV"
</IfModule>
これで mod_header が有効になります。

<IfModule mod_encoding.c>
EncodingEngine on
NormalizeUserName on
SetServerEncoding UTF-8
DefaultClientEncoding CP932 SJIS EUC-JP-MS
AddClientEncoding "cadaver/" EUC-JP-MS
AddClientEncoding "Microsoft .* DAV" CP932
AddClientEncoding "xdwin9x" SJIS
</IfModule>
これで Linux と Windows 間でのエンコーディングを解決します。

これらを追記して a2enmod dav_fs とすることでモジュールを有効化して Apache を再起動します。
どうでしょう。アクセスできましたか?

はじめは備忘録的な書き方にしようかと思ったのですが、それだとブログのエントリとして公開する意味はないし、何よりも備忘録的なものはもう存在するので、ということで STEP UP 形式にしてみました。

ちなみに俺は当初 libapache-svn の存在を知らず、iconvでかなりはまりました。
そして、俺の運用方法は smbmount した NAS を仮想ディレクトリとして使っています。FTPに比べて安定しているし、SSL 接続なのでセキュリティの面でも安心感はあります。

と、ここまで書いた気づいたのは「このブログを読んでいる人ほぼ全員が Linux に親しんでいない」という事実です。

トラックバック

このエントリーのトラックバックURL:
http://o29.s1.xrea.com/spais/mt-tb.cgi/45

コメント

nic[TypeKey Profile Page] 2005.10.01

ああ、書き忘れてたけど
# dpkg-reconfigure locales
でもってDebianの文字コードをUTF8にするのを忘れずに。
っつうかEUC-JPのままじゃmod-encodingがうまく動かないんじゃないかな。ちょいといじらないと。

コメントしてください




保存しますか?