Web サイトを HTTPS にしてみた

前回の記事で、この Web サイトのサーバー証明書を StartSSL で取得する手順を書いた。
この記事ではそれに引き続くかたちで、Web サイトを HTTPS 対応にした手順を控えておく。

Web サーバー アプリケーションの種類、それを動かしている OS、デストリビューションによって、設定の方法、設定ファイルの位置など少しずつが異なる。
ここでは ubuntu 12.04 上で動かしている apache2 で HTTPS の設定をした。

設定ファイル

ubuntu における apache2 の設定は、原則として /etc/apache2/sites-enabled ディレクトリか、/etc/apache2/conf.d ディレクトリに作成したファイルに記述することで行う。
原則としてと書いたのは、ubuntu であれ apache2 の本来の設定方法が使えないわけではないからだ。

ubuntu であろうと apache2 が最初に読み込む設定ファイルは apache2.conf ファイルであることに違いは無い。
ubuntu の場合は、/etc/apache2 ディレクトリに置かれた /etc/apache2/apache2.conf ファイルがそれだ。
しかしながら、/etc/apache2/apache2.conf ファイルに設定を記述するのは、ubuntu の作法から外れてしまうだけでなく、apache2 のパッケージ アップデート ( sudo apt-get upgrade など) で /etc/apache2/apache2.conf が上書きされてしまい悲惨な目にあうことがあるので全くお勧めできない。

ところで、/etc/apache2/sites-enabled ディレクトリや /etc/apache2/conf.d ディレクトリに作成したファイルが設定ファイルとして使えるのは、ubuntu だけの特殊事情というわけでもない。
/etc/apache2/sites-enabled ディレクトリや /etc/apache2/conf.d ディレクトリに作成したファイルが、 /etc/apache2/apache2.conf ファイルの中の Include ディレクティブによって読み込まれるようになっているだけのことだ。
ubuntu の /etc/apache2/apache2.conf ファイルでは、他にも /etc/apache2/mods-enabled/*.load、/etc/apache2/mods-enabled/*.conf、/etc/apache2/ports.conf、/etc/apache2/httpd.conf が Include ディレクティブで指定されている。
/etc/apache2/mods-enabled/*.load と /etc/apache2/mods-enabled/*.conf は動的モジュールの設定に使うように設計されていることと、これらと /etc/apache2/ports.conf と /etc/apache2/httpd.conf のどれもがパッケージ アップデート ( sudo apt-get upgrade など) で上書きされることがあるために、やはり個別の設定をここに記述するのはお勧めできない。

/etc/apache2/mods-elabled/*.conf ファイルはモジュールの動作を微調整するために、設定を記述せざるを得ないこともある。

HTTPS のモジュールを有効にする

apache2 で構築されている Web サイトを HTTPS 対応にするための設定は、大きく三つに分けられる。
ひとつは、HTTPS のモジュールを組み込むこと、ひとつは HTTPS で使うポートを開けること、もうひとつは HTTPS の暗号で使う電子証明書を指定することだ。
そこで、まずは HTTPS のモジュールを組み込むとしよう。

apache2 を HTTPS に対応させるためのモジュールは SSL モジュール (mod ssl) なので、これをインストールして組み込めばいい。
実は ubuntu では apache2 をインストールすると大半のモジュールも一緒にインストールされ、いくつかのモジュールは最初から組み込まれるようになっている。
それ以外のモジュールを組み込むには sudo a2enmod コマンドでモジュール名を指定すればいい。
SSL モジュール を組み込むのならば sudo a2enmod ssl のように実行する。
逆に組み込んだモジュールを外すのは sudo a2dismod コマンドを使う。
SSL モジュールを外すのならば sudo a2dismod ssl のように実行する。

ubuntu では apache2 のモジュールの設定ファイルは /etc/apach2/mods-available ディレクトリにすべて保存されている。
設定ファイルはモジュール名に拡張子 .load が付いたファイルと、拡張子 .conf が付いたファイルの二つだ。
拡張子 .conf のファイルは、それを持たないモジュールも一部にある。
sudo a2enmod コマンドは /etc/apach2/mods-available ディレクトリにある指定されたモジュールの設定ファイルのシンボリック リンクを /etc/apache2/mods-enabled ディレクトリに作成し、 sudo a2dismod コマンドは /etc/apache2/mods-enabled ディレクトリにあるシンボリック リンクを削除している。

結局のところ HTTPS 対応にするために sudo a2enmod ssl を実行して、SSL モジュールを apache2 に組み込む。

HTTPS のポートを開ける

先ほども書いたように、apache2 で構築されている Web サイトを HTTPS 対応にするための設定は、大きく三つに分けられる。
ひとつは、HTTPS のモジュールを組み込むこと、ひとつは HTTPS で使うポートを開けること、もうひとつは HTTPS の暗号で使う電子証明書を指定することだ。
すでに SSL モジュールを組み込んだので、次は HTTPS で使うポートを開ける。

それには apache2 の設定ファイルに Listen 443 と書くだけでいい。
ubuntu の場合は、/etc/apache2/ports.conf ファイルに最初から Listen 443 と記述されており、ssl モジュールが有効か否かによって Listen 443 の記述が使われたり使われなかったりするようになっている。
つまり、ubuntu では sudo a2enmod ssl を実行すれば、それ以外に何もせずとも Listen 443 が有効になる。

HTTPS のサイト設定を作る

Web サーバーは、ポート、サーバー名毎のサイトという単位で設定するのが基本だ。
apache2 もその基本に則っている。
ubuntu の場合は /etc/apache2/sites-enabled/000-default ファイルで <VirtualHost *:80> ディレクティブからそれに対応する </VirtualHost> ディレクティブで基本のサイト設定がなされている。

この設定は HTTPS を使わないサイトの設定なので、HTTPS のために新たなサイト設定が必要だ。
通常は HTTPS ではないサイトの構成と HTTPS の構成を同じにすることが多いので、これをコピーして手を加える。

実際には /etc/apache2/sites-enabled/000-default ファイルはシンボリック リンクで、その実体は /etc/apache2/sites-available/default ファイルだ。
apache2 ではサイト設定のファイルの実体を /etc/apache2/sites-available ディレクトリに置き、/etc/apache2/sites-enabled ディレクトリにシンボリック リンクを作ったり、削除して運用する方針になっている。
これに合わせて、HTTPS のサイト構成のファイルも /etc/apache2/sites-available ディレクトリに作る。

まず、 sudo cp /etc/apache2/sitse-available/default /etc/apache2/sites-available/000-default-ssl コマンドを実行する。
次に、/etc/apache2/sites-available/000-default-ssl ファイルの <VirtualHost *:80> と書かれている箇所を <VirtualHost *:443> に書き換える。

これでとりあえず、HTTPS のポートを使うサイトの構成の基が用意できた。
ただし、現時点では HTTPS のポートを使うというだけで、HTTPS  でやりとりするようにはなってない。

証明書を指定する

構成したサイトで HTTPS のやりとりをさせるために、HTTPS のやりとりで使う電子証明書をサイト構成の中で指定する。

Web サイトを HTTPS にするためのサーバー証明書は前回の記事で入手し、Web サーバーの ~/ssl/compnet.key と ~/ssl/compnet.pem の二つのファイルに保存した。
~/ssl/compnet.key ファイルが秘密鍵で、~/ssl/compnet.pem がサーバー証明書の本体だ。
取得したときの秘密鍵はパスワードで保護されているが、これも前回の記事で解除した。

これらのファイルを apache2 の設定ディレクトリに移動して適切なアクセス権を割り当てるため、以下のコマンドを実行する。

続いて、先ほど作った HTTPS のサイト構成ファイル /etc/apache2/sites-available/000-default-ssl を修正していく。
具体的には /etc/apache2/sites-available/000-default-ssl の <VirtualHost *:443> から </VirtualHost> の間に以下のように書き加える。

作成した /etc/apache2/sites-available/000-default-ssl ファイルを有効にするには、このファイルのシンボリック リンクを /etc/apache2/sites-enabled ディレクトリに作ればいい。
それには sudo a2ensite コマンドを使って、 sudo a2ensite 000-default-ssl のようにする。
これで /etc/apache2/sites-enabled ディレクトリに /etc/apache2/sites-available/000-default-ssl ファイルのシンボリック リンクが作られる。

最後に sudo service apache2 restart を実行して apache2 を再起動してやれば HTTPS のサイトが有効になる。

関連記事

  • Zabbix 3.0 にクライアント認証を追加2016.4.18 (月) Zabbix 3.0 にクライアント認証を追加 レンタル サーバーに Zabbix をインストールして使っているユーザーはかなり多いと思います。 筆者も他聞に漏れず、レンタル サーバーに Zabbix をインストールして使っています。正確にはレンタル サーバーというよりも、レンタル VPS […]
  • クライアント認証でログインできるようにしたら Zabbix API がエラーになる2016.4.30 (土) クライアント認証でログインできるようにしたら Zabbix API がエラーになる Zabbix には、外部プログラムから Zabbix が管理する情報を取り扱うための仕組みとして、Zabbix API が存在します。 Zabbix API を使えば、Web UI を使わずにプログラムなどから Zabbix […]
  • Zabbix 3.0 にクライアント認証だけでログインする2016.4.26 (火) Zabbix 3.0 にクライアント認証だけでログインする 先の記事で Zabbix 3.0 のフロントエンドにクライアント認証を追加しました。 しかし先の記事にも書いたとおり、これだけではStartSSL でクライアント証明書を発行した人 (StartSSL を利用ユーザーなど) 全員を承認してしまいます。 […]
  • Hyper-V 3.0 で Hyper-V レプリカを構成する準備2013.5.28 (火) Hyper-V 3.0 で Hyper-V レプリカを構成する準備 Windows Server 2012 の Hyper-V 3.0 で提供された、Hyper-V レプリカを構成してみる。 Micorosoft が提供する便利そうな機能は、ほとんどが Active Directory […]

コメントを残す