KUSANAGIのSSLが自動アップデートされない時の対処法
※本ページはプロモーションが含まれていますいま御覧のページの情報は2017年のものなので、2019年最新版の記事は↓になります。
KUSANAGIのSSLが自動更新されなくなって手動で更新する方法を紹介しました。
そこからいろいろ調べていくと自動更新されなくなった原因がわかった気がするので紹介します。
自動更新の頻度
僕はKUSANAGIがLet’s Encryptに対応したときには既に使っていました。
その時のcronの更新設定が2ヶ月に一度になっていて、その設定が残っていたのが自動更新されなくなった原因のようです。
KUSANAGIを初期から使っている人は「autorenewal」を一旦オフにして、もう一度オンにすることで解決できます。
autorenewalをoff
# kusanagi autorenewal off
再びonに。
# kusanagi autorenewal on
これで毎週日曜日に更新されるようになります。
次の日曜日までに証明書が切れる人は手動で更新しましょう。※kusanagi部分はプロファイル名です。複数プロファイルを作ってなければkusanagi部分は無くても良いです。
# kusanagi update cert kusanagi
ここで更新すれば、後は自動更新がうまくいくはずです。
解決の過程と自動更新されなかった仕組み
cronが書かれたファイルを開いてみる。
# vi /var/spool/cron/root
このように、奇数月に一度、28日の3時7分に実行するようだ。
07 03 28 1-11/2 * /usr/bin/kusanagi update cert keikenchi
Let’s Encryptの有効期限は3ヶ月で、30日以上有効期限が残っている証明書は更新しないようなので、2ヶ月に1回しか更新しないなら一度でも失敗したらアウト。
証明書の有効期限が31日〜59日の時に実行されるとそこから2ヶ月(60日)更新されないので証明書は切れてしまうわけだ。
僕の場合、Let’s Encryptの有効期限が7月7日で、5月28日に更新チェックされたけど30日以上残っているので更新されず、次の更新日が7月28日だから有効期限が切れることになる。
ちなみにLet’s Encryptのログは、
/var/log/letsencrypt/letsencrypt.log
にある。
cronを作成するシェルスクリプトを見てみる。
# vi /usr/lib/kusanagi/lib/autorenewal.sh
cronを書き出している部分は
# run update certificates at 03:07 every monday. echo "07 03 * * 0 /usr/bin/kusanagi update cert" >> $CRONFILE
という部分。コメントは毎週月曜日に更新すると書いてあるのに、cronで指定されているのは「0」すなわち日曜日。
テキトーすぎwww
とりあえず週1回更新を実行するようになっているので
autorenewalをoffにするとcronを削除するようなので、一旦offにする
# kusanagi autorenewal off
再びonに。
# kusanagi autorenewal on
これでcronが更新できた。
どこかのタイミングでcronの設定を変えたんだろうけど、変えるんならそれまで使ってたcronも書き換えてくれよー…。
おわりに
KUSANAGIのSSL周りには苦しめられ続けています。
「update cert」を実行してもまだエラーが出てますからね…。
とりあえず証明書が更新されているのでよいですが、エラーは気持ち悪いのでなんとかしてほしいです…。
いつになったら安定するんでしょうかね〜…。