« Ubuntuサーバー版をインストールする。 | トップページ | Ubuntuサーバー版でFTPS環境を構築する »

2008/10/19

Ubuntuサーバー版でWebDAV環境を構築する

前回、Ubuntuサーバー版のインストールが終わったので、WebDAV環境を作ります。

要件としては、
SSLに対応していることと、クライアント認証ができること、です。
OSは、Ubuntu8.04.1 Server です。

私は普段VineLinuxを使っています。これは一般的に Red Hat系 に属するディストリビューションです。(今は独自路線ですが。)
対してUbuntuは、Debian系 に属するディストリビューションです。
でも、VineLinuxはインストールやアップデートに apt-get を使う所がDebianと同じで、まそうは言っても同じLinuxだしアプリケーションの設定がディストリによって変わるとも思えないし簡単だろう、と思っていたわけです。
が・・・。全く違ったんだな、これが。


まず、OpenSSL のインストールをします。
基本的にUbuntu Sever Edition を使ったサーバ構築のメモを参考にし、クライアント証明書に関してはパソコンおやじさんのSSL用証明書の作成(Linux編)を参考にしました。
手前味噌ですが自分の所も参考にしました。(汗)

OpenSSL のインストール(ca-certificatesもいちおう入れてます)
$ sudo apt-get install openssl openssl-doc ca-certificates


設定ファイルの修正をします。デフォルト設定を変えておいて、作業を楽にします。
$ sudo vim /etc/ssl/openssl.cnf
#dir            = ./demoCA              # Where everything is kept 
dir             = /etc/ssl/CA  ←ディレクトリを変更しておく

default_days    = 3650 ←有効期間を 365 → 3650 10年に変更


countryName_default             = AU ← JPに変更
stateOrProvinceName_default     = Some-State ←  Tokyo に変更
localityName_default            = 市や区 ←  追加
0.organizationName_default      = Internet Widgits Pty Ltd ←  会社名に変更
organizationalUnitName_default  = 部署名← コメントアウトを外して、部署名 に変更
commonName_default = 管理者名かサーバー名 ←追加 
emailAddress_default = 管理者メールアドレス ← 追加


[ usr_cert ]
# This is OK for an SSL server.
# nsCertType                    = server
nsCertType                    = server  ← コメントアウトを外す


[ v3_ca ]
# Some might want this also
# nsCertType = sslCA, emailCA
nsCertType = sslCA, emailCA ← コメントアウトを外す

必要な各種ディレクトリ、ファイルを作成
$ cd /etc/ssl
$ sudo mkdir CA
$ cd /etc/ssl/CA

さて、ここで問題が。次に必要なファイルを作る再に以下のように
# cat /dev/null > index.txt
リダイレクトを使いたいのですが、sudo で操作するUbuntuではリダイレクト後のコマンドはユーザー権限なためファイルに書き込めません。
調べてみると、Lism.in * blogsudoでリダイレクトしてファイルを書き換えるとかに情報がありました。
cat /dev/null | sudo tee index.txt
sudo sh -c "cat /dev/null > index.txt"
って感じに、パイプとteeを使うか、コマンド全体を sudo にしてしまえばいいそうです。なるほど。

$ cat /dev/null | sudo tee index.txt
$ echo '01' | sudo tee serial
$ echo '01' | sudo tee crlnumber
$ sudo mkdir private
$ sudo chmod 700 private
$ sudo mkdir newcerts
$ sudo mkdir crl
$ sudo mkdir certs


秘密鍵の作成
$ sudo openssl genrsa -out private/cakey.pem 1024

秘密鍵を使ってオレオレうそっぱち認証局を作成 有効期限を10年にする
$ sudo openssl req -new -x509 -days 3560 -key private/cakey.pem -out cacert.pem
質問には、設定ファイルのデフォルトと同じ内容を記入(っていうか記入しなくてもデフォルトのままでよいはず)

サーバ証明書と署名リクエスト(CSR)を作成する準備をします。
$ sudo mkdir /etc/ssl/Server
$ cd /etc/ssl/Server

秘密鍵の作成
$ sudo openssl genrsa -out private.pem 1024

認証局に署名してもらう為リクエストを作成する
$ sudo openssl req -new -key private.pem -out request.pem
質問には、設定ファイルのデフォルトと同じ内容を記入(デフォルトでよいはず)
最後の2つの質問も、リターンで良い

CAで署名する
$ sudo cp /etc/ssl/openssl.cnf ./.
$ sudo openssl ca -config openssl.cnf -policy policy_anything -out ./cert-ca.pem -infiles request.pem
2つの質問は y で良い

サーバ証明書だけ抜き取る
$ sudo openssl x509 -in cert-ca.pem -out cert.pem


作成した鍵の確認
$ cd /etc/ssl/Server
$ openssl verify -CAfile /etc/ssl/CA/cacert.pem cert-ca.pem
cert-ca.pem: OK
$ openssl verify -CAfile /etc/ssl/CA/cacert.pem cert.pem
cert.pem: OK


クライアント用証明書の作成
設定ファイルの修正
$ sudo vim /etc/ssl/openssl.cnf

[ usr_cert ]

# This is OK for an SSL server.
# nsCertType = server (コメントを付けて元に戻す)

# For normal client use this is typical
# nsCertType = client, email
nsCertType = client, email ← コメントアウトを外す


$ sudo mkdir /etc/ssl/Users
$ cd /etc/ssl/Users

秘密鍵の作成
$ sudo openssl genrsa -out private.pem 1024

署名リクエスト作成
$ sudo openssl req -new -key private.pem -out request.pem
質問には、ユーザーの内容を答える
最後の2つの質問は、リターンで良い

CAで署名する
$ sudo cp /etc/ssl/openssl.cnf ./.
$ sudo openssl ca -config openssl.cnf -out cert.pem -infiles request.pem
2つの質問は y で良い

秘密鍵と証明書をまとめて、pkcs#12形式にする
$ sudo openssl pkcs12 -export -in cert.pem -inkey private.pem -certfile /etc/ssl/CA/cacert.pem -out pom.p12
Enter Export Password: 組み込み時のパスワードを設定する(ユーザー名とパスワードを、証明書組み込み時に聞かれるので忘れないように。)
Verifying - Enter Export Password: 確認

各ファイルにアクセス権を設定する
$ cd /etc/ssl/Server/
$ sudo chmod 600 ./*
$ chmod 644 cert.pem

$ cd /etc/ssl/Users/
$ sudo chmod 600 ./*

Apache2をインストールします。
Apacheの設定は何度もやっているので楽勝だろうと思っていたら大間違いでした。Debian系独特の操作方法に悩まされることに・・・。
えせSEの1日1HackUbuntuでApacheのsslを有効にする方法を参考にしました。

RedHat系ユーザーのハマり所としては、モジュールやサイトの設定は apache2.conf(httpd.conf)には書かない点でしょうか。Apache2になってからは、設定ごとに~.confファイルに記入しますが、Debianはもっと管理が細かいです。
設定ファイルは、mods-available や sites-availavle に置いておき、a2enmod や a2ensite コマンドで有効にすることによって、ファイルが mods-enabled や sites-enabled にリンクされて読み込まれる、という仕組みです。
コマンド一発でサイトの有効無効を設定できるのですが、慣れない身にはつらいものがあります。

Apache2のインストール
$ sudo apt-get install apache2 apache2-doc

デフォルトではSSLを使えるようにはなっていません。自分で設定するのか・・・。
SSL設定ファイルのコピー
$ sudo cp /usr/share/doc/apache2.2-common/examples/apache2/extra/httpd-ssl.conf.gz /etc/apache2/sites-available/
$ cd /etc/apache2/sites-available/
$ sudo gunzip httpd-ssl.conf.gz

SSL設定ファイルの修正
デフォルトでバーチャルホストの設定になっているので、そのまま使う
$ cd /etc/apache2/sites-available/
$ sudo vim httpd-ssl.conf

#Listen 443  ←コメントする(別の設定ファイルに既に記入済みのため)

<VirtualHost _default_:443> 

NameVirtualHost *:443
<VirtualHost *:443>
に修正

SSLCertificateFile "/etc/ssl/Server/cert.pem"     ← サーバ証明書の位置に変更

SSLCertificateKeyFile "/etc/ssl/Server/private.pem"   ← サーバ秘密鍵の位置に変更


ssl用のモジュールを有効にする。
$ sudo a2enmod ssl
再読み込みさせる。
$ sudo /etc/init.d/apache2 force-reload

サイト設定を有効にする
$ sudo a2ensite httpd-ssl.conf
$ sudo /etc/init.d/apache2 reload

ちなみにサイト設定を無効にする場合は
$ sudo a2dissite httpd-ssl.conf


WebDAVの設定
2バイト文字対応のため、mod-encoding をインストール
$ sudo apt-get install libapache2-mod-encoding

mod-encoding の設定
$ cd /etc/apache2/mods-available/
$ sudo vim encoding.conf ←新規ファイルを作成する
以下を記述
<IfModule mod_encoding.c>
    EncodingEngine    on
    NormalizeUsername on
    SetServerEncoding     UTF-8
    DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
    AddClientEncoding "cadaver/" EUC-JP
</IfModule>


モジュールの有効化
$ sudo a2enmod dav
$ sudo a2enmod dav_fs ←既に有効っぽい
$ sudo a2enmod encoding

WebDAV用ディレクトリの作成
$ sudo mkdir /var/www-ssl
$ sudo mkdir /var/www-ssl/dav

WebDAV用ディレクトリに書き込めるようにapacheユーザー権限に変更する。
ちなみにユーザー名は /etc/apache2/envvars に書かれている
$ sudo chown -R www-data:www-data /var/www-ssl/dav
$ sudo chmod 755 /var/www-ssl/dav


SSL設定ファイルをWebDAV用に修正する
$ cd /etc/apache2/sites-available/
$ sudo vim httpd-ssl.conf

#DocumentRoot "/usr/share/apache2/default-site/htdocs"
DocumentRoot "/var/www-ssl" ←修正


</VirtualHost>の前ぐらいに以下を追加
ちなみに、クライアント認証設定です。

<Location /dav>
    Dav on
    SSLVerifyClient require
    SSLVerifyDepth 1
</Location>

再起動
$ sudo /etc/init.d/apache2 restart


以上で、WebDAV(クライアント認証版)の構築が終わりました。
クライアント側には、クライアント証明書 /etc/ssl/Users/pom.p12 を組み込む必要があります。

Windows標準のWebDAVクライアントは安定性に欠けるし大きなファイルを送れないので、フリーでクライアント認証可能なWebDAVクライアントを探したのですが、あまり無いですね。
TeamFileクライアントは高機能な上にクライアント認証対応なので、これで運用することにしました。
TeamFileクライアントのクライアント認証はWindowsのクライアント認証とは別なので、Excelなどを直接編集する時にWindows用の認証が必要になってしまいます。だから、ダウンロードしてから編集する設定にするのがいいのかな。

|

« Ubuntuサーバー版をインストールする。 | トップページ | Ubuntuサーバー版でFTPS環境を構築する »

Apache」カテゴリの記事

Ubuntu」カテゴリの記事

WebDAV」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/54336/42837853

この記事へのトラックバック一覧です: Ubuntuサーバー版でWebDAV環境を構築する:

« Ubuntuサーバー版をインストールする。 | トップページ | Ubuntuサーバー版でFTPS環境を構築する »