Let's Encrypt で SSL化しているドメインに、後からサブドメインを追加し、かつ SSL化する手順のメモを公開する。

まえおき不要の場合はここからジャンプ
 → 手順のみ読みたい場合
 → certbot の 手順から読みたい場合

はじめに余談 (読み飛ばしてOK)

こんな状態なので、追加したサブドメインが一般的な手法でのSSL化が可能なのか、やや不安だった(結果: 以下手順でも無事成功)。

個人的には、以下を目的に実行した。

まえおき おわり。

以下、実際の手順。

1.前提条件の確認

以下を前提条件に話を進める。

ディレクトリは一般的なものにしてあるが、各自が環境に合わせて読み替えること。

2.新サブドメイン用のディレクトリを作成する

まず、サーバー上に新サブドメイン用のディレクトリを作成する

ディレクトリ作成ここまで。
続いて、nginx の設定ファイルでサブドメインの設定を行う。

3.nginx.conf の server ディレクティブに以下を追加。

まず 非SSL の 80番ポートでアクセスが可能になる準備をしておく。
(重要: これがないと certbot による認証ができない)
(どうせ SSL化するのだから、ポート80はシンプルで良い。)

以上で、サブドメイン追加&SSL化「前」の準備は終わり。
※ 赤字「return 301 https://hoge.tvbok.com$request_uri; 」の部分は、最終的にコメントアウトを外すので、覚えておくこと。

4.nginx.conf で SSL 設定 を行う

ついでに SSL用の 443ポートの設定も、この段階で nginx.conf に追加する。
(ここでも ディレクトリ構成は一般的なものに書き換えている)
(覚え書きのため、個人的な設定もここに残しておく
(※少々問題あるのでコピペ非推奨)
 あくまでも、参考程度に。

例えば以下のような設定を nginx.conf に追加する。

nginx.conf の追記・保存が終わったら
nginx -t  (文法チェック)
nginx -s reload で nginx を再起動する。
※追記: 念のため、reboot でサーバー全体を再起動するのが良いかも?

以上で、サーバー側のひとまずの準備おわり。

5.サブドメインを追加する

私の場合(さくらインターネット + さくらのVPS の場合)では、さくらインターネットの「ドメインコントロールパネル」にて 目的のドメイン に サブドメインの Aレコードを追加する。(※ドメインコントロールパネルへのアクセス手順はこのページで解説

index.html が無事 表示できたら、いよいよ SSL化を行う。

追記: 注意。まだ新ドメインは開かないこと!

6.追加したサブドメインをSSL化する

ここが、このページの本題。
Let's Encrypt の場合、SSL化は certbot というモジュールで行う。
(「追加」という趣旨上、certbot は既にインストール済みとして扱う)

以上で、certbot の SSL化は成功。

7.HTTP > HTTPS のリダイレクトを設定する

ここで「■3.サブドメイン追加前の準備」でコメントアウトした、
443ポートへのリダイレクト部分のコメントアウトを外す。

ここまでの手順で、新サブドメインの追加とそのSSL化は完了。
最終チェックする。↓

今回の例でいえば、https://hoge.tvbok.com/ をブラウザで開く。
※ (重要) この時点ではじめて ↑ https あり ↑でアクセスする。
これで アップした index.html が HTTPS で表示されていれば、SSL化は成功。
※ その後、HTTP 通信も、無事リダイレクトされるか確認する。
※ php、cgi、サーバーアプリ等が意図通り動くかどうか、もチェックする

以上で、「後からサブドメインを追加して、それを含めて Let's Encrypt でSSL化する」手順の紹介はおわる。

ただし、このページの解説で、抜けている部分はまだある。

「コピペ非推奨」の理由

上記の nginx.conf (443側) を丸々コピペすると、以下の問題が発生する。

これらは、いつか直さなきゃなーと思いつつ、2018年頃から色々と時間が取れなくなってしまい、未だに放置している。そのうち直す。

最大の注意点(?)

今回、一時的にではあるが、SSL化は成功しているのに追加したサブドメインが「危険なサイト」扱いされてしまった。その辺のメモを以下に記す。

上記のコードを丸々コピペし、SSL化直後に 404、403、503 エラーを発生させると、新しく追加したサブドメインが「危険なサイト」もしくは「保護されていない通信」扱いになってしまう場合があるかも?(大事にはならないが、注意が必要)

上にも書いたが、何もしなくても、この警告は半日くらいで解除されるので、大きな問題にはならないと思う。しかし「かなり気持ち悪い&ガッカリ感が半端ない」ので、丸々コピペする人は注意しておこう。。。

 追記: 「危険なサイト」現象の再現できた!

すでにアチコチで追記を入れているのでピンと来る人もいると思うが、「nginx.conf で ポート 443 のTSL 設定を外したり、完全に未設定な状態にする」と、この問題が見事に再現できた。
つまり、ポート 443 の SSL 設定が正しく動作していなかった可能性が非常に大きい。


         ↓

追記おまけ: reboot を勧めた理由

今回 得た教訓

nginx に重要な変更を行った時は、「nginx -s reload」ではなく「reboot」しよう。
「nginx -s reload」するなら、再アクセスは時間が経ってから行おう。既に稼働中のドメインであるならば、絶対に「reboot」などでサーバー全体を再起動させよう。

今後の課題

新サブドメイン追加&SSL化直後にこの記事をアップした。なので、CRON の自動更新が(サブドメイン追加前と同じ設定で)無事に実行されるか、まだ確証が持てない状況である。

このページの更新は以上。