さくらのVPSでCentOS7のサーバーを構築する 番外編…SNI SSL

本ブログの「さくらのVPSでCentOS7のサーバーを構築する」シリーズ本編では、サーバーの起動からWordPressが稼働を開始するところまでの手順を解説しました。今回は番外編として、「SNI SSL」の導入方法を解説します。

もくじ

  • 番外編…IPアドレスベースSSL
  • 番外編…SNI SSL
    • 「SNI」とは何か
    • 下準備
    • SSLサーバー証明書の設置・設定
  • 番外編…Apache再起動時に秘密鍵のパスフレーズ入力をサボる方法
  • 番外編…「Let’s Encrypt」でSSL/TLSサーバー証明書を無料で取得する

「SNI」とは何か

SNIは「Server Name Indication」の略称であり、SSL/TLSの拡張仕様です。これを使うことにより、1つのグローバルIPアドレスで複数のSSL/TLSサーバー証明書を使い分け、複数の(異なるドメイン名の)WEBサイトをHTTPS化することができるようになります。

技術的な解説はWikipediaやSNIで1台のサーバ上に複数のSSLサイトを運用 – 前編 – さくらのナレッジなどに任せますが、SNIを使うことによって

  • 1つのIPアドレスで複数のSSL/TLSサーバー証明書を使い分ける事ができる(SNIを使わない場合は1つのIPアドレスにつき1つの証明書しか使えない)
  • 名前ベースバーチャルホストで複数の(異なるドメイン名の)WEBサイトを運用している場合でも、それぞれが自前のSSL/TLSサーバー証明書を使えるようになる
ことを理解すればOKです。

但し、(2018年地点ではほぼ無視できるとはいえ)SNI非対応ブラウザも存在する、ということは頭の片隅に入れておきましょう。詳細はServer Name Indication – Wikipediaなども参考にしてください。WindowsならVista以降はだいたい大丈夫です。

下準備

ApacheでSSL通信を行うためには、「OpenSSL」と「mod_ssl」が必要です。OpenSSLはデフォルトでインストールされているので、mod_sslを入れます。 [VIM] sudo yum install mod_ssl [/VIM]

また、ファイアウォールでHTTPSの通信を許可する必要があります。 [VIM] sudo firewall-cmd –add-service=https –zone=public –permanent sudo firewall-cmd –reload [/VIM]

SSL/TLSサーバー証明書の入手に関しては、「番外編…IPアドレスベースSSL」及び「番外編…「Let’s Encrypt」でSSL/TLSサーバー証明書を無料で取得する」で解説していますので、そちらを参照してください。

SSLサーバー証明書の設置・設定

ここからの解説では、以下に示す設定のWEBサイト2つをHTTPS化します。実際に設定を行う場合は、各自設定を自分の環境用に読み替えてください。また、例によってPHPをCGIモードで稼働させますが、その設定の詳細は「CentOS+Apache2.4+PHP7+SuexecでPHPを(ユーザーディレクトリで)CGIモード化する」で解説します。

HTTPS化するWEBサイトの設定情報

WEBサイト1(ユーザー名hoge)…SNI非対応環境からのアクセスではこちらを優先

  • ドメイン名 secure.example.com
  • ドキュメントルート /home/hoge/public_html/piyo/
  • SSL/TLSサーバー証明書のパス /etc/httpd/conf/ssl/secure.example.com/hogehoge2017.crt
  • 中間CA証明書のパス /etc/httpd/conf/ssl/secure.example.com/hogehoge2017.cer
  • 秘密鍵のパス /etc/httpd/conf/ssl/secure.example.com/hogehoge2017.key

WEBサイト2(ユーザー名fuga)

  • ドメイン名 secure.example.net
  • ドキュメントルート /home/fuga/public_html/bar
  • SSL/TLSサーバー証明書のパス /etc/letsencrypt/live/secure.example.net/cert.pem
  • 中間CA証明書のパス /etc/letsencrypt/live/secure.example.net/chain.pem
  • 秘密鍵のパス /etc/letsencrypt/live/secure.example.net/privkey.pem

設定ファイルの作成

設定ファイル自体はmod_sslインストール時に自動生成されるので、そちらを使ってもいいでしょう。このページでは設定ファイルを自分で作りますが、自動生成されたものと突き合わせれば十分対応できると思います。何はともあれ、設定ファイルを開きます。 [VIM] #自動生成される設定ファイルを無効化 sudo mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.old #設定ファイルを開く sudo vim /etc/httpd/conf.d/ssl.conf [/VIM]

設定ファイルは以下のようになります。 [VIM] Listen 443 https SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog SSLSessionCache shmcb:/run/httpd/sslcache(512000) SSLSessionCacheTimeout 300 SSLRandomSeed startup file:/dev/urandom 256 SSLRandomSeed connect builtin #SSLRandomSeed startup file:/dev/random 512 #SSLRandomSeed connect file:/dev/random 512 #SSLRandomSeed connect file:/dev/urandom 512 SSLCryptoDevice builtin #SSLCryptoDevice ubsec #SNI非対応環境からのアクセスがあったら #デフォルトのバーチャルホストへのアクセスを許可 SSLStrictSNIVHostCheck Off SSLProtocol all -SSLv2 -SSLv3 #PHPをCGI化するための呪文 ScriptAlias /php-hoge /var/www/cgi-bin/hoge-cgi/php-cgi ScriptAlias /php-fuga /var/www/cgi-bin/fuga-cgi/php-cgi #デフォルトのバーチャルホストは上に書く SuexecUserGroup hoge hoge ServerName secure.example.com DocumentRoot /home/hoge/public_html/piyo ErrorLog /var/log/httpd/secure.example.com_error_log CustomLog /var/log/httpd/secure.example.com_access_log combined SetHandler php-cgi Action php-cgi /php-hoge SSLEngine on SSLCertificateFile /etc/httpd/conf/ssl/secure.example.com/hogehoge2017.crt SSLCertificateChainFile /etc/httpd/conf/ssl/secure.example.com/hogehoge2017.cer SSLCertificateKeyFile /etc/httpd/conf/ssl/secure.example.com/hogehoge2017.key SuexecUserGroup fuga fuga ServerName secure.example.net DocumentRoot /home/fuga/public_html/bar ErrorLog /var/log/httpd/secure.example.net_error_log CustomLog /var/log/httpd/secure.example.net_access_log combined SetHandler php-cgi Action php-cgi /php-fuga SSLEngine on SSLCertificateFile /etc/letsencrypt/live/secure.example.net/cert.pem SSLCertificateChainFile /etc/letsencrypt/live/secure.example.net/chain.pem SSLCertificateKeyFile /etc/letsencrypt/live/secure.example.net/privkey.pem SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!RC4:!DH SSLHonorCipherOrder On [/VIM] 書き終えたら保存しましょう。

Apache再起動

SSLサーバー証明書の配置、設定ファイルの作成が終わったら、Apacheを再起動します。 [VIM] #文法チェック sudo apachectl configtest #Apache再起動 sudo systemctl restart httpd #起動時にSSLサーバー証明書と対になる #秘密鍵のパスフレーズを入力する必要がある Enter SSL pass phrase for example.net:443 (RSA) : [/VIM]

無事に再起動できれば、設定完了です。ちなみに、SSL Server Test (Powered by Qualys SSL Labs)ではSSLの設定の安全性を確かめることができます。

このブログを応援する・寄付する

当ブログでは暗号通貨による寄付を募っております。

モナゲボタン モナゲボタン

Bitcoin:

Monacoin:

Litecoin: