レンタルサーバ + Webシステム開発 = E-business

■レンタルサーバご利用参考資料
サーバご利用の参考にJF Project によるJF (Japanese FAQ)を掲載しています。

Linux JF(Japanese FAQ)Project.
JF は, Linux に関する解説文書・FAQ などを作成・収集・配布するプロジェクトです.

グリーンネット・トップページへ戻る


一覧に戻る
Apache based WebDAV Server with LDAP and SSL

Saqib Ali

 saqib@seagate.com
         

yomoyomo - 日本語訳

ymgrtq@ma.neweb.ne.jp

Revision History                                                       
Revision v4.1.0             2003-09-02        Revised by: sa           
読者からのフィードバックに基づいて SSL のセクションを更新              
Revision v4.0.2             2003-08-01        Revised by: sa           
Apache の設定とコマンドラインのマイナーアップデート。 SSL のセクション 
に /dev/random 関連の記述を追加。                                      
Revision v4.0.1             2003-07-27        Revised by: sa           
SSL のセクションに情報を追加。                                         
Revision v4.0               2003-06-29        Revised by: sa           
Apache 2.0 にあわせて HOWTO を更新。同時にソースを XML 化。            

  本文書は、認証に LDAP を利用し、SSL で暗号化を行う、Apache ベースの
WebDAV サーバのインストールを扱う HOWTO です。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

Table of Contents
1. はじめに
   
    1.1. この文書について
    1.2. 本文書への貢献
    1.3. Apache って何?
    1.4. WebDAV って何?
    1.5. PHP って何?
    1.6. MySQL って何?
    1.7. 何が必要ですか?
    1.8. 作業の前に
   
2. 必要条件
   
    2.1. 基本
    2.2. Apache 2.0.46
    2.3. OpenSSL
    2.4. iPlanet LDAP ライブラリ
    2.5. mod_auth_ldap
    2.6. MySQL DB エンジン
    2.7. PHP
   
3. インストール
   
    3.1. 前もって必要なもの
    3.2. MySQL
    3.3. Apache 2.0
    3.4. mod_auth_ldap
    3.5. CERT DB for LDAPS://
    3.6. PHP
   
4. WebDAV サービスの設定と起動
   
    4.1. /usr/local/apache/conf/httpd.conf の修正
    4.2. DAVLockDB 用のディレクトリの作成
    4.3. DAV を有効にする
    4.4. DAVtest ディレクトリの作成
    4.5. Apache の再起動
    4.6. WebDAV サーバがプロトコルに準拠しているか試験する
   
5. WebDAV サーバ管理
   
    5.1. DAV 共有機能へのアクセスを制限する
    5.2. DAV 共有機能への書きこみアクセスを制限する
   
6. SSL を使用した WebDAV トラフィックの保護
   
    6.1. SSL 入門
    6.2. テスト用証明書
    6.3. 実運用に使う証明書
    6.4. CSR の作成方法
    6.5. サーバ秘密鍵とサーバ証明書のインストール
    6.6. RSA 秘密鍵のパスフレーズを解除
    6.7. 信頼できる認証局
   
7. 日本語訳について
PKI 用語辞典

1. はじめに

 本文書の目標は、認証に LDAP を利用する Apache + MySQL + PHP + WebDAV
ベースのウェブアプリケーションサーバを構築することです。この文書は、
LDAP トランザクションの暗号化に関する詳細な解説も行います。

    注記:: もし Apache やその他のモジュールのインストールで何か問題に遭
    遇したら、遠慮なく私  に連絡してください。
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

1.1. この文書について

 本文書は、元々は2001年に書かれたものです。それからたくさんの更新や新規
の追加が施されてきています。更新や訂正を提供してくれたすべての人達に感
謝します。

 本文書の XML ソースは、 http://www.xml-dev.com:8080/cocoon/mount/
docbook/Apache-WebDAV-LDAP-HOWTO.xml にて入手できます。

 本文書の最新版は、 http://www.xml-dev.com:8080/cocoon/mount/docbook/
Apache-WebDAV-LDAP-HOWTO.html にて入手できます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

1.2. 本文書への貢献

 もし本 HOWTO に貢献したいなら、 http://www.xml-dev.com:8080/cocoon/
mount/docbook/Apache-WebDAV-LDAP-HOWTO.xml からその XML ソースをダウン
ロードし、著者リストと改訂履歴にあなたの名前を加え、更新されたソースを
saqib@seagate.com に送ることができます:) そうすれば、何か更新や訂正があ
るときに、私がその人に連絡が取りやすくなります。よろしくお願いします。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

1.3. Apache って何?

 Apache HTTP サーバは、UNIX や Windows NT を含む最新のオペレーティング
システム向けのオープンソースの HTTP サーバです。Apache は、現行の HTTP
標準に適合する HTTP サービスを提供します。

 Apache ウェブサーバは、 http://httpd.apache.org/ から自由にダウンロー
ドできます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

1.4. WebDAV って何?

 WebDAV とは、ウェブを使った分散オーサリングとバージョン管理 (Web
enabled Distributed Authoring and Versioning)を意味しています。 WebDAV
は、ユーザがウェブサーバにあるファイルの編集/管理を行う共同作業環境を提
供します。技術的には、DAV は HTTP プロトコルの拡張です。

 以下に、DAV により提供される拡張を簡単に書きます。

 上書き保護: 「更新消失問題」を防ぐ、ロックとロック解除のメカニズム。
DAV プロトコルは、共有ロックと排他的ロックの両方をサポートしています。

 プロパティ: メタデータ(タイトル、サブジェクト、作成者など)

 名前空間の管理: ファイルの複製、名称変更、移動、そして削除

 アクセス制御: 様々なリソースへのアクセスの制限。現在 DAV では、アクセ
ス制御が既に適切に行われているものと想定しており、自身は強力な認証機構
を提供していません。

 バージョン管理: ドキュメントのリビジョン管理。バージョン管理はまだ実装
されていません。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

1.5. PHP って何?

 PHP ("PHP: ハイパーテキスト・プリプロセッサ" の再帰頭字語) は、ウェブ
開発に特に適しており、HTML に組み込み可能な、広く利用されているオープン
ソースの汎用スクリプト言語です。

 PHP は、http://www.php.net から入手できます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

1.6. MySQL って何?

 最も人気のあるオープンソースの SQL データベースである MySQL は、 MySQL
AB によって開発、配布、サポートされています。

 MySQL DB エンジンは、 http://www.mysql.com/ からダウンロードできます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

1.7. 何が必要ですか?

  目的を実現するのに必要なツールに以下のものがあります。

 i. GCC などの C コンパイラ
   
ii. Apache 2 ウェブサーバ
   
iii. Apache 用 LDAP モジュール
   
iv. iPlanet LDAP ライブラリ・ファイル
   
 v. SSL エンジン
   
vi. PHP
   
vii. MySQL DB エンジン
   
    注記:: これらのパッケージは全てフリーであり、ネットからダウンロード
    可能です。
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

1.8. 作業の前に

 本文書では、以下のものが既にシステムにインストール済みであることを前提
にしています。

 i.  gzip か gunzip - http://www.gnu.org から入手可能
   
ii.  gcc と GNU make - http://www.gnu.org から入手可能
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

2. 必要条件

 いくつかのパッケージをダウンロードし、コンパイルしなければなりません。
本文書では、そのコンパイル手順を解説しますが、ソースコードからのインス
トール作業に慣れていないと厳しいでしょう。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

2.1. 基本

 Solaris / Linux と GNU CC コンパイラの動いているマシンが必要になります
。 GNU gunzip と GNU tar も必要です。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

2.2. Apache 2.0.46

 Apache は HTTP サーバで、WebDAV アプリケーションサーバを動作させるのに
利用します。 http://www.apache.org/dist/httpd/ から Apache 2.0.46 のソ
ースコードをダウンロードしてください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

2.3. OpenSSL

 http://www.openssl.org/source/ から OpenSSL をダウンロードする必要があ
ります。最新版をダウンロードしてください。OpenSSL をインストールし、
Apache に mod_ssl を組みこみ、ウェブサーバ上で SSL 証明書を管理するのに
SSL ライブラリを利用します。gzip された OpenSSL のソースコードを /tmp/
downloads にダウンロードしてください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

2.4. iPlanet LDAP ライブラリ

  from http://wwws.sun.com/software/download/products/3ec28dbd.html か
ら iPlanet LDAP SDK をダウンロードしてください。iPlanet LDAP SDK を使用
するのは、それが ldaps:// (LDAP over SSL) を行うのに使うライブラリを含
んでいるからです。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

2.5. mod_auth_ldap

 Apache に LDAP サポートを組み込むのに mod_auth_ldap を利用します。 
http://www.muquit.com/muquit/software/mod_auth_ldap/
mod_auth_ldap_apache2.html から mod_auth_ldap をダウンロードしてくださ
い。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

2.6. MySQL DB エンジン

 http://www.mysql.com/downloads/index.html から、ご利用のプラットフォー
ムに合う MySQL ビルドをダウンロードしてください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

2.7. PHP

 http://www.php.net/downloads.php から PHP のソースコードをダウンロード
してください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3. インストール

 まず最初に前もって必要な処理を二三行い、その後でメインのインストールに
入ります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.1. 前もって必要なもの

 我々がインストールしようとしているアプリケーションサーバには、 SSL の
ライブラリと LDAP のライブラリが必要です。Apache 2.x 用に SSL 証明書を
運用するのに SSL エンジンも必要になります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.1.1. iPlanet LDAP SDK

 su コマンドを使用して root になってください。

$ su -                                                                 

 /usr/local/iplanet-ldap-sdk.5 ディレクトリを作成してください。 /tmp/
downloads から /usr/local/iplanet-ldap-sdk.5 ディレクトリに
ldapcsdk5.08-Linux2.2_x86_glibc_PTH_OPT.OBJ.tar.gz をコピーしてください
。

# mkdir /usr/local/iplanet-ldap-sdk.5                                                             
# cp /tmp/downloads/ldapcsdk5.08-Linux2.2_x86_glibc_PTH_OPT.OBJ.tar /usr/local/iplanet-ldap-sdk.5 
# cd /usr/local/iplanet-ldap-sdk.5                                                                
# tar -xvf ldapcsdk5.08-Linux2.2_x86_glibc_PTH_OPT.OBJ.tar                                        

 これで正しいディレクトリに、必要な iPlanet LDAP ライブラリファイルがす
べて入ったはずです。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.1.2. OpenSSL エンジン

 次に OpenSSL エンジンをインストールする必要があります。

 OpenSSL は、SSL/TLS プロトコルのオープンソース実装です。ウェブサーバ上
で SSL 証明書を作成、管理するのに、OpenSSL が必要となります。Apache 用
の SSL モジュールで使うライブラリのためにも、 OpenSSL をインストールす
る必要があります。

 OpenSSL のソースコードファイルがあるディレクトリに移動してください。

 # cd /tmp/download                                                    
# gzip -d openssl.x.x.tar.gz                                           
# tar -xvf openssl.x.x.tar                                             
# cd openssl.x.x                                                       
# make                                                                 
# make test                                                            
# make install                                                         

 make install が成功して完了すれば、 /usr/local/ssl に OpenSSL のバイナ
リができているはずです。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.2. MySQL

 MySQL のインストールは実に簡単です。ダウンロードしたバイナリを適当なデ
ィレクトリに置くだけです。

 まず MySQL デーモン用のユーザとグループを作成し、ファイルを適当なディ
レクトリにコピーします。

 # groupadd mysql                                                      
# useradd -g mysql mysql                                               
# cd /usr/local                                                        
# gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -                
# ln -s full-path-to-mysql-VERSION-OS mysql                            

 次に install_db スクリプトを走らせ、ファイルのパーミッションを変更して
ください。

 # cd mysql                                                            
# scripts/mysql_install_db                                             
# chown -R mysql .                                                     

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.2.1. mySQL の起動

 それでは MySQL を起動し、インストールが正しく行われているか確かめてく
ださい。

 # bin/mysqld_safe --user=mysql &                                      

 ps -ef コマンドを使い、MySQL デーモンが稼動していることを確かめてくだ
さい。以下の出力を目にするはずです。

# ps -ef | grep mysql                                                                                                                                                                                                                           
root      3237     1  0 May29 ?        00:00:00 /bin/sh bin/safe_mysqld                                                                                                                                                                         
mysql     3256  3237  0 May29 ?        00:06:58 /usr/local/mysql/bin/mysqld --defaults-extra-file=/usr/local/mysql/data/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --pid-file=/usr/local/mysql/data/downloa 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.2.2. MySQL の停止

 MySQL サーバを止めるには、以下の手順に従ってください。

# cd /usr/local/mysql                                                  
# ./bin/mysqladmin -u root -p shutdown                                 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.2.3. データディレクトリの指定

 MySQL デーモンは、全情報を「データディレクトリ」と呼ばれるディレクトリ
の中に格納します。上記のインストール手順に従った場合、データディレクト
リは /use/local/mysql/data になるはずです。

 データディレクトリの位置を指定するには、mysqladmin ユーティリティを以
下に示すように使用します。

# /usr/local/mysql/bin/mysqladmin variables -u root --password={your_password} | grep datadir 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.3. Apache 2.0

 はじめにコンパイル用にいくつかフラグを設定してください。

# export LDFLAGS="-L/usr/local/iplanet-ldap-sdk.5/lib/ -R/usr/local/iplanet-ldap-sdk.5/lib/:/usr/local/lib" 
# export CPPFLAGS="-I/usr/local/iplanet-ldap-sdk.5/include"                                                 

 次に Apache 2.0 のソースファイルを展開し、configure スクリプトを実行し
てください。

# cd /tmp/download                                                                 
# gzip -d httpd-2.0.46.tar.gz                                                      
# tar -xvf httpd-2.0.46.tar                                                        
# cd httpd-2.0.46                                                                  
#./configure --enable-so  --with-ssl --enable-ssl  --enable-rewrite   --enable-dav 

 次に make コマンドを走らせます。

# make                                                                 
# make install                                                         

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.3.1. Apache の起動

# /usr/local/apache2/bin/apachectl start                               

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.3.2. Apache の停止

# /usr/local/apache2/bin/apachectl stop                                

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.4. mod_auth_ldap

 modauthldap_apache2.tar.gz を展開してください。

cd /tmp/download                                                       
# gzip -d modauthldap_apache2.tar.gz                                   
# tar -xvf modauthldap_apache2.tar                                     
# cd modauthldap_apache2                                               

 今度は mod_auth_ldap を設定し、インストールしてください。

# ./configure --with-apxs=/usr/local/apache2/bin/apxs  --with-ldap-dir=/usr/local/iplanet-ldap-sdk.5/ 
# make                                                                                                
# make install                                                                                        

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.5. CERT DB for LDAPS://

 cert7.db と key7.db をそれぞれ、 http://www.xml-dev.com/xml/key3.db と
http://www.xml-dev.com/xml/cert7.db から取得し、/usr/local/apache2/
sslcert/ ディレクトリに置く必要もあります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.6. PHP

 PHP のソースファイルを展開してください。

gzip -d php-xxx.tar.gz                                                 
tar -xvf php-xxx.tar                                                   

 configure を行い、make コマンドを走らせてください。

cd php-xxx                                                             
./configure --with-mysql --with-apxs=/usr/local/apache2/bin/apxs       

 ソースコードをコンパイルしてください。

# make                                                                 
# make install                                                         

 php.ini ファイルを適当なディレクトリにコピーしてください。

cp php.ini-dist /usr/local/lib/php.ini                                 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4. WebDAV サービスの設定と起動

 ここは易しいところです。このセクションで、我々は Apache のルート配下に
あるディレクトリで WebDAV を有効にします。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.1. /usr/local/apache/conf/httpd.conf の修正

  /usr/local/apache/conf/httpd.conf に、以下の Apache ディレクティブが
あることを確かめてください。

  Addmodule mod_dav.c                                                  

 もしなければ追加してください。このディレクティブは、Apache に DAV の機
能を知らせるものです。このディレクティブは、あらゆるコンテナの外側に置
かれなくてはなりません。

  次に、Apache が DAVLockDB ファイルを格納するよう指定しなくてはなりま
せん。 DAVLockDB は、WebDAV のロック・データベースです。このディレクト
リは、 httpd プロセスにより書きこみ可能であるべきです。

  私は DAVLock ファイルを /usr/local/apache/var の下に格納しています。
このディレクトリは他の用途にも利用しています。あなたの /usr/local/
apache/conf/httpd.conf に以下の一行を追加し、DAVLockDB ファイルが /usr/
local/apache/var の下にあることを指定してください。

  DAVLockDB      /usr/local/apache/var/DAVLock                         

 このディレクティブは、あらゆるコンテナの外側に置かれなくてはなりません
。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.2. DAVLockDB 用のディレクトリの作成

 上記の通り、ウェブサーバのプロセスにより書きこみ可能なディレクトリを、
DAVLockDB 用に作成しなくてはなりません。通常ウェブサーバのプロセスは、
'nobody'ユーザ権限で動作します。以下のコマンドを使い、このことを確かめ
てください。

ps -ef | grep httpd                                                    

/usr/local/apache 配下にディレクトリを作成し、以下のコマンドによりパー
ミッションを設定してください。

  # cd /usr/local/apache                                               
  # mkdir var                                                          
  # chmod -R 755 var/                                                  
  # chown -R nobody var/                                               
  # chgrp -R nobody var/                                               

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.3. DAV を有効にする

 DAV を有効にするのは、ちょっとした操作で済みます。Apache ルート配下の
ディレクトリで DAV を有効にするには、その特定ディレクトリの設定を行うコ
ンテナに、以下のディレクティブを追加してください。

  DAV On                                                               

 このディレクティブは、指定したディレクトリとそのサブディレクトリに対し
て DAV を有効にします。

 以下に /usr/local/apache/htdocs/DAVtest 上で WebDAV と LDAP 認証を有効
にするサンプル設定を示します。これを /usr/local/apache/conf/httpd.conf
ファイルの中に入れてください。

 DavLockDB /tmp/DavLock                                                
                        
Options Indexes FollowSymLinks                                         
AllowOverride None                                                     
order allow,deny                                                       
allow from all                                                         
AuthName "SMA Development server"                                      
AuthType Basic                                                         
LDAP_Debug On                                                          
#LDAP_Protocol_Version 3                                               
#LDAP_Deref NEVER                                                      
#LDAP_StartTLS On                                                      
LDAP_Server you.ldap.server.com                                        
#LDAP_Port 389                                                         
# If SSL is on, must specify the LDAP SSL port, usually 636            
LDAP_Port 636                                                          
LDAP_CertDbDir /usr/local/apache2/sslcert                              
Base_DN "o=SDS"                                                        
UID_Attr uid                                                           
DAV On                                                                 
#require valid-user                                                    
require valid-user                                                     
#require roomnumber "123 Center Building"                              
#require filter "(&(telephonenumber=1234)(roomnumber=123))"            
#require group cn=rcs,ou=Groups                                        
                                                           

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.4. DAVtest ディレクトリの作成

 前のセクションで述べたように、全 DAV ディレクトリが、ウェブサーバのプ
ロセスにより書きこみ可能でなくてはなりません。この例では、ウェブサーバ
が'nobody'というユーザ名で動作していると仮定します。普通はこうなってい
ます。httpd がどのユーザ権限で動作しているか調べるには、以下のコマンド
を使ってください。

# ps -ef | grep httpd                                                  

 /usr/local/apache/htdocs 配下に 'DAVetst' という名前のテスト用ディレク
トリを作成してください。

# mkdir /usr/local/apache/htdocs/DAVtest

 ディレクトリ上で httpd プロセスによる書きこみが可能になるように、パー
ミッションを変更してください。httpd が 'nobody' ユーザ権限で動作してい
るなら、以下のコマンドを使用してください。

  # cd /usr/local/apache/htdocs                                        
  # chmod -R 755 DAVtest/                                              
  # chown -R nobody DAVtest/                                           
  # chgrp -R nobody DAVtest/                                           

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.5. Apache の再起動

 最後に、Apache に同梱されている設定試験ルーチンを走らせて、 httpd.conf
の構文を検査しなければなりません。

# /usr/local/apache/bin/apachectl configtest                           

  エラーメッセージが出たら、上記手順をすべて正しく行ったか確認してくだ
さい。もしエラーメッセージを理解できなければ、気軽に私にエラーメッセー
ジを電子メール (saqib@seagate.com ) で送って
ください。

 設定試験が成功するなら、Apache ウェブサーバを起動してください。

# /usr/local/apache/bin/apachectl restart

 これであなたは、LDAP 認証と SSL 暗号化を備え、 WebDAV が有効となった
Apache サーバを手にしたことになります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.6. WebDAV サーバがプロトコルに準拠しているか試験する

 我々がインストールした WebDAV 機能が、WebDAV バージョン 2 プロトコルを
完全に準拠しているかどうかは非常に重要です。もし完全に互換でないと、ク
ライアント側の WebDAV アプリケーションが適切に機能しません。

 プロトコルに準拠しているか試験するには、Litmus というツールを使います
。 Litmus は WebDAV サーバプロトコル準拠を試験するテストスイートで、サ
ーバが RFC2518 に規定される WebDAV プロトコルに準拠しているかどうかを試
験することを目的としています。

 http://www.webdav.org/neon/litmus/ から Litmus のソースコードをダウン
ロードし、それを /tmp/downloads ディレクトリに置いてください。

 それから gzip と tar を使い、ファイルを展開します。

# cd /tmp/downloads                                                    
# gzip -d litmus-0.6.x.tar.gz                                          
# tar -xvf litmus-0.6.x.tar                                            
# cd litmus-0.6.x                                                      

 Litmus のコンパイルとインストールは簡単です。

# ./configure                                                          
# make                                                                 
# make install                                                         

 make install で Litmus のバイナリファイルを /usr/local/bin の下に、ま
たそのヘルプファイルを /usr/local/man の下にインストールします。

 インストールしてある WebDAV サーバがプロトコルに準拠していることを試験
するには、以下のコマンドを用いてください。

# /usr/local/bin/litmus http://you.dav.server/DAVtest userid passwd    

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5. WebDAV サーバ管理

 このセクションでは、例えばアクセス制御のための LDAP 設定や、 Apache 上
での DAV メソッドの設定などの、いろいろな管理タスクについて説明します。

 DAV に関する設定変更の大部分は、httpd.conf ファイル上で行われます。こ
のファイルは、 /usr/local/apache/conf/httpd.conf にあります。

 httpd.conf は、Apache が利用するテキストベースの設定ファイルです。どん
なテキストエディタでも編集できます - 私は vi が好みです。変更を行う前に
、このファイルのバックアップ・コピーを取っておいてください。

 httpd.conf に変更を加えたら、 /usr/local/apache/bin/apachectl restart
コマンドで Apache サーバを再起動しなくてはなりません。しかし、再起動す
る前に /usr/local/apache/bin/apachectl configtest コマンドで httpd.conf
に設定が正しく行われているかテストしてください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5.1. DAV 共有機能へのアクセスを制限する

 前のセクションで DAVtest 共有ディレクトリを作成した際に、認証のために
LDAP を使いました。しかしこの例では、 LDAP のユーザ ID/パスワードで認証
できる人なら誰でも、そのフォルダにアクセスできることになります。

 httpd.conf ファイルに require ディレクティブを入れることで、特定のユー
ザや特定のユーザからなるグループに対するアクセスを制限できます。

 前のセクションの DAVtest に関する設定をもう一度見てみましょう。

                                 
  Dav On                                                                     
  #Options Indexes FollowSymLinks                                            
                                                                             
  AllowOverride None                                                         
  order allow,deny                                                           
  allow from all                                                             
  AuthName "LDAP_userid_password_required"                                   
  AuthType Basic                                                             
   
  Require valid-user                                                         
                                                                     
  LDAP_Server ldap.server.com                                                
  LDAP_Port 389                                                              
  Base_DN "o=ROOT"                                                           
                                                                             
  UID_Attr uid                                                               
                                                                 

require ディレクティブを valid-user にセットすれば、どの認証されたユー
ザでもこのフォルダにアクセスできます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5.1.1. ユーザの UID でアクセスを制限する

 LDAP の UID を使って、DAV 用フォルダへのアクセスを制限できます。

 require valid-user ディレクティブを、 require user 334455 445566 に変
えます。

 こうすることで、UID が 334455 と 445566 であるユーザにアクセスを制限し
ます。それ以外の誰もこのフォルダにアクセスできなくなります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5.1.2. ユーザが属するグループでアクセスを制限する

 require ディレクティブは、ユーザが属するグループでアクセスを制限するの
にも利用できます。これは、LDAP グループか LDAP フィルタのいずれかを利用
することで可能になります。フィルタを利用するなら、 LDAP のフィルタ構文
に適合していないといけません。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5.2. DAV 共有機能への書きこみアクセスを制限する

 誰もが DAV の共有リソースを閲覧可能であっても、DAV の共有リソースの編
集機能を特定ユーザに限定する必要があるかもしれません。これは httpd.conf
ファイルに  タグを入れることで簡単に実現できます。

                                 
  Dav On                                                                     
  #Options Indexes FollowSymLinks                                            
                                                                             
  AllowOverride None                                                         
  order allow,deny                                                           
  allow from all                                                             
  AuthName "LDAP_userid_password_required"                                   
  AuthType Basic                                                             
   
  Require valid-user                                                         
                                                                     
  LDAP_Server ldap.server.com                                                
  LDAP_Port 389                                                              
  Base_DN "o=ROOT"                                                           
                                                                             
  UID_Attr uid                                                               
                                                                 

  を以下のように変えることで、特定ユーザに書きこみアクセスを制限
します。

          
  Require 334455                                                       
                                                               

 要するに、PUT POST DELETE PROPPATH MKCOL COPY MOVE LOCK そして UNLOCK
機能は、UID が 334455 であるユーザだけが行えます。他の人は皆、リソース
に GET や PROPFIND メソッドを適用できますが、その他のどのメソッドも適用
できません。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6. SSL を使用した WebDAV トラフィックの保護

  ファイルサーバに格納されたデータのセキュリティが、昨今大変重要になっ
ています。データが不正に改変された場合、企業は数千ドルを失う可能性もあ
ります。この前のセクションにおいて、我々は認証機構を提供するために、
Apache をビルドする際に LDAP 認証モジュールを組みこみました。しかし、
HTTP トラフィックは非常に安全性が低く、データはすべて平文で転送されます
- つまり、LDAP 認証を行うユーザ ID やパスワードも同様に平文で転送されて
しまうのです。これが問題を引き起こします。誰もがユーザ ID/パスワードを
覗き見て、 DAV 格納所へのアクセス権を取得できます。これを防ぐには、基本
的には HTTP + SSL もしくは HTTPS により HTTP トラフィックを暗号化しなく
てはなりません。HTTPS 上で転送されるものはすべて暗号化されますので、
LDAP のユーザ ID/パスワードは簡単には復号化できません。 HTTPS は443番ポ
ート上で動作します。この前のセクションにおいてコンパイルをした結果、
Apache はポート80番(通常の HTTP)と443番 (HTTPS)の両方をリッスンするよう
になっています。もしあなたがこのサーバを DAV のためだけに使うつもりなら
ば、その場合ポート80番を閉じることを強くお勧めします。このセクションで
は、 SSL に関する情報と、Apache HTTP サーバ上で SSL を管理するための情
報を提供します。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6.1. SSL 入門

  SSL (Secure Socket Layer)は、ネットワーク層とアプリケーション層の間に
位置するプロトコル層です。名前が示す通り、SSL はあらゆる種類のトラフィ
ック--LDAP, POP, IMAP そして最も重要なのが HTTP-- を暗号化するメカニズ
ムを提供します。

  以下に SSL に含まれる層を非常に簡易化した構造を示します。

                                                                       
        +-------------------------------------------+                  
        |   LDAP   |    HTTP    |   POP   |   IMAP  |                  
        +-------------------------------------------+                  
        |                   SSL                     |                  
        +-------------------------------------------+                  
        |               Network Layer               |                  
        +-------------------------------------------+                  
                                                                       

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6.1.1. SSL で利用される暗号アルゴリズム

  SSL で利用される暗号化技術には、公開・秘密鍵、共通鍵、そしてメッセー
ジダイジェストの三種類があります。

  公開・秘密鍵暗号方式 - SSL コネクションの開始: このアルゴリズムの場合
、暗号化と復号化は一組の公開鍵と秘密鍵を利用して実行されます。ウェブサ
ーバは秘密鍵を保持し、公開鍵を認証書の中に入れてクライアントに送ります
。

 1.  クライアントが、HTTPS を使いウェブサーバにコンテンツを要求する。
   
 2.  ウェブサーバは、サーバの公開鍵を含むデジタル証明書を付けて応答する
    。
   
 3.  クライアントは、証明書の期限が切れていないか調べる。
   
 4.  それからクライアントは、証明書を署名した認証局が、ブラウザの信頼で
    きる認証局のリストの中にあるか調べる。これが、我々が信頼できる CA
    から証明書を得る必要がある理由です。
   
 5.  その後でクライアントは、ウェブサーバの Fully Qualified Domain Name
    (FQDN) が、証明書にある Common Name (CN) と一致するか調べる。
   
 6.  すべて条件を満たせば、SSL コネクションが開始される。
   
    注記:: 秘密鍵で暗号化されたものは、公開鍵を使ってしか復号化できませ
    ん。同様に、公開鍵で暗号化されたものは、秘密鍵を使ってしか復号化で
    きません。公開鍵だけが暗号化に使われ、秘密鍵は復号化に使われるとい
    うありがちな誤解があります。これは正しくありません。いずれの鍵も暗
    号化、復号化に使えます。しかし、片方の鍵で暗号化されれば、その場合
    はもう片方の鍵で復号化しないといけません。例えば、公開鍵を用いて暗
    号化したメッセージを公開鍵で復号化はできません。
   
     秘密鍵を暗号化に使い、公開鍵を復号化に使うことで、受信側に対し、送
    信側の完全性を保証します。公開鍵を暗号化に使い、秘密鍵を復号化に使
    うことで、意図する受信側(秘密鍵の所有者) だけがデータにアクセスする
    ことを保証します。 (つまり、秘密鍵を保持する人だけが、メッセージを
    復号化できます)
   
  対称鍵暗号方式 - 実際に転送するデータの暗号化を行う : SSL コネクショ
ンの確立後、CPU に対する負荷が公開・秘密鍵暗号方式より軽いので、データ
の暗号化には対称鍵暗号方式が利用されます。対称鍵暗号方式では、データの
暗号化も復号化も同一の鍵で行われます。対称鍵暗号方式で利用される鍵は、
SSL セッションを始動する過程で、公開・秘密鍵暗号方式を用いて交換されま
す。

 メッセージ・ダイジェストサーバは、転送されたデータの完全性を検証するの
に HMAC, SHA, MD5 などのメッセージ・ダイジェストアルゴリズムを利用しま
す。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6.2. テスト用証明書

 Apache をコンパイルする間に、我々はテスト用証明書を作成しました。我々
はこの独自の証明書を作成するのに、mod_ssl により提供される makefile を
使用しました。我々は以下のコマンドを用いました。

# make certificate TYPE=custom                                         

 テスト目的にはこの証明書が利用できます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6.3. 実運用に使う証明書

  実運用を行うには、認証局 (Certificate Authorities。以下、CA) から証明
書を取得する必要があります。認証局は認証ベンダであり、ユーザのブラウザ
クライアントに信頼できる CA としてリストアップされています。暗号アルゴ
リズムについて解説したセクションで述べたように、もし CA が信頼できる認
証局のリストに入っていないと、ユーザは保護されているサイトに接続しよう
とした際に警告メッセージをもらうことになります。

  同様に、テスト用の認証書では、ユーザのブラウザに警告メッセージが表示
されることになります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6.4. CSR の作成方法

  CSR、証明書署名要求は、信頼できる CA に送り署名してもらう必要がありま
す。このセクションは、CSR を作成し、それを自分で選んだ CA に送る方法に
ついて説明します。以下に示すように、 # openssl req コマンドが CSR の作
成に利用できます。

# cd /usr/local/apache/conf/                                                     
# /usr/local/ssl/bin/openssl req -new -nodes -keyout private.key -out public.csr 
Generating a 1024 bit RSA private key                                            
............++++++                                                               
....++++++                                                                       
writing new private key to 'private.key'                                         
-----                                                                            
You are about to be asked to enter information that will be incorporated         
into your certificate request.                                                   
What you are about to enter is what is called a Distinguished Name or a DN.      
There are quite a few fields but you can leave some blank                        
For some fields there will be a default value,                                   
If you enter '.', the field will be left blank.                                  
-----                                                                            
Country Name (2 letter code) [AU]:US                                             
State or Province Name (full name) [Some-State]:California                       
Locality Name (eg, city) []:San Jose                                             
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Seagate               
Organizational Unit Name (eg, section) []:Global Client Server                   
Common Name (eg, YOUR name) []:xml.seagate.com                                   
Email Address []:saqib@seagate.com                                               
                                                                                 
Please enter the following 'extra' attributes                                    
to be sent with your certificate request                                         
A challenge password []:badpassword                                              
An optional company name []:                                                     
                                                                                 

    "PRNG not seeded": あなたのシステムに /dev/random がないと、 "PRNG
    not seeded" エラーメッセージが出ます。その場合、以下のコマンドを利
    用できます。
   
    # /usr/local/ssl/bin/openssl req -rand some_file.ext -new -nodes -keyout private.key -out public.csr  
   
     some_file.ext をご利用のファイルシステムにどんなファイルでも指定可
    能です。 OpenSSL が、種を生成するのにそのファイルを使用するのです。
   
  この時点で、証明書署名要求を生成するために、サーバの位置について何度
か尋ねられます。

  注記:あなたの Common Name は、dav.server.com といったウェブサーバの完
全修飾 DNS(FQDN)名になります。あなたが何か他のものを入力してしまうと、
正しく動作しません。将来必要になりますので、ここで使用するパスワードは
忘れないでください。

 このプロセスが完了すると、あなたは private.key と public.csr を取得し
ます。認証局に public.csr を提出する必要があります。この段階では、
public.key はまだ暗号化されていません。暗号化するには以下のコマンドを実
行してください。

 # mv private.key private.key.unecrpyted                                           
# /usr/local/ssl/bin/openssl rsa -in private.key.unecrpyted -des3 -out private.key 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6.5. サーバ秘密鍵とサーバ証明書のインストール

 認証局はあなたのリクエストを処理すると、エンコードされた証明書 (デジタ
ル証明書)をあなたに送り返します。デジタル証明書は、X.509バージョン3によ
り定義されるフォーマットになります。以下に、典型的なX.509バージョン3デ
ジタル証明書の構造を示します。

 ・ 証明書
   
     □ バージョン
       
     □ シリアル番号
       
     □ アルゴリズム ID
       
     □ 発行者
       
     □ 有効期間
       
     □ 
         ☆ 証明書の発行日時
           
         ☆ 証明書の有効期限
           
     □ Subject
       
     □ 被証明者の公開鍵情報
       
     □ 
         ☆ 公開鍵アルゴリズム
           
         ☆ RSA 公開鍵
           
     □ 拡張領域
       
 ・ 証明書署名アルゴリズム
   
 ・ 証明書署名
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6.5.1. デジタル証明書の検証

 X.509証明書を検証するには、以下のコマンドを使用します。

# openssl verify server.crt                                            
server.crt: OK                                                         

 server.crt は、デジタル証明書を含むファイル名です。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6.5.2. デジタル証明書の中身を見る

 デジタル証明書の中身は、以下のように # openssl x509 コマンドを使用する
ことで見ることができます。

# openssl x509 -text -in server.crt                                                                             
Certificate:                                                                                                    
    Data:                                                                                                       
        Version: 3 (0x2)                                                                                        
        Serial Number: 312312312 (0x0)                                                                          
        Signature Algorithm: md5WithRSAEncryption                                                               
        Issuer: C=US, O=GTE Corporation, CN=GTE CyberTrust Root                                                 
        Validity                                                                                                
            Not Before: Feb  8 03:25:50 2000 GMT                                                                
            Not After : Feb  8 03:25:50 2001 GMT                                                                
            Subject: C=US, ST=New York, L=Pelham, O=xml-dev, OU=web, CN=www.xml-dev.com/Email=saqib@xml-dev.com 
        Subject Public Key Info:                                                                                
            Public Key Algorithm: rsaEncryption                                                                 
            RSA Public Key: (1024 bit)                                                                          
                Modulus (1024 bit):                                                                             
                ............                                                                                    
                ............                                                                                    
                Exponent: 65537 (0x10001)                                                                       
    Signature Algorithm: md5WithRSAEncryption                                                                   
        ............                                                                                            
        ............                                                                                            
                                                                                                                
                                                                                                                

 あなたはこの証明書をサーバ上に置き、 Apache にその位置を指定する必要が
あります。

 本例では、秘密鍵は /usr/local/apache2/conf/ssl.key/ ディレクトリに置か
れ、そしてサーバ証明書は /usr/local/apache2/conf/ssl.crt/ ディレクトリ
に置かれます。

 認証局から受信したファイルを /usr/local/apache2/conf/ssl.crt/ ディレク
トリに server.crt という名前でコピーしてください。

 --> そして、先ほどの手順で生成された private.key を /usr/local/apache2
/conf/ssl.key/ ディレクトリに置いてください。

 その後で、正しい秘密鍵とサーバ証明書ファイルを指すよう /usr/local/
apache2/conf/ssl.conf を修正します。

#   Server Certificate:                                                
#   Point SSLCertificateFile at a PEM encoded certificate.  If         
#   the certificate is encrypted, then you will be prompted for a      
#   pass phrase.  Note that a kill -HUP will prompt again.  Keep       
#   in mind that if you have both an RSA and a DSA certificate you     
#   can configure both in parallel (to also allow the use of DSA       
#   ciphers, etc.)                                                     
SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt          
#SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server-dsa.crt     
                                                                       
#   Server Private Key:                                                
#   If the key is not combined with the certificate, use this          
#   directive to point at the key file.  Keep in mind that if          
#   you've both a RSA and a DSA private key you can configure          
#   both in parallel (to also allow the use of DSA ciphers, etc.)      
SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/private.key      
#SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server-dsa.key  

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6.6. RSA 秘密鍵のパスフレーズを解除

 ウェブサーバに格納される RSA 秘密鍵は、通常暗号化されており、そのファ
イルを解読するにはパスフレーズを必要とします。そのため、 mod_ssl 付きで
Apache を起動する際にパスフレーズを要求されるのです。

 

# apachectl startssl                                                   
Apache/1.3.23 mod_ssl/2.8.6 (Pass Phrase Dialog)                       
Some of your private key files are encrypted for security reasons.     
In order to read them you have to provide us with the pass phrases.    
Server your.server.dom:443 (RSA)                                       
Enter pass phrase:                                                     

 RSA 秘密鍵を暗号化するのはとても重要なことです。もし誰かがあなたの「暗
号化されていない RSA 秘密鍵」を手に入れれば、彼/彼女は容易にあなたのウ
ェブサーバを偽装できます。秘密鍵が暗号化されていれば、ハッカーはパスフ
レーズをブルートフォース攻撃で破りでもしない限り何もできません。強力な
(つまり長い) パスフレーズを使用されることをお勧めします。

 しかし、ウェブサーバを起動する度にパスフレーズを要求されるわけですから
、鍵を暗号化するのが悩ましい場合もあります。特にブート時のウェブサーバ
の起動に rc スクリプトを利用していると、パスフレーズを要求されて入力待
ちとなり、ブートプロセスが止まってしまいます。

 秘密鍵の(パスフレースによる)暗号化をやめれば、パスフレーズの要求は簡単
に止められます。ただし、誰もこの鍵を手に入れられないようにしてください
。私としては、ウェブサーバ上で秘密鍵を復号化する前に、セキュリティのガ
イドラインを厳しくし、安全化することをお勧めします。

 鍵を復号化するには、

 まず暗号化された鍵の複製を作成します。

# cp server.key server.key.cryp                                        

 その後で暗号化されている鍵を書き換えてください。元の暗号化された鍵のパ
スフレーズを要求されます。

# /usr/local/ssl/bin/openssl rsa -in server.key.cryp -out server.key   
read RSA key                                                           
Enter PEM pass phrase:                                                 
writing RSA key                                                        

  復号化された秘密鍵を安全化する一つの手法として、それを root からしか
見えなくするというのがあります。

# chmod 400 server.key                                                 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6.7. 信頼できる認証局

 以下が、いろいろなブラウザに信頼されている認証局のリストです。

 i. Baltimore 
   
ii. Entrust 
   
iii. Thawte 
   
iv. Verisign 
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

7. 日本語訳について

  日本語訳は Linux Japanese FAQ Project が行いました。翻訳に関するご意
見は JF プロジェクト  宛に連絡してください。

 

v4.1.0j

翻訳:
   
      yomoyomo 
   
校正:
   
     □   中野武雄さん 
       
     □   Seiji Kaneko さん 
       
     □   佐野武俊さん 
       
     □   松田陽一さん 
       
PKI 用語辞典

A

非対称暗号方式
   
     この暗号方式では、秘密鍵と公開鍵の鍵ペアを使用します。秘密鍵は秘匿
    し、公開鍵は広範に配布されます。
   
C

認証局(Certificate Authority (CA)) (CA)
   
     デジタル証明書の発行者。デジタル証明書を所有するエンドエンティティ
    の同一性の確認も行う。
   
証明書署名要求(Certificate Signing Request (CSR)) (CSR)
   
     証明書署名要求(CSR)は、認証局(CA)への登録に際して送信するものです
    。 CSR には、デジタル証明書を要求しているエンドエンティティの公開鍵
    が含まれます。
   
Common Name (CN) (CN)
   
     Common Name は、例えば Saqib Ali といったエンドエンティティの名前
    です。もしそのエンドエンティティがウェブサーバなら、 CN はそのウェ
    ブサーバの Fully Qualified Domain Name (FQDN) になります。
   
D

デジタル証明書
   
     エンドエンティティの公開鍵+そのエンドエンティティ (公開鍵の所有
    者)の識別情報。その所有者(エンドエンティティ) の同一性を証明します
    。発行 CA により署名されます。
   
デジタル署名
   
     デジタル署名は、秘密鍵を使用したメッセージダイジェストを署名するこ
    とにより作成されます。デジタル署名は、送信者の同一性と、そのデータ
    の完全性を保証します。
   
E

エンドエンティティ
   
     PKI に参加するエンティティ。通常はサーバ、サービス、ルータ、もしく
    は人です。CA はエンドエンティティではありません。 RA は CA に対する
    エンドエンティティです。
   
P

秘密鍵
   
     秘密鍵は非対称暗号方式で使用する鍵であり、その所有者(エンドエンテ
    ィティ)により秘匿されるものです。秘密鍵は、暗号化、復号化に使用で
    きます。
   
公開鍵
   
     公開鍵は非対称暗号方式で使用する鍵であり、広範に配布されます。公開
    鍵は、暗号化、復号化に使用できます。
   
公開鍵基盤(Public Key Infrastructure (PKI)) (PKI)
   
    公開鍵基盤
   
S

Secure Socket Layer (SSL) (SSL)
   
     Secure Socket Layer (SSL)は、認証(デジタル証明書)、機密性(暗号化)
    、そしてデータ完全性(メッセージダイジェスト - MD5、SHA など) を提供
    するセキュリティプロトコルです。
   
対称暗号方式
   
     この暗号方式では、メッセージは同一の鍵により暗号化、復号化されます
    。n 人のユーザがこの暗号方式を採用するシステムに参加したい場合、
    (((n^2-n))/2) 個の鍵が必要になります。
   
一覧に戻る
グリーンネット・トップページへ戻る

http://www.green.ne.jp/