複数のバーチャルホストでSSL通信の設定を行う

Apache 白石朋広

皆さん、初めまして。
新入社員の白石です。

複数のバーチャルホストでのSSL通信の設定をした際、Apacheが起動せず結構な時間を使ってしまったので、そんな人が減ればいいなーって感じで書きます。

ここでは、同一サーバーで、

http://hoge1.co.jp

http://hoge2.co.jp

のバーチャルホストが既に設定されていて、

https://hoge1.co.jp

https://hoge2.co.jp

でもアクセスできるようにしてみます。

ステップ数で表すと3つほど。


1.デフォルトのVirtual Host設定の記述を消す
2.NameVirtualHost *:443を追記する
3.Virtual Hostの設定をする

これだけです。

1.デフォルトのVirtual Host設定の記述を消す

まずsslのconfファイルを見ます。

以下のようなVirtual Hostの記述を探してください。

##
## SSL Virtual Host Context
##

・
・
・

ここのVirtualHost _default_:443/VirtualHostを削除します。

2.NameVirtualHost *:443を追記する

1.で削除した部分に、NameVirtualHost *:443を追記して保存します。

こんな感じに。

##
## SSL Virtual Host Context
##

NameVirtualHost *:443
・
・
・

ちなみにこれを追記しないと・・・

Apacheを再起動するときにエラーが出てしまいます。
こんな感じに。

[warn] _default_ VirtualHost overlap on port 443, the first has precedence

 

3.Virtual Hostの設定をする

最後にVirtual Hostの設定を行います。

ここはみなさん様々な書き方をされてると思います。
httpd-ssl.confに直接書いたり、httpd-vhosts.confに書いたり、includeしていたり等々…
今回私はhttpd-ssl.confに直接書いたのでそれを書いていきます。

#   General setup for the virtual host
DocumentRoot "hoge1のルートディレクトリ"
ServerName hoge1.co.jp:443
ServerAdmin hoge1@hoge.co.jp
ErrorLog hoge1
LogLevel warn
CustomLog hoge1

SSLEngine on

SSLProtocol all -SSLv2

SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

SSLCertificateFile 

SSLCertificateKeyFile 

SSLCertificateChainFile 

SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars

    SSLOptions +StdEnvVars

BrowserMatch "" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog "" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

#   General setup for the virtual host
DocumentRoot "hoge2のルートディレクトリ"
ServerName hoge2.co.jp:443
ServerAdmin hoge2@hoge.co.jp
ErrorLog hoge2
LogLevel warn
CustomLog hoge2

SSLEngine on

SSLProtocol all -SSLv2

SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

SSLCertificateFile 

SSLCertificateKeyFile 

SSLCertificateChainFile 

SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars

    SSLOptions +StdEnvVars

BrowserMatch "" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog "" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

ざっとこんな感じになります!

DocumentRoot、sslのkeyファイルやcrtファイルの場所等は皆様に合わせてくださいね。