【KUSANAGI】Let’s EncryptのSSL証明書が更新できなくて苦労した話。

2021/11/20

 

毎度の事なんだけど、Let’s Encryptからメールが来ていた。

Hello,

Your certificate (or certificates) for the names listed below will expire in 19 days (on 07 Sep 21 10:56 +0000). Please make sure to renew your certificate before then, or visitors to your web site will encounter errors.

例によって証明書の有効期限が迫っているという内容でした。

 

kusanagiコマンドで一発

kusanagiのプロヴィジョンの際に設定した、Let’s Encrypt証明書の自動更新を有効にしているため、通常であれば何もしなくても証明書の更新がなされるはず。
実際に前回までは、更新ができていなかったらkusanagiコマンドを叩けば一発で更新ができる。

# kusanagi update cert
# kusanagi ssl --email メールアドレス

このコマンドのどちらかを叩けば一発で更新できるはずなのだけれど、何度やってもダメで挙げ句の果てに何度もやり過ぎだと叱られてしまいました……。

Attempting to renew cert from /etc/letsencrypt/renewal/hogehoge.conf produced an unexpected error: urn:acme:error:rateLimited :: There were too many requests of a given type :: Error creating new authz :: Too many invalid authorizations recently.. Skipping.

 

kusanagi8.0.0から仕様変更

そういえばkusanagi8.0.0から、何か仕様変更があるような噂を小耳に挟みました。

以下の2つの条件を満たすとき、kusanagi provision で www.example.com と example.com のどちらかを FQDN に指定すると、www.example.com と example.com の両方を VirtualHost として設定します。

  • www.example.com と example.com の両方が、DNS のAレコードに登録されている
  • exmaple.com が whois情報に登録されている

また上記の FQDN の指定に加え、メールアドレスを指定して Let’s EncryptでSSL証明書を取得したとき、www.example.com と example.com の両方を登録したSSL証明書を取得します。

KUSANAGI バージョンアップ情報 8.0.0-2」より引用

当ブログの場合

  • お名前.comのDNSレコードにice-military.comの1つを登録している。
  • ice-military.comはwhois情報に登録済み。

と、1つめの条件を満たせていなかったのですね。

 

なるほど、リリースノートはちゃんと読まなきゃいけませんね。
お名前.comのAレコードにwwwつきドメインを追加すれば、恐らく事態は大きくならずに済んだことでしょう。
気づいた時には後の祭り、実は既に当ブログの再構築をしてましたwww
kusanagiを入れ直して、記事をリストアして画像を上げ直し。
過去に何度も再構築してるんで慣れてしまったけど、日々のバックアップをきちんと取っているからこそ、一晩かからずに復旧できるのです。
それでも復旧作業はなかなかの苦労でして、もしもバックアップが残っていなかったらと考えただけでゾッとします。
ホント日々のバックアップは大事。

 

crontabを確認

ブログの再構築と、お名前.comにwwwつきドメインを追加したことにより、無事Let’s Encryptの証明書が再取得できたので、自動更新のスケジュールを見直すことにしました。

まず前提としてcrontabの読み方から……。

# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

管理人もいい歳ですので、こういうのもメモにしておかないとすぐに忘れてしまいます。
メモは大事、そしてそのメモをどこに書いて、どこに保管したのかも覚えておくことが大事。

 

07 03 * * 0 /usr/bin/kusabagi update cert

Let’s Encryptの有効期限は90日で、有効期限が30日以上残っている証明書は更新しない仕組みになっているそうです。
以前のkusanagiは2ヶ月に1回自動更新を動作させるようになっていて、1度更新に失敗すると次の自動更新は証明書の有効期限が切れてしまうという問題を抱えていました。
ここはバージョンアップを重ねるごとに改善されたのでしょう。
今回確認したcrontabでは、毎週日曜日03時07分に自動更新が動作するように設定されています。
これだけの頻度ならば、特に見直す必要はなさそうですね(そっ閉じ

 

今回はDNSサーバーへのFQDN設定ということで片付きましたけど、たぶん3ヶ月後の管理人は忘れているはず。
次回以降、証明書関連でバタつかないように。

2021/11/20