仮想ホスト環境で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.confVirtualHost *: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

本格的なスキルを身につける

Linux/ITエンジニアとしてのスキルを身につけるにはLPI-Japanアカデミック認定校リナックスアカデミーがおすすめですよ。

Webサーバに戻る

「Webサーバ」に関する他のTips

このページのトップに戻る