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: port・package の apache2 はデフォルトで SSL/TLS に対応しているので、非常に楽です。
  • 一般的な Apache-2.x: それなりに楽ですが、再コンパイルが必要な場合もあります。
  • Apache-1.x: ちょっと面倒です。mod_ssl というapache-1.x に SSL/TLS 機能を追加するパッチをあてる必要があります。

      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) >> 次へ

ご意見・ご指摘は Twitter: @68user までお願いします。