[apache2のインストール]
Synapticを起動し、apache2をインストールした。

[apache2の設定]
複数のバーチャルホストを名前ベースでホスティング
各バーチャルホストの設定ファイルを作成する。

$ sudo vi /etc/apache2/sites-available/www1
# 以下のような設定を入力
<VirtualHost *:80>
        ServerName www1.mylabo.lan
        ServerAdmin admin@mylabo.lan
        DocumentRoot /home/www1/Documents
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /home/www1/Documents/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order deny,allow
                Deny from all
                Allow from all
        </Directory>
        ScriptAlias /cgi-bin/ /home/www1/cgi-bin/
        <Directory "/home/www1/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order deny,allow
                Deny from all
                Allow from 127.0.0.1/255.0.0.0 192.168.1.0/255.255.255.0
        </Directory>
        ErrorLog /var/log/apache2/error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
</VirtualHost>

$ sudo vi /etc/apache2/sites-available/www2
# 以下のような設定を入力
<VirtualHost *:80>
        ServerName www2.mylabo.lan
        ServerAdmin admin@mylabo.lan
        DocumentRoot /home/www2/Documents
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /home/www2/Documents/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order deny,allow
                Deny from all
                Allow from all
        </Directory>
        ScriptAlias /cgi-bin/ /home/www2/cgi-bin/
        <Directory "/home/www2/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order deny,allow
                Deny from all
                Allow from 127.0.0.1/255.0.0.0 192.168.1.0/255.255.255.0
        </Directory>
        ErrorLog /var/log/apache2/error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
</VirtualHost>

上記の2つのバーチャルホストを有効にした後、apache2に設定をリロードする。

sudo a2ensite www1
sudo a2ensite www2
sudo service apache2 reload

デフォルトのバーチャルホストを無効にするような場合は以下のようにする。

sudo a2dissite default
sudo service apache2 reload

HTTPS接続
適当なディレクトリに自己認証局で作成したサーバ証明書と秘密鍵をコピーしておく。

$ sudo mkdir /etc/apache2/certs
$ sudo cp /etc/ssl/CA/certs/www.mylabo.lan/server.crt /etc/apache2/certs/
$ sudo cp /etc/ssl/CA/certs/www.mylabo.lan/newkey.pem /etc/apache2/certs/privkey.pem

パスフレーズ保護を解除していない秘密鍵を使う場合は、Apache2の起動時にパスフレーズが自動的に入力されるようにする。まずパスフレーズ要求に対して実行するスクリプトファイルを作成する。

$ sudo vi /etc/apache2/pp-filter
# 以下の内容を入力
#!/bin/bash
echo "パスフレーズ"

スクリプトファイルのパーミッションを700に変更する。

$ sudo chmod 700 /etc/apache2/pp-filter

SSLに関するApache2の設定ファイルを変更する。

$ sudo vi /etc/apache2/mods-available/ssl.conf
# 以下のように変更
SSLPassPhraseDialog exec:/etc/apache2/pp-filter

SSL/TLS接続に必要なモジュールを有効化する。

$ sudo a2enmod ssl

ここではHTTPS接続もバーチャルホストで提供するのでバーチャルホスト名を設定しておく。

$ sudo vi /etc/apache2/ports.conf
# バーチャルホスト名を追加
# <IfModule mod_ssl.c>ディレクティブ内に追加した
NameVirtualHost *:443

バーチャルホストの設定ファイルを作成する。

$ sudo vi /etc/apache2/sites-available/www
# 以下のような設定を入力
<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName www.mylabo.lan
        ServerAdmin admin@mylabo.lan
        DocumentRoot /home/www/Documents
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /home/www/Documents/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order deny,allow
                Deny from all
                Allow from all
        </Directory>
        ScriptAlias /cgi-bin/ /home/www/cgi-bin/
        <Directory "/home/www/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order deny,allow
                Deny from all
                Allow from 127.0.0.1/255.0.0.0 192.168.1.0/255.255.255.0
        </Directory>
        ErrorLog /var/log/apache2/error.log
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
        SSLEngine on
        SSLCertificateFile /etc/apache2/certs/server.crt
        SSLCertificateKeyFile /etc/apache2/certs/privkey.pem
</VirtualHost>
</IfModule>

クライアント側にサーバ証明書または自己認証局のルート証明書をインポートし、サーバ証明書の作成時に入力した固有名でアクセスすると、警告なしに接続されるようになる。

余談だが、自己認証局のルート証明書を適当なディレクトリにコピーし、上記のバーチャルホスト以下のように設定するとクライアント証明書によるユーザー認証もできるようだ。もちろんクライアント証明書の発行が必要となる。

$ sudo cp /etc/ssl/CA/cacert.crt /etc/apache2/certs/
$ sudo vi /etc/apache2/sites-available/www
# 以下の設定を追加
SSLCACertificateFile /etc/apache2/certs/cacert.crt
SSLVerifyClient require
SSLVerifyDepth 1

コメントを残す