SSL/TLS の導入 (2)

前へ << SSL/TLS の導入 (1) SSL/TLS の導入 (3) >> 次へ

Apache への導入

前節で RSA 秘密鍵 server.key と、証明書 server.crt が用意できました。 これを Web サーバに組み込みます。

ここでは Apache-2.x と Apache-1.x の設定方法について解説します。

簡単に違いを説明しておきます。

FreeBSD 5.x + Apache-2.x 編 (1/2) - インストール編

ports か packages から apache-2 をインストールします (既にインストール済なら少し先の「SSL/TLS 有効化編」から読んでください)。

apache-1.x 時代は「www/apache13 が HTTP 専用、www/apache13-modssl が HTTP と HTTPS 用」となっていましたが、 apache-2.x では www/apache2 に一本化されています。

# cd /usr/ports/www/apache2
# make install
または
# pkg_add /foo/bar/apache-2.0.xx.tbz
とします。

/usr/local/etc/apache2/conf/httpd.conf を適当に修正します (ServerName など)。

/etc/rc.conf に

apache2_enable="YES"
を追加します。
この説明は rcNG が採用された FreeBSD 5.0-RELEASE 以降を対象としています。 FreeBSD 4.x は不要だと思います (手元にないので検証できません)。
# /usr/local/etc/rc.d/apache2.sh start
Starting apache2.
で apache が起動します。何かエラーが出たら適当に対処してください。
# /usr/local/etc/rc.d/apache2.sh start
Stopping apache2.
Waiting for PIDS: 76730.
で apache を終了させます。

一度 start・stop して、正常に起動することを確認しましょう。 また、http://ホスト名/ にブラウザでアクセスできることを確認してください。

FreeBSD 5.x + Apache-2.x 編 (2/2) - SSL/TLS 有効化編

RSA 秘密鍵 server.key と証明書 server.crt を以下のような配置でコピーします。 RSA 秘密鍵のパーミッションは 400 にして、他ユーザが読めないようにしておきます。
# cd /usr/local/etc/apache2/
# mkdir ssl.key ssl.crt
# cp /foo/bar/server.key /usr/local/etc/apache2/ssl.key/
# cp /foo/bar/server.crt /usr/local/etc/apache2/ssl.crt/
# chmod 400 /usr/local/etc/apache2/ssl.key/server.key
ディレクトリ名やファイル名を変更したい場合は、 /usr/local/apache2/conf/ssl.conf を修正してください。

そして /etc/rc.conf に

apache2ssl_enable="YES"
を追加します。つまり /etc/rc.conf には最終的に
apache2_enable="YES"
apache2ssl_enable="YES"
の 2行を追加したことになります。
# /usr/local/etc/rc.d/apache2.sh stop
# /usr/local/etc/rc.d/apache2.sh start
として、https://ホスト名/ にアクセスできたら成功です。

一般的な Apache-2.x 編 (1/2) - インストール編

apache の配布元からソースを取得しコンパイルする方法を説明します。
既に apache2 をインストール済の場合は、 以下のように httpd -l で mod_ssl.c が表示されることを確認してください。 mod_ssl.c が表示されたら再コンパイルは不要ですが、表示されなかったら再コンパイルが必要です。
% /usr/local/apache2/bin/httpd -l
Compiled in modules:
  (略)
  mod_ssl.c
  (略)

http://httpd.apache.org より最新版の httpd-2.0.xx.tar.gz を取得し、 以下のようにコンパイルします。

% gzip -d httpd-2.0.xx.tar.gz
% tar xf httpd-2.0.xx.tar
% cd httpd-2.0.xx
% ./configure --enable-ssl
% make
% su
# make install
バイナリ・設定ファイルなど一式は /usr/local/apache2/ にインストールされます。

/usr/local/apache2/conf/httpd.conf を適当に修正します (ServerName など)。

# /usr/local/apache2/bin/apachectl start
で apache が起動、
# /usr/local/apache2/bin/apachectl stop
で終了します。

一度 start・stop して、正常に起動することを確認しましょう。 また、http://ホスト名/ にブラウザでアクセスできることを確認してください。

一般的な Apache-2.x 編 (2/2) - SSL/TLS 有効化編

RSA 秘密鍵 server.key と証明書 server.crt を以下のような配置でコピーします。 RSA 秘密鍵のパーミッションは 400 にして、他ユーザが読めないようにしておきます。
# cd /usr/local/apache2/conf/
# mkdir ssl.key ssl.crt
# cp /foo/bar/server.key /usr/local/apache2/conf/ssl.key/
# cp /foo/bar/server.crt /usr/local/apache2/conf/ssl.crt/
# chmod 400 /usr/local/apache2/conf/ssl.key/server.key
ディレクトリ名やファイル名を変更したい場合は、 /usr/local/apache2/conf/ssl.conf を修正してください。

サーバを起動する際は、apachectl start ではなく、startssl とします。

# /usr/local/apache2/bin/apachectl startssl
もし start としてしまったら HTTP の方だけが有効になってしまうので、 一度 stop して startssl しなおしてください。

なお、stopssl はありません。startssl で起動、stop で終了です。

FreeBSD 5.2.1-RELEASE + Apache-2.0.53_1 で、ソースからコンパイルして試したところ、 デフォルトでは IPv6 ソケットの port 443 しか LISTEN してくれませんでしたので、 ssl.conf の
Listen 443
Listen 0.0.0.0:443
と修正しました。ssl.conf のそれ以外の部分は修正していません。 httpd.conf は全く修正しませんでした。

なお、ssl.conf の Listen 以外を修正しなくても一応動く、というだけなので、 実運用では必要な部分を修正しましょう。

Apache-1.x 編

世の中にたくさん資料があるので、検索してください。

簡単に言うと、 http://httpd.apache.org から apache-1.xx.xx.tar.gz をダウンロードし、 さらに http://www.modssl.org から mod_ssl-2.yy.yy-1.xx.xx.tar.gz をダウンロードして (apache-1.xx.xx.tar.gz と mod_ssl-2.yy.yy-1.xx.xx.tar.gz のバージョンはあわせること)、 以下のようにコンパイルします。

% gzip -d apache-1.xx.xx.tar.gz
% tar xf apache-1.xx.xx.tar
% gzip -d mod_ssl-2.yy.yy-1.xx.xx.tar.gz
% tar xf mod_ssl-2.yy.yy-1.xx.xx.tar.gz
% cd mod_ssl-2.yy.yy
% ./configure --with-apache=../apache_1.xx.xx --enable-module=so --enable-shared=ssl
% cd ../apache_1.xx.xx
% make
% make certificate TYPE=dummy
% su
# make install
てな感じでコンパイルして、server.key と server.crt を適当に配置すればよいような 気がしないでもないですが、もう忘れました。
apache-2.x からは mod_ssl が apache に同梱されるようになったので、 こういう面倒なことをしなくてもよいわけです。

apache-1.x に脆弱性が発見された場合などは、それに対応した mod_ssl がリリースされるまでに数日かかっていたこともあったのですが、 apache-2.x ではそういうことはなくなりました。

Apache-SSL

mod_ssl とは別に、Apache-SSL というものがあります。 mod_ssl は Apache-SSL から派生したプロジェクトで、本家は Apache-SSL です。 いずれも apache-1.x にパッチをあてて SSL/TLS 機能を追加する、という目的は同じです。 しかし Apache-SSL はお勧めしません。

理由はプロジェクトが活発でないからです。例えば apache-1.3.33 がリリースされたのが 2004/10/28、それに対応する mod_ssl がリリースされたのが 2日後の 2004/10/30 でした。 一方、Apache-SSL は 2004/11/10 に対応版がリリースされています。

このケースはむしろ対応が早かった方で、数ヶ月〜数年放置されていた時代もあったはずです。 例えば apache-1.3.31 と apache-1.3.32 に対応する Apache-SSL はリリースされていません。 mod_ssl はしっかりリリースされています。

いずれにせよ、現時点では SSL/TLS 機能が標準装備されている apache-2.x を使う方がよいでしょう。 ちなみに apache-2.x で使用されているのは Apache-SSL ではなく、mod_ssl の方です。

前へ << SSL/TLS の導入 (1) SSL/TLS の導入 (3) >> 次へ

$Id: ssl-setup-2.html,v 1.1 2005/03/21 15:55:29 68user Exp $