2つのVPSを使って、それぞれに一つのドメインをSSL/TLSサーバ証明書を入れて運用していたが、 諸事情により、これを一つにまとめたのでその時の手順の覚書です。 すごく面倒になると思って、先延ばしにしてきましたが、やってみたら簡単でした。
それぞれ Ubuntu 16.04 (VPS1) と Ubuntu 18.04 (VPS2) を入れた VPS が2台ある状態から VPS2 にウェブ関係を統合。 ウェブサーバは nginx を使用。 Let's encrypt 関連は普通に Certbot を使用。
説明の都合上 VPS1 に当てていたドメインを exampleA.com, VPS2のそれを exampleB.com とします。
VPS1 の exampleA.com を 証明書を失効(revoke) させて、VPS2 で新規に証明書を取得。 VPS2 ではすでに exampleB.com を運用しているが、それはそのまま維持(手を付けないことと)する。
https://letsencrypt.org/ja/docs/revoking/ の説明の通り。
$ su
$ certbot revoke --cert-path /etc/letsencrypt/live/exampleA.com/cert.pem
を実行するだけ.
DNSのAレコード設定を VPS2 のIPアドレスに変更します。 変更が反映されたのを見計らって次の作業を行います。 (今回は数分で設定が反映されていた。)
nginx の設定を先に済ませておきます。
/etc/nginx/sites-available/default
server ディレクティブを追加して、VPS1から引っ越してきた exampleA.com の設定をします。
nginx -s reload
などして反映、その後、
意図通り設定できたか http://exampleA.com/ にブラウザでアクセスして確認しておきます。
Certbot のページ
https://certbot.eff.org/ の ubuntu 18.04, nginx の説明を見ると、単に certbot --nginx
せよ、としか書いてない。
ということは、
多分 nginx の設定を Certbot が見て、あとはよきにはからってくれる感じなのかな。
もちろん実行する前に、/etc/nginx/sites-available/default や /etc/letsencrypt はバックアップしておくべし。
su
certbot --nginx
そうすると、複数のドメインが nginx に設定されているので、 Which names would you like to activate HTTPS for? と質問される。 既存の exampleB.com 関係は activate 済みなので、それらの番号は除外。今回引っ越ししてきた exampleA.com 関係を番号のみを(必要なら複数個)指定すればよい。 あとは本当にCertbot が全部設定書きかえだのなんだのをしてくれたようで、証明書取得とウェブサーバの設定は完了しました。ありがとう Certbot。
変更された設定を反映するために nginx -s reload
などして反映します。
openssl s_client -connect exampleA.com:443 < /dev/null 2> /dev/null | openssl x509 -text | grep "Not "
これを実行すると、証明書の更新時期がわかるので、これでうまく証明書が設定できたかわかります。(たぶん)
トラブって、ウェブが止まるとやだ!と思ってなかなか引っ越し作業ができなかったのですが、 やってみたら簡単でした。ただ運がよかっただけかもしれませんが。 とはいえ、誰もが https を使う時代なので、すごく簡単になっているのはむしろ当たり前なのかもしれません。