HTTPS の証明書更新に失敗してたので手動で更新した

Let's Encrypt で HTTPS 化した Tasking Manager 3 の証明書更新が成功しませんでした。

k-side.hatenablog.jp

動かなかったらどうしよ(

とか書いてたらその通りですよ…。

手動で証明書を更新する

VPS に接続して手動で更新を試みました。

$ sudo ~/src/certbot/certbot-auto renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/%ドメイン%.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not yet due for renewal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/%ドメイン%/fullchain.pem expires on 2018-XX-XX (skipped)
No renewals were attempted.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

どうやら証明書自体は cron で更新されたっぽいです。

良く見ると表示された fullchain.pem のフルパス名と /etc/nginx/sites-available/tm3 に記録した各種 pem のパスが異なっています。

一覧を見てみます。

$ sudo ls /etc/letsencrypt/live/%ドメイン%/ -lo
total 4
lrwxrwxrwx 1 root  36 Sep 14 03:00 cert.pem -> ../../archive/%ドメイン%/cert2.pem
lrwxrwxrwx 1 root  37 Sep 14 03:00 chain.pem -> ../../archive/%ドメイン%/chain2.pem
lrwxrwxrwx 1 root  41 Sep 14 03:00 fullchain.pem -> ../../archive/%ドメイン%/fullchain2.pem
lrwxrwxrwx 1 root  39 Sep 14 03:00 privkey.pem -> ../../archive/ドメイン/privkey2.pem
-rw-r--r-- 1 root 682 Jul 12 14:49 README

どうやら /etc/letsencrypt/archive/%ドメイン%/ にあった各種ファイル名の最後にある数値がインクリメントされていて、 /live/%ドメイン%/ の各種ファイルは archive/%ドメイン%/ の新しいファイルにシンボリックリンクが貼られているようです。

ということで新しいファイルを nginx に認識してもらうために設定ファイルを書き換えます。

$ sudo vi /etc/nginx/sites-available/tm3
-    ssl_certificate /etc/letsencrypt/archive/%ドメイン%/fullchain1.pem;
-    ssl_certificate_key /etc/letsencrypt/archive/%ドメイン%/privkey1.pem;
-    ssl_trusted_certificate /etc/letsencrypt/archive/%ドメイン%/fullchain1.pem;
+    ssl_certificate /etc/letsencrypt/live/%ドメイン%/fullchain.pem;
+    ssl_certificate_key /etc/letsencrypt/live/%ドメイン%/privkey.pem;
+    ssl_trusted_certificate /etc/letsencrypt/live/%ドメイン%/fullchain.pem; 
  • 内容としては archive ディレクトリではなく live ディレクトリに書き換える
  • 各種ファイルの最後にある数値を取り除く

最後に nginx を呼び出し直してあげます。

$ sudo systemctl reload nginx.service

これで再び HTTPS 接続できるようになりました。