Let’s Encrypt一枚でサブドメイン含む複数ドメインに対応できた

 前回記事にて、ここのブログ用に無料の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から自己署名証明書だとメッセージが届きました。それを受けて現在はドメイン毎に証明書を取り直しています。Let’s Encryptなのにオレオレ証明書と間違われた経緯

 一般的な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 総合ポータルを参照しました。よくある質問 – 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ディレクトリに入ったところから説明します。

 certonlyサブコマンドを付けて、証明書を発行します。対話形式の画面が開きます。

apacheを利用しているので、apacheを選んでEnterで進みます。
apacheを利用しているので、apacheを選んでEnterで進みます。
利用したい全てのドメイン名を、コンマかスペースで続けて入れてEnter
利用したい全てのドメイン名を、コンマかスペースで続けて入れてEnter
既存の証明書を置き換えるか聞いてきたら、Expandで進みます。
既存の証明書を置き換えるか聞いてきたら、Expandで進みます。
なぜか家の環境では、バーチャルホストが見つからないとエラーが出ますが、
なぜか家の環境では、バーチャルホストが見つからないとエラーが出ますが、
証明書の発行は成功します。
証明書の発行は成功します。

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のリスタートが必要です。

Cronの設定

 cronに設定した自動更新の設定は変更なしで大丈夫でしょう。/etc/crontab に設定した毎週金曜日のam4時15分に実行する設定例です。テスト時には–force-renewalオプションを付けて更新に成功するのを確認しています。(2016/11/18追記)cronでの自動更新成功確認済み

 ただし、今回はディレクトリーのパスが変わったでの、前回作ったものの使わなくなったrenewal設定が残ったままなので、読みに行かないように削除しました。

動作確認

 以上で設定は完了です。アフィリエイトやプラグイン、ウィジェットをSSL通信対応に変更するのが面倒な実稼動サイトは、とりあえず「お問い合わせフォーム」だけSSLページにしています。サブドメインのyukkiblog.ikt-s.comはテストサイトなのでサイト全体をSSL通信に簡単にできました。

当然ですが、指定されていないサブドメインで開こうとすると、 マークが出なかったり、警告が出たりとブラウザーによって違いますが、SSL通信になっていないことがわかります。

Firefoxでエラー内容を見ると、証明書に含まれる対応サイトが見れました。
Firefoxでエラー内容を見ると、証明書に含まれる対応サイトが見れました。

証明書ひとつ運用可能

 もし、バーチャルホストを使って自分で管理しているサイトが複数ある場合は、今回のようにLet’s Encrypt証明書ひとつで全てのドメイン、全てのサブドメインをSSL通信サイトに対応させることができます。もちろん、ドメイン毎、サブドメイン毎に証明書を発行して管理することも可能です。使い方によって選べるのが良いですね。無料証明書ならではです。

 (2016/10/18追記)その後、未稼働のサブドメインも含めて自動更新できるようにする設定をしています。詳しくはコチラの記事をご覧ください。Let’s Encrypt更新でTLS-SNI-01 challengeエラーを回避

こちらの記事もどうぞ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です