前回記事にて、ここのブログ用に無料のLet’s Encrypt証明書を設定した続きです。もともとこのデフよんブログのドメインは、def-4.comで一貫しているので前回は気にしていませんでしたが、www.def-4.comからのアクセスに対してはdef-4.comの証明書が無効でした。ここのブログはwww付でのアクセスはありえないので良いのですが、バーチャルホストで2ドメイン稼動させている、もうひとつのサイトはwww.ikt-s.comと、www付きで運用しているので、ikt-s.comもSSL通信に対応させたくなったわけです。ついでに複数サブドメインも対応しているのを確認できました。
(2016/08/03追記) この記事で発行した証明書ですが、Google Search Consoleから自己署名証明書だとメッセージが届きました。それを受けて現在はドメイン毎に証明書を取り直しています。
このページの目次
SANで複数ドメイン対応
一般的なSSL証明書は、私が利用してきた一番安いやつでもwww.def-4.comで取得した証明書はdef-4.comでも利用できるのが一般的です。www以外の複数サブドメインで利用したいなら、ワイルドカード対応の高いやつを購入する必要があります。
一方、Let’s Encrypt証明書は、SAN(Subject Alternative Name)で複数ドメインに対応した証明書が使えます。つまりは、def-4.comもikt-s.comも一枚の証明書で共有できるのです。さらにwww.def-4.comもwww.ikt-s.comも同じ証明書一枚で済むというわけです。さらにwww以外のサブドメインも同じ証明書でいけました。ワイルドカードは未対応ですが、実在のサブドメインを複数指定すれば、実質ワイルドカード対応とも言えるでしょう。
慣れないとややこしい話かもしれませんが、頭をリセットして考えれば、無料の場合このほうが自然といえます。詳しくはLet’s Encrypt 総合ポータルを参照しました。
証明書取り直し
ということで、前回取得した証明書をrevokeせずに、新しく下記の5つに対応した証明書を取り直しました。
- www.ikt-s.com
- ikt-s.com
- yukkiblog.ikt-s..com
- www.def-4.com
- def-4.com
前回gitしたcertbotをそのまま利用します。ターミナルでcertbotディレクトリに入ったところから説明します。
./certbot-auto certonly
certonlyサブコマンドを付けて、証明書を発行します。対話形式の画面が開きます。
Port443では初回の認証取れず
家の環境だけかもしれませんが、初回のcertbot-auto certonlyや、certbot-auto renewコマンドだけポート443(tls-sni-01)で証明書を取得できませんでした。初回だけは、a2dissiteコマンドでSSLサイトのバーチャルホストを外してapache2をリロードしてからコマンドを実行すると成功しました。一度成功すると、a2ensiteで元の状態に戻しても成功するようになりました。理由はわかりません。
証明書の保存場所
発行された証明書の保存場所がこちら。先に記入したドメイン名のikt-s.comディレクトリーに作成されていました。最後の数字部分が更新される毎に増えています。いろいろテストしたので6回目の発行のため末尾の数字が6になっています。
- /etc/letsencrypt/archive/ikt-s.com/cert6.pem …サーバ証明書(公開鍵)
- /etc/letsencrypt/archive/ikt-s.com/privkey6.pem …秘密鍵
- /etc/letsencrypt/archive/ikt-s.com/chain6.pem …中間証明書
- /etc/letsencrypt/archive/ikt-s.com/fullchain6.pem …サーバ証明書と中間証明書が結合されたファイル(今回は未使用)
★実際に設定に使用するのは同時に作成されているエイリアスのファイルの方を指定します。それによって、3ヶ月毎に証明書ファイルが更新されていっても、Apache側の設定変更をする必要がなくなります。
- /etc/letsencrypt/live/ikt-s.com/cert.pem…サーバ証明書(公開鍵)
- /etc/letsencrypt/live/ikt-s.com/privkey.pem…秘密鍵
- /etc/letsencrypt/live/ikt-s.com/chain.pem…中間証明書
/etc/apache2/sites-available/の該当ファイルの証明書のパスを変更してa2ensiteで有効にしたら、apacheのリスタートが必要です。
service apache2 reload
Cronの設定
cronに設定した自動更新の設定は変更なしで大丈夫でしょう。/etc/crontab に設定した毎週金曜日のam4時15分に実行する設定例です。テスト時には–force-renewalオプションを付けて更新に成功するのを確認しています。(2016/11/18追記)cronでの自動更新成功確認済み
# m h dom mon dow user command 15 4 * * 5 root /home/user/certbot/certbot-auto renew -q
ただし、今回はディレクトリーのパスが変わったでの、前回作ったものの使わなくなったrenewal設定が残ったままなので、読みに行かないように削除しました。
rm /etc/letsencrypt/renewal/def-4.com.conf
動作確認
以上で設定は完了です。アフィリエイトやプラグイン、ウィジェットをSSL通信対応に変更するのが面倒な実稼動サイトは、とりあえず「お問い合わせフォーム」だけSSLページにしています。サブドメインのyukkiblog.ikt-s.comはテストサイトなのでサイト全体をSSL通信に簡単にできました。
- https://yukkiblog.ikt-s.com
- https://www.ikt-s.com/otoiawase
- https://ikt-s.com/otoiawase (リダイレクトで上記アドレスで開きます)
- https://def-4.com/contact
- https://www.def-4.com/contact (リダイレクトで上記アドレスで開きます)
当然ですが、指定されていないサブドメインで開こうとすると、 マークが出なかったり、警告が出たりとブラウザーによって違いますが、SSL通信になっていないことがわかります。
証明書ひとつ運用可能
もし、バーチャルホストを使って自分で管理しているサイトが複数ある場合は、今回のようにLet’s Encrypt証明書ひとつで全てのドメイン、全てのサブドメインをSSL通信サイトに対応させることができます。もちろん、ドメイン毎、サブドメイン毎に証明書を発行して管理することも可能です。使い方によって選べるのが良いですね。無料証明書ならではです。
(2016/10/18追記)その後、未稼働のサブドメインも含めて自動更新できるようにする設定をしています。詳しくはコチラの記事をご覧ください。