| 前へ << SSL/TLS の導入 (1) | SSL/TLS の導入 (3) >> 次へ |
前節で RSA 秘密鍵 server.key と、証明書 server.crt が用意できました。 これを Web サーバに組み込みます。ここでは Apache-2.x と Apache-1.x の設定方法について解説します。
簡単に違いを説明しておきます。
- FreeBSD 5.x + Apache-2.x: port・package の apache2 はデフォルトで SSL/TLS に対応しているので、非常に楽です。
- 一般的な Apache-2.x: それなりに楽ですが、再コンパイルが必要な場合もあります。
- Apache-1.x: ちょっと面倒です。mod_ssl というapache-1.x に SSL/TLS 機能を追加するパッチをあてる必要があります。
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://ホスト名/ にブラウザでアクセスできることを確認してください。
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 の配布元からソースを取得しコンパイルする方法を説明します。既に 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://ホスト名/ にブラウザでアクセスできることを確認してください。
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 以外を修正しなくても一応動く、というだけなので、 実運用では必要な部分を修正しましょう。
世の中にたくさん資料があるので、検索してください。簡単に言うと、 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 ではそういうことはなくなりました。
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 $