apache2.29、443ポートでVirtualDocumentRootを使用、ワイルドカードのサブドメイン

環境と経緯

・FreeBSD10.3
・Apache/2.2.29
・mod_ssl/2.2.29
・OpenSSL/1.0.1

apache2.2.9上のウェブサーバーのSSL化でワイルドカードのサブドメインを対応させる機会があった。 設定を行ったが、次の問題で実現できなかった。
証明書はルートドメインとワイルドカードの両方で取得済みでSNIはデフォルトで使えるようになっているが、httpsでサブドメインにアクセスすると「接続拒否」のエラーが出た。
ネット上の多くの設定例を元に実装することができたので、注意しなければならないことを忘備録として残すことにする。尚、現在主流のApache2.4系では設定が異なるので当ページは真に申し訳ないが参考にならない。2.4系のつもりで2.2系を設定すると私のようにハマる可能性がある。

apache2.29、443ポート「VirtualDocumentRoot」

apache2.29、443ポートでVirtualDocumentRootを使用、ワイルドカードのサブドメインを設定する際の注意点


1.httpd-ssl.confを使う。80ポートのバーチャルホストである「httpd-vhosts.conf」にまとめて記述するとルートドメインしか動作しない。おそらくhttpd-ssl.confへのシンボリックリンクが他に存在するようだ。ゆえにSSLの設定と443でアクセスするバーチャルホストを「httpd-ssl.conf」に記述する。

2.httpd-ssl.confのListenは省略しない。 apache24系なら「NameVirtualHost *:443」の記述だけでもサブドメインは動作するようだが、Apapche2.2.9では動作しない。 記述方法は「Listen 443 https」と「httpd-ssl.conf」に記述する。

3.サブドメイン用のヴァーチャルホストの記述でVirtualDocumentRootを使う場合はServerNameは記述しない。 ServerAlias は「ServerAlias *.koey.net」とワイルドカードで記述する。 「ServerAlias *.koey.net:443」のようなポート番号の指定はApapche2.2.9では必要ない。(動作しない)

4.ポート番号80の暗号なしのサーバーを残す場合はSSL以外の記述をhttpd-ssl.confと同様にhttpd-vhosts.conf記述する。

apache2.29、SSLでのVirtualDocumentRoot設定方法まとめ


1.SAN証明の取得、設置
2.「httpd-ssl.conf」の記述、記述例は実際に稼動した最低限の内容を後述。
3.「httpd.conf」で必要なモジュールとhttpd-ssl.confのインクルードを有効にする。
・SSL関係モジュールのコメントアウト「#」を削除。
・mod_vhost_alias…LoadModule vhost_alias_module libexec/apache22/mod_vhost_alias.soの先頭、コメントアウト「#」を削除。
・Include etc/apache22/extra/httpd-ssl.conf の先頭コメントアウト「#」を削除。
4.Apacheの再起動

apache2.29、httpd-ssl.conf設定例



Listen 443 https
NameVirtualHost *:443

<VirtualHost *:443>
ServerAdmin メールアドレス
DocumentRoot 該当パス
ServerName koey.net
ServerAlias www.koey.net
SSLEngine on
SSLProtocol -ALL +TLSv1.2
SSLStrictSNIVHostCheck off
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!3DES:!RC4:!DH
SSLCertificateFile 該当パス/cert.pem
SSLCertificateKeyFile 該当パス/privkey.pem
SSLCertificateChainFile 該当パス/chain.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/www/apache22/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</VirtualHost>

<VirtualHost *:443>
ServerAlias *.koey.net VirtualDocumentRoot /該当パス/%1/
ErrorLog /ログへのパス/error_log
CustomLog /ログhwのパス/access_log common
SSLEngine on
SSLProtocol -ALL +TLSv1.2
SSLStrictSNIVHostCheck off
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!3DES:!RC4:!DH
SSLCertificateFile 該当パス/cert.pem
SSLCertificateKeyFile 該当パス/privkey.pem
SSLCertificateChainFile 該当パス/chain.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/該当パス/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</VirtualHost>