====== Apache SSL での VirtualHost、SNI、Redirect の設定 ======
===== 実現したい仕様 =====
複数の SSL ドメインを 1台の Web サーバーでホスティングし、且つ、すべてのユーザーアクセスパターンをドメイン毎に単一バーチャルホストへリダイレクトするための設定を実現する。\\
Server Name Indication(SNI) を利用する事で、1台の Web サーバーで複数の SSL ドメインをホスティングする事ができる。\\
SNI 利用するには以下の条件が必要である。\\
* Apache 2.2.12 以降
* 複数の SSL 証明書を取得済みである事
^ ユーザーアクセスパターン ^ Apache の動作 ^
| http://monsters-g.com | https://www.monsters-g.com へリダイレクト |
| http://www.monsters-g.com | https://www.monsters-g.com へリダイレクト |
| https://monsters-g.com | https://www.monsters-g.com へリダイレクト |
| http://tomoyan.net | https://www.tomoyan.net へリダイレクト |
| http://www.tomoyan.net | https://www.tomoyan.net へリダイレクト |
| https://tomoyan.net | https://www.tomoyan.net へリダイレクト |
| http://repos.tomoyan.net | https://repos.tomoyan.net へリダイレクト |
===== 最終的な設定内容(問題の発生しない設定) =====
Apache は Rewrite より Redirect の方が処理としては軽い。\\
Rewrite するだけの処理であったとしても SSL の証明書の指定は必要である。もしも証明書を指定しなかった場合は、全体的に原因不明な変な動作を引き起こした。\\
==== Apache 全体の SSL の設定 ====
$ sudo vi /etc/httpd/conf.d/ssl.conf
# SNIに未対応のブラウザ用の設定
SSLStrictSNIVHostCheck off
==== monsters-g.com SSL の設定 ====
Apache のバーチャルホストの設定。\\
$ sudo vi /etc/httpd/conf.d/www.monsters-g.com.conf
ServerName www.monsters-g.com
ServerAlias monsters-g.com
Redirect "/" "https://www.monsters-g.com/"
DocumentRoot "/var/www/vhosts/www.monsters-g.com"
ServerName www.monsters-g.com
ServerAlias monsters-g.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^monsters-g\.com
RewriteRule ^/(.*)$ https://www.monsters-g.com/$1 [R=301,L]
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite !3DES:!aNULL:EDH+HIGH:ECDH+HIGH:-AES128:-3DES:-DSS:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA
SSLHonorCipherOrder on
SSLCertificateFile /etc/letsencrypt/live/monsters-g.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/monsters-g.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/monsters-g.com/chain.pem
Require all granted
Options All
AllowOverride All
DirectoryIndex index.php index.html
==== tomoyan.net SSL の設定 ====
$ sudo vi /etc/httpd/conf.d/www.tomoyan.net.conf
ServerName www.tomoyan.net
ServerAlias tomoyan.net
Redirect "/" "https://www.tomoyan.net/"
DocumentRoot "/var/www/vhosts/www.tomoyan.net/dokuwiki"
ServerName www.tomoyan.net
ServerAlias tomoyan.net
RewriteEngine on
RewriteCond %{HTTP_HOST} ^tomoyan\.net
RewriteRule ^/(.*)$ https://www.tomoyan.net/$1 [R=301,L]
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite !3DES:!aNULL:EDH+HIGH:ECDH+HIGH:-AES128:-3DES:-DSS:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA
SSLHonorCipherOrder on
SSLCertificateFile /etc/letsencrypt/live/tomoyan.net/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/tomoyan.net/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/tomoyan.net/chain.pem
Require all granted
Options All
AllowOverride All
DirectoryIndex index.php index.html
==== repos.tomoyan.net SSL の設定 ====
Apache のバーチャルホストの設定。\\
$ sudo vi /etc/httpd/conf.d/repos.tomoyan.net.conf
ServerName repos.tomoyan.net
Redirect "/" "https://repos.tomoyan.net/"
DocumentRoot "/var/www/vhosts/repos.tomoyan.net"
ServerName repos.tomoyan.net
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite !3DES:!aNULL:EDH+HIGH:ECDH+HIGH:-AES128:-3DES:-DSS:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA
SSLHonorCipherOrder on
SSLCertificateFile /etc/letsencrypt/live/tomoyan.net/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/tomoyan.net/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/tomoyan.net/chain.pem
Require all granted
Options All
AllowOverride All
DirectoryIndex index.php index.html
===== 最初の設定内容(問題の発生する設定) =====
結論から言うと以下の設定方法では問題が発生しました。\\
なぜか https://monsters-g.com のユーザーアクセスパターンの時だけ、Apache が tomoyan.net の SSL 証明書を使って通信を暗号化しようとする現象が発生し、原因不明で悩みました。
==== Apache 全体の SSL の設定 ====
$ sudo vi /etc/httpd/conf.d/ssl.conf
# SNIに未対応のブラウザ用の設定
SSLStrictSNIVHostCheck off
==== monsters-g.com SSL の設定(問題の発生する設定) ====
$ sudo vi /etc/httpd/conf.d/www.monsters-g.com.conf
ServerName monsters-g.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^monsters-g\.com
RewriteRule ^/(.*)$ https://www.monsters-g.com/$1 [R=301,L]
ServerName www.monsters-g.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.monsters-g\.com
RewriteRule ^/(.*)$ https://www.monsters-g.com/$1 [R=301,L]
DocumentRoot "/var/www/vhosts/www.monsters-g.com"
ServerName www.monsters-g.com
SSLCertificateFile /etc/letsencrypt/live/monsters-g.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/monsters-g.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/monsters-g.com/chain.pem
Require all granted
Options All
AllowOverride All
DirectoryIndex index.php index.html
==== tomoyan.net SSL の設定(問題の発生する設定) ====
$ sudo vi /etc/httpd/conf.d/www.tomoyan.net.conf
ServerName tomoyan.net
RewriteEngine on
RewriteCond %{HTTP_HOST} ^tomoyan\.net
RewriteRule ^/(.*)$ https://www.tomoyan.net/$1 [R=301,L]
ServerName www.tomoyan.net
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.tomoyan\.net
RewriteRule ^/(.*)$ https://www.tomoyan.net/$1 [R=301,L]
DocumentRoot "/var/www/vhosts/www.tomoyan.net/dokuwiki"
ServerName www.tomoyan.net
SSLCertificateFile /etc/letsencrypt/live/tomoyan.net/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/tomoyan.net/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/tomoyan.net/chain.pem
Require all granted
Options All
AllowOverride All
DirectoryIndex index.php index.html
==== repos.tomoyan.net SSL の設定(問題の発生する設定) ====
$ sudo vi /etc/httpd/conf.d/repos.tomoyan.net.conf
ServerName repos.tomoyan.net
RewriteEngine on
RewriteCond %{HTTP_HOST} ^repos\.tomoyan\.net
RewriteRule ^/(.*)$ https://repos.tomoyan.net/$1 [R=301,L]
DocumentRoot "/var/www/vhosts/repos.tomoyan.net"
ServerName repos.tomoyan.net
SSLCertificateFile /etc/letsencrypt/live/tomoyan.net/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/tomoyan.net/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/tomoyan.net/chain.pem
Require all granted
Options All
AllowOverride All
DirectoryIndex index.php index.html
===== 参考文献 =====
[[https://wiz-code.net/linux/install/diary/24_apache_virtualhost.html|Apache VirtualHostとSNIの設定 - StudioAREA.WIZ]]\\
[[http://www.neobit.jp/archives/232|Alias Redirect Rewrite~の使い分け | 技術屋ネオビットの覚え書き]]\\
[[https://blog.apar.jp/linux/378/|名前ベースのバーチャルホストでSSLを使う(SNI) | あぱーブログ]]\\
[[https://qiita.com/papillon/items/f56a6f278609270a392c|mod_sslで使用するSSLCipherSuiteの設定を詰めてみる - Qiita]]\\
[[http://www.nina.jp/server/redhat/httpd/httpd_conf.html|もっとhttpd.confの設定]]\\
[[http://www.orangetakam.com/blog/archives/122|CentOS7 HTTPサーバ2.4系でアクセスの許可と拒否の書き方]]\\