FreeBSD 10.2: Apache 2.4 に SSL を導入

FreeBSD 10.2 サーバーの Apache 2.4 を HTTPS でアクセスできるように、mod_ssl を導入しました。その作業メモです。

SSL導入背景

私が管理しているWebサーバーは、現時点では特に利用者情報や秘密情報を扱う事はないため、通信中データ上の情報を保護する必要はないのですが、サイト利用者が所属会社などからWebブラウザーでアクセスすると、HTTPプロキシーサーバーログにURLが記録されて、どんなURLをアクセスしたのか会社のネットワーク管理者に丸見えになってしまいます。プロキシーログと利用者個人を結びつけて評価されない場合は気にする必要はありませんが、URL とユーザーを結びつけて怪しいサイトをアクセスしていると指摘されると、たまたま他人が入力したコンテンツを偶然アクセスしただけであっても、利用者にとってありがたくない話です。そこで、希望者にはHTTPでアクセスする場合同じ情報を HTTPS で利用できるように、SSL を導入しています。HTTPSを使うと、暗号の暗号化復号化のために少しレスポンスが悪くなるのですが、ホスト名以外の部分が隠されるというメリットがあります。
そして、今、サーバーリプレース作業中。
真面目にSSLを導入するなら公的な認証局に料金を支払って証明書を発行してもらうことになりますけど、単に簡単には盗聴できなくする目的のためですから、自己認証局で済ませます。(ブラウザーが警告を出しますけど、無視しして続行すればOK。)

Apache 上のSSLは15年くらい前から使っているのですが、サーバーリプレイスが約5年おきに発生し、そのたび、SSL導入方法が前回と違ってしまう印象で、毎回作業内容を思い出すのに時間が掛かります。(余談ですが、一番最初は apache_ssl を使って3日間くらい試行錯誤した記憶があります。apache ソースにパッチを当ててビルドして、すったもんだしました。その後で mod_ssl になってパッチは不要になりましたけど、ports を使わなかったのでビルドと暗号鍵生成に時間を費やしました。5年くらい前から ports と pkg を使えば、ドキュメントもいろんなサイトにあるので1時間もあれば設定完了と簡単になった印象。それでも毎回外部サイトを参照しています。)手順がほぼ確定しているので、次のサーバー構築に備えて自分用のメモを残す事にしました。

SSL導入目標

利用者企業のWebプロキシーログに、ターゲットサーバー(サーバー名は記録されます)のパス情報が残らないようにする。サーバー上のコンテンツ情報が分からないようにする。

作業概略

FreeBSD 10.2 + Apache 2.4 の場合、pkg コマンドを使って、あらかじめ apache24 をインストールしておきます。openSSL はOSのものを使用。つまり、SSLを導入していない Apache 2.4 サーバーに HTTPS を追加する形で導入しますので、Apache Webサーバーがインストール済みである必要があります。

  • /usr/local/etc/apache24 以下の extra/http-ssl.conf 上の情報を元に、http-ssl.conf と httpd.conf を編集する。
  • 暗号鍵を手動で作成する
  • Apache を再起動する。

作業コマンド

  • /usr/local/etc/apache24/extra/httpd-ssl.conf を開く
    コメント行の次の行を見て、/usr/local/etc/apache24/httpd.conf をextra/httpd-ssl.conf が読み込まれるように編集する。
# Required modules: mod_log_config, mod_setenvif, mod_ssl,
#          socache_shmcb_module (for default value of SSLSessionCache)

httpd.conf 中、mod_log_config, mod_setenvif, mod_ssl, socache_shmcb_module のキーワードを探して、コメントを外す。

  • 次の行もコメントを外して、SSLの設定ファイルが読み込まれるようにする。
    Include etc/apache24/extra/httpd-ssl.conf
  • あらかじめhttpd-ssl.conf 中に記述されている鍵を保存するディレクトリに移動して作業を行います。
    # cd /usr/local/etc/apache24/
  • サーバー用秘密鍵を作る。途中の入力待ちには適切に情報を入力する。
    # openssl genrsa -des3 -out server.key 1024
    Generating RSA private key, 1024 bit long modulus
    ................++++++
    .....................................................++++++
    e is 65537 (0x10001)
    Enter pass phrase for server.key:
    Verifying - Enter pass phrase for server.key:
    以下略
  • サーバー用公開鍵を作る
    # openssl req -new -key server.key -out server.csr
    Enter pass phrase for server.key:
  • 証明書の作成
     # openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
  • 鍵と証明書のパーミッションを変更
    # chmod 0400 server.key
    # chmod 0400 server.crt
  • 上で作った server.key をそのまま使うと、Apache 起動の度にパスフレーズ入力を求められるので、それを不要にする。(server.key からパスワードを取り除くらしい。)
    # cp server.key server.key.orig
    # openssl rsa -in server.key.orig -out server.key

このあとで、httpd-ssl.conf 内の <VirtualHost _default_:443> セクション以下に、サーバー情報を記述して、Apache を再起動する。

以上の作業で、Webページへのアクセスに HTTPS が利用できるようになりましたが、暗号通信が出来るようになっただけなので、このあと Apache のコンフィグレーションを適切に行う必要があります。

参考にさせて頂いた情報

https://forums.freebsd.org/threads/creating-a-ssl-certificate.1222/

Comments

  1. 「コメントアウト」=「コメント化する」ですが、もしかして逆の意味で使ってたりしますか。

コメントを残す