概要
当サイトも一応SSL化したんでChromeで恥ずかしい表示は出ないとおもうんですが、1つ問題がありました。
複数ドメインで1枚の証明書だけだった
ブログを始めたきっかけが不労所得倍増計画だったんで、ここ以外にもあと2つほど独自ドメインを持っています(うち1つはまだ準備中) ←202003現在、7ドメイン保持中w
で、SSL証明書っていうのは1つのグローバルIPに対して1枚が一般的で、中にははてなとかよくあるレンタルサーバなんかでまとめて証明書を使ってたりするわけですが、無料でSSL証明書を出してくれるLetsEncryptではそういうサービスまではやってないようでした。
したがって1枚の証明書発行時に複数ドメインを全部明示して作成するんですが、それだと載せた証明書をよく見ると他のドメインがバレバレなわけで、テレ屋の私としてはそれがちょっと引っかかっていました
対応の前提
で、ずっとそれを気にしていたのですが、どうやらLetsEncryptでも1つのIPで複数の証明書を作れるという記載を見つけたのでとびついてみました
おせわになりました。
・1つのIPで複数のドメインの証明書に対応させるにはSNIという機能を使う
(これまで使ってた機能はSAN=Subject Alternative Name)
・SNIを使うにはVirtualhostの技術を使って1つのIPに対し複数のドメインがあるように振る舞わせることで実現できる
・古いブラウザではこのSNIに対応していないために表示できないケースもあるが、現時点で出ているブラウザはほとんどが対応していると思われる
ということでした
作業内容
さきほどやってみました
※途中失敗して何度となくサーバーエラーを出しました。見てた方ごめんなさい。。
【注意】トラブルが発生したときにすぐ戻せるような状態でやってください
従来の証明書取得コマンド(3サイト分:1枚の証明書に複数サイトを証明するデータが保管されている)
certbot certonly –webroot -w /var/www/html/ -d ドメイン① -d ドメイン② -d ドメイン③
今回の変更点
証明書取得コマンド(3サイト分:1つ1つが独立した証明書になっている)
certbot certonly –webroot -w /var/www/html/ -d ドメイン②
certbot certonly –webroot -w /var/www/html/ -d ドメイン③
/etc/letsencrypt/live/配下にドメイン名フォルダができて中に証明書が格納される
/etc/httpd/conf.d にメインじゃない2サイト分のconfigファイルを作成、個別にとった証明書のパスを指定
<VirtualHost *:443>
ServerAdmin webmaster@ドメイン名
ServerName ドメイン名
DocumentRoot /var/www/html
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride None → All #20180814追記
Order allow,deny
allow from all
</Directory>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateChainFile /etc/letsencrypt/live/ドメイン名/chain.pem
SSLCertificateFile /etc/letsencrypt/live/ドメイン名/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン名/privkey.pem
</VirtualHost>
これを2サイト分作って保存
終わったらapacheをリロード
systemctl reload httpd
これでサブサイトで証明書の詳細を見たときに「なにこのサイト?」ってことがなくなる
まぁそこまで見る人も多くないだろうから別にそのままでもよかったんだけど、要するに自己満足ってやつですね
あとは自動更新させるスクリプトを組んでいるのでそれをちょっと直さないとだめかも
疲れたからまたこんど、っつーことで。。。
お疲れ様でした。
20180814追記)
.htaccessがあるディレクトリは AllowOverride All にすること!