CentOS
SSL

マルチドメインでのSSLの設定(CentOS7)

マルチドメインの場合のSSLの設定

複数のドメインを管理している場合のウェブサーバーで、SSLの設定をします

証明書の取得等は下記サイトを参考にしました
さくらVPSでApache+SSL環境の構築

一つ問題となったのがssl.confを書き換えるところです
ssl.confを書き換えてしまうと対応できるドメインが一つに限られてしまうという点です

使用するファイル

ファイル 説明
CSR 認証局に申請するのに必要なデータです
秘密鍵と一緒に作成されます
秘密鍵 SSLの設定に必要なデータです
CSRと一緒に作成されます
***.keyという名前で保存します
証明書 SSLの設定に必要なデータです
認証局から発行されます
***.crtという名前で保存します
中間証明書 SSLの設定に必要なデータです
認証局から発行されます
***.crtという名前で保存します

CSRと秘密鍵の作成はツールを使うと便利です
CSR・秘密鍵生成

SSLの設定にはSSLのモジュールが必要になりますので、インストールしておきましょう
インストール時に/etc/httpd/conf.d/以下にssl.confが作成されます

yum install mod_ssl

設定方法

SSLの設定の方法を調べるとssl.confを直接書き換えているところが多いですが、今回はssl.confは書き換えません
/etc/httpd/conf.d以下に新しいファイルを作成して設定します
既にバーチャルホストの設定を行っているものがあればそれを利用しても構いません

ssl.confの設定を見ると実はデフォルトの設定を行うファイルになっています

ssl.conf
<VirtualHost _default_:443>
  ...
</VirtualHost>

新しく作ったファイルにSSLの設定をしていきます

new.conf
NameVirtualHost *:443

<VirtualHost *:443>
  DocumentRoot /var/www/html  # ディレクトリ
  ServerName example.com  # ドメイン

  SSLEngine on
  SSLCertificateFile /etc/pki/tls/certs/example.crt  # 証明書
  SSLCertificateKeyFile /etc/pki/tls/certs/example.key  # 秘密鍵
  SSLCertificateChainFile /etc/pki/certs/rapid.crt  # 中間証明書

  <Directory "/var/www/html"> # .htaccessで上書きできます
    AllowOverride All
  </Directory>
</VirtualHost>

80番ポートも書き込みます
使わないのでhttpsにリダイレクトするなりしましょう

new.conf
NameVirtualHost *:80

<VirtualHost *:80>
  DocumentRoot /var/www/html  # ディレクトリ
  ServerName example.com  # ドメイン

  <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
  </IfModule>
</VirtualHost>

NameVirtualHost *:443
...

マルチドメインの場合は同じ要領でNameVirtualHostの下にVirtualHostタグを増やしていけばできます

設定の反映

CentOS7では勝手に443ポートが開いていないので、ファイアウォールの設定をします
なぜかhttpsを開けるとhttpが接続できなくなるので、両方開けるようにしましょう

firewall-cmd --permanent --zone=public --add-service=http 
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

ウェブサーバーの再起動をします
ウェブサーバーの起動時に/etc/httpd/conf.d/以下のファイルが読み込まれるため、そこに配置したssl.confとnew.conf(名前は何でもいい)が読み込まれます

systemctl restart httpd.service

まとめ

ssl.confの設定は443ポートのVirtualHostのデフォルト設定でした
直接ファイルを書き換えずに、新しいファイルから設定を上書きするようにしましょう