<![CDATA[
こんにちは。
先日似たような記事を書きました。そちらはSSL証明書更新処理結果のメール通知についてです。 今回は更新処理のサイクルについて書きます。
■Let's Encryptクライアント「Lego」の罠
SSL証明書はLet's Encryptの無料のものを利用しています。
Let's Encrypt公式のクライアントもあるのですがどうも評判がよろしくないようで、安定してると評価の高いLegoを利用しています。
Let's Encryptの証明書は90日で期限切れとなることは前回記事にも書きました。
じゃあ毎日更新しとけば安心じゃんと考えがちになってしまいますが、あまりに頻繁にリクエストすると認証局からブロックされてしまうそうです。
認証局として負荷を抑えるという目的でしょうかね。Legoもそうした方針を尊重しているようで、デフォルトでは有効期限が残り30日にならないと認証局に更新リクエストを送信しない仕様となっているようです。
実はこれに素直に従うとけっこうややこしいことになります。
月ごとに日数が異なったり2月は短かったり閏年があったり・・・ということをしっかり考慮して更新処理をスケジュールしておかないと、更新可能な30日間を取りこぼして期限切れになる可能性があります(後述)。
■定期実行のスケジュールにはcrontabを使う
crontabは指定した「月日時分秒」のパターンで同じ処理を繰り返し実行するようスケジュールできます。
SSL証明書の定期更新というタスクにはまさにうってつけで、ネット上の多くの例でも取り上げられています。
しかし「月日時分秒」でしか指定できないという点がネックとなり、更新可能30日間をすっぽりとスキップしてしまう危険も含んでいます。
例:毎月01日に更新処理をスケジュール
・01月31日が有効期限=更新可能な30日間は01月02日から開始
・01月01日に実行→更新可能期間前なので更新スキップ
・02月01日に実行→有効期限切れ
◇月2回実行
毎月2回実行していれば更新可能な30日間を取りこぼすことは無いでしょう。
しかし実際に更新できるまで少なくとも60日間あるのに2週間足らずのインターバルで無駄撃ちを重ねるのもカッコ悪いなあと思ったり。
更新処理は大した負荷ではないので気にすることはないんでしょうけど、こういうとこ気にしちゃう性格なんとかしたい。
◇その他の方法①
crontabでも工夫すれば「月日時分秒」ではなく「30日ごと」等で更新処理を動かすことも可能だそうです。
crontabのスケジュール自体は「毎日1回」としておき「当日が基準日からの経過日数30日ごとにあたる」場合にのみ更新処理を実行するという条件付けをする方法です。
しかし月2回実行以上に無駄撃ちしまくりですし、crontabの書き方もトリッキーになります。
パッと見て何やってるのか理解しにくいのが難点です。
◇その他の方法②
crontab以外にもタスクをスケジュールできるコマンドがあります。atコマンドです。
しかしatコマンドは「POSIX準拠」なる仕様だそうで、bashを標準シェルとしている多くのLinuxディストリビューションでは扱いにくいとのこと。
Raspberry Pi OSも例に漏れず、atコマンドからbashで書いたスクリプトを実行できない可能性が高いです。
そもそもRaspberry Pi OSにはatコマンドが含まれておらずインストールする必要があります。
また、atコマンド→shを呼び出し→bashを呼び出しという手間が発生し、やはり後々のメンテナンスが面倒なことになりそうです。
■Legoの理解不足だった
先程「デフォルトでは有効期限が残り30日にならないと認証局に更新リクエストを送信しない仕様」と書きました。
そうです、あくまでデフォルトではそういう仕様だというだけでオプションで変更することが出来ます。
勉強不足でこの点を見落としていました。むしろ30日制限は認証局側の制約だと勝手に誤解していました。
「--days xx」とオプション指定すれば残りxx日であれば更新を認証局にリクエストします。
なので、crontabで2ヶ月毎の01日にスケジュールして更新処理で--days 90とオプション指定しておけば、約60日ごとに証明書が更新されるサイクルが組めます。
crontab:隔月01日の03時15分に更新処理を実行する例
15 3 1 */2 * /etc/renew_ssl.sh
/etc/renew_ssl.sh:有効期限の残日数に関わらず強制的に証明書更新する例
いろいろ準備
lego xxxxxxxxx renew --days 90
いろいろ後処理
■まとめ
Legoの利用例はネット上にたくさん情報があるのですが「更新は月1回やっとけばいいっしょ」という論調が多い気がします。
しかしそこに上述のような罠が潜んでいる点まで言及している情報はありませんでした。
まあ私が読み取れていなかっただけって話しですけど・・・。
「30日制限は認証局側の制約」ってどこで誤解したんだろ・・・(´・ω・`)
.
]]><![CDATA[
]]>