仮想ホスト環境でHTTPS化(SSLを有効)を行う場合の設定
カテゴリ:Webサーバ
ApacheでHTTPS化を行う場合、単一ドメインの場合はssl.confにSSL証明書を設定しますが、マルチドメイン(仮想ホスト)の場合、少し異なります。概略としては、ssl.conf側でhttpd.confを参照するように指定しておき、httpd.confのVirtualHostのディレクティブ内にSSL関連の設定(証明書の指定も含む)を行います。
ssl.confの設定
まず、/etc/httpd/conf.d/ssl.confをバックアップした上で、以下の行以降をすべて削除します。
## ## SSL Virtual Host Context ## #####ここから下をすべて削除#####
その上で、以下を記述します。
NameVirtualHost *:443
※NameVirtualHostディレクティブは、名前ベースのバーチャルホストの設定を行ないたい場合に指定するパラメータとなり、上記の設定の場合、HTTPS(443ポート)で来たものはすべてVirtualHostを見よという意味になります。
コメント行を除けばssl.confの内容は以下のみになります。
LoadModule ssl_module modules/mod_ssl.so
Listen 443
SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
NameVirtualHost *:443
httpd.confの設定
VirtualHost *:443ディレクティブの設定
次に、/etc/httpd/conf.d/httpd.confのVirtualHost *:443のディレクティブ内に以下を記述します。
※SSLProtocol All -SSLv2 -SSLv3 -TLSv1はセキュリティ上、SSL2.0、SSL3.0、TLS1.0を無効にするための設定
SSLEngine on
SSLProtocol All -SSLv2 -SSLv3 -TLSv1
SSLCertificateFile [証明書ファイルのパス]
SSLCertificateKeyFile [秘密鍵のパス]
SSLCACertificateFile [中間証明書のパス]
設定例)
変更前:
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html/example
</VirtualHost>
変更後:
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html/example
SSLEngine on
SSLProtocol All -SSLv2 -SSLv3 -TLSv1
SSLCertificateFile /etc/sslcert/example.crt
SSLCertificateKeyFile /etc/sslcert/example.key
SSLCACertificateFile /etc/sslcert/example.ca
</VirtualHost>
HTTPからHTTPSへのリダイレクトの設定
VirtualHost *:80ディレクティブの設定
また、HTTPへのアクセスはHTTPSにリダイレクトさせたいはずです。
その場合は、VirtualHost *:80のディレクティブを以下のように記述します。
これは、http://example.comへの接続を、https://example.comに恒久的にリダイレクト(301リダイレクト)する設定です。
<VirtualHost *:80>
ServerName example.com:80
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule ^/(.*)$ https://example.com/$1 [R=301,L]
</VirtualHost>
www無しへのリダイレクト
httpd.confでwww無しあるいは有りで統一している場合、さらに以下のディレクティブも変更します。
以下はwww無しで統一している場合の設定例です。
www用のVirtualHost *:80ディレクティブの設定
以下は、www用のVirtualHost *:80のディレクティブの設定です。
※つまり、www有りでHTTPで来た場合に、www無しのHTTPSにリダイレクトする場合
<VirtualHost *:80>
ServerName www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
www用のVirtualHost *:443ディレクティブの設定
次に、www用のVirtualHost *:443のディレクティブの設定です。
※つまり、www有りでHTTPSで来た場合に、www無しのHTTPSにリダイレクトする場合
<VirtualHost *:443>
DocumentRoot /var/www/html/example
ServerName www.example.com
SSLEngine on
SSLProtocol All -SSLv2 -SSLv3 -TLSv1
SSLCertificateFile /etc/sslcert/example.crt
SSLCertificateKeyFile /etc/sslcert/example.key
SSLCACertificateFile /etc/sslcert/example.ca
Redirect permanent / https://example.com/
</VirtualHost>
※HTTPで来た場合は、単に、HTTPSにリダイレクトするだけですが、HTTPSで来た場合、ssl.confのNameVirtualHostディレクティブの設定から来るため、SSLの設定が必要になります。
設定の反映
最後にApacheを再起動して設定を反映させます。
apachectl restart
公開日時:2018年03月11日 13:59:17