1台のマシンでバーチャルホスト毎に別のSSL証明書を使用する方法

提供: Wikiducca
移動: 案内検索

概要

ブラウザが https(SSL) リクエストを要求すると、最初に、 SSL 暗号化をセットアップするための証明書がブラウザに送られる。 これは要求する URL よりも先に行われるため、名前ベースのバーチャルホストを 選択することができない。

対策案

案1) クライアント側で別のポート(例: https://example.com:8443) にアクセスさせる。 =>かっこわるいので却下。

案2) FW で https://example.com へのアクセスを example.com:8443 に転送する。 => 使用している FW のマニュアルに

できるけどおすすめしないよ

と書いてあったので却下。

案3) IPアドレスベースのバーチャルホストを使用する。 => この方法が一般的とのこと。これを設定する。


設定内容

仮想IPアドレスの割り当て

一つのNICに2つのIPアドレスを割り当てる。

手順は以下。


使用中の IP アドレス

192.168.1.100

今回割り当てる仮想IPアドレス

192.168.1.101


まず、NIC の設定ファイルである

/etc/sysconfig/network-scripts/ifcfg-eth0

をコピーする。

# cd /etc/sysconfig/network-scripts/
# cp -p ifcfg-eth0 ifcfg-eth0:1 ← eth0の複製eth0:1を作成

次に、ifcfg-eth0:1を開いて編集する。

# vi ifcfg-eth0:1
........................
DEVICE=eth0:1 ← eth0をeth0:1に変更
BOOTPROTO=static
BROADCAST=192.168.1.255
HWADDR=00:11:AA:BB:CC:DD
IPADDR=192.168.1.101 ← IPアドレスを変更
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes

最後にifupで、仮想インターフェースを立ち上げる。

# ifup eth0:1

以上で、仮想IPアドレスが使用できるようになった。

証明書を2つ用意する

今回は自己証明書を2つ作成した。

  • /usr/local/apache2/conf/vhost01_ssl/
  • /usr/local/apache2/conf/vhost02_ssl/

それぞれのディレクトリ内で以下のコマンドを実行する。


秘密鍵の作成

# openssl genrsa -des3 -out server.key 1024

自己証明書の作成

# openssl req -new -x509 -days 365 -key server.key -out server.crt

Apache起動時のパスワード要求を解除

# openssl rsa -in server.key -out server.key

httpd.conf 設定

バーチャルホストの作成方法は省略。

  • vhost01.example.com
  • vhost02.example.com

という2つのサイトを作成した。

ポイントは以下の箇所。

バーチャルホストディレクティブの部分を

<VirtualHost *:80>
    ServerName vhost01.example.com
            〜 以下略 〜

から、

<VirtualHost 192.168.1.100:80>
    ServerName vhost01.example.com
            〜 以下略 〜

のように変更する。


同じように vhost02 も変更しておく。

変更前

<VirtualHost *:80>
    ServerName vhost02.example.com
            〜 以下略 〜

変更後

<VirtualHost 192.168.1.101:80>
    ServerName vhost02.example.com
            〜 以下略 〜

以上を設定し、Apache を再起動し、IPアドレスごとにブラウザアクセスできるようになったことを確認。

httpd-ssl.conf 設定

/usr/local/apache2/conf/extra/httpd-ssl.conf

を編集する。

httpd.confと同様にバーチャルホストディレクティブを編集する。

変更前

<VirtualHost _default_:443>

変更後

<VirtualHost 192.168.1.100:443>


また、ディレクティブの中でcrtとkeyの指定をする。

変更前

SSLCertificateFile "/usr/local/apache2/conf/server.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"

変更後

SSLCertificateFile "/usr/local/apache2/conf/vhost01_ssl/server.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/vhost01_ssl/server.key"

同じように vhost02 用のディレクティブも追加する。

<VirtualHost 192.168.1.101:443>
SSLCertificateFile "/usr/local/apache2/conf/vhost02_ssl/server.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/vhost02_ssl/server.key"

Apache再起動

httpd.conf で httpd-ssl.conf が Include されていることを確認した後、 Apache を再起動する。

httpd.conf

Include conf/extra/httpd-ssl.conf

以上で、バーチャルホスト毎に個別のSSL証明書を使用されるようになる。

検証

ブラウザにて、

https://vhost01.example.com
https://vhost02.example.com

にアクセスし、表示される証明書がそれぞれ作成したものになっていることを確認した。

以上。

参考・引用

Apache のSSL対応マルチドメイン設定の方法

http://platz.jp/howto/ssl_virtualhost.html


SSL自己証明書作成手順

http://www.pistolfly.jp/weblog/2008/09/macportsapache2ssl.html