Tech Racho エンジニアの「?」を「!」に。
  • インフラ

ApacheでIPアドレスを追加して複数ドメインでSSLする

HTTPSのハンドシェイクは、NameVirtualHostの解決よりも前に行われるため、基本的に1つのIPアドレスでは1つのドメインしかSSL設定できません。

さくらインターネットなどで、固定IPを追加してもらった際の設定方法を簡単に紹介します。サーバはUbuntu 10.04です。

もともと192.0.2.11を持っていて、新たに198.51.100.16~198.51.100.23(8個)を追加するとします。

networkに追加
以下のようにすると、IPアドレスを追加できます。

$ ifconfig eth0:0 198.51.100.16
$ ifconfig eth0:1 198.51.100.17
$ ifconfig eth0:2 198.51.100.18
$ (...略...)
$ ifconfig eth0:7 198.51.100.23

ただしこれは実験用。
ifconfigコマンドで設定しても、再起動時に消えてしまうので、以下のように /etc/network/interfaces に追記して

# これは最初から書いてあるはず
auto eth0
iface eth0 inet static
    address 192.0.2.11
    netmask 255.255.255.128
    gateway 192.0.2.129

# ここから追加
auto eth0:0
iface eth0:0 inet static
    address 198.51.100.16
    netmask 255.255.255.0

auto eth0:1
iface eth0:1 inet static
    address 198.51.100.17
    netmask 255.255.255.0

# ...略...

auto eth0:7
iface eth0:7 inet static
    address 198.51.100.23
    netmask 255.255.255.0

以下のコマンドを実行します。

$ /etc/init.d/networking restart

記述を間違えてSSH接続できなくなった、なんてことがないようにご注意を。

ApacheでListen
ApacheのListenするIPを明示的に指定している場合は、/etc/apache2/ports.confなどで、以下のようにListenしてあげます。
先にnetwork/interfacesの設定をしておかないと、「Unable to bind address」とエラーになるので注意。

Listen 198.51.100.16:80
Listen 198.51.100.16:443
Listen 198.51.100.17:80
Listen 198.51.100.17:443
# ...略...

VirtualHostを書く
あとは普段通りにVirtualHostを書きます。IPは個別に明記します。

<VirtualHost 198.51.100.16:443>
  # 略
</VirtualHost>

Apacheを再起動
IPを変えたときは、reloadではなくrestartしてあげましょう。

$ /etc/init.d/apache2 restart

おまけ
IPアドレスを追加できない場合でも、以下のような方法でマルチドメインのSSLを実現することができます。

  1. Apache 2.2 + SNIを使う
  2. 別ポートを使う
  3. マルチドメイン証明書を使う
  4. 証明書エラー(ドメイン名不一致)を無視する

ただし、1は古いブラウザが非対応、2は明示的にポートを指定する必要が出てくるので、商用サービスではちょっと使えません。
3は検討の余地がありますが、後から追加できないし、会計処理的にも面倒が発生しそうです。
4は一番簡単ですね。オレオレ証明書を使うならこれで良いです。決してパブリックなサービスではやらないでください。


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。