さくらのVPSでCentOS7のサーバーを構築する 番外編…SNI SSL
投稿日:2018年01月28日
最終更新日:
もくじ
- 番外編…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サーバー証明書を使えるようになる
但し、(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
#デフォルトのバーチャルホストは上に書く
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の設定の安全性を確かめることができます。