2020/11/28

CentOS6のletsencrypt証明書更新自動化がめっちゃ簡単になってた件

このブログのサーバのSSL証明書はletsencryptを使っているのだけど、90日に一回ちまちま手作業で更新していたのだけど、気づいたら5年(20回)も手作業やってて、そろそろ自動化してみるかーと思ってやってみたらめちゃくちゃ簡単になってた。主にCentOS6とかの人にとってだけど。

CentOS6系に必要なSCL

CentOS6系とか古めのRedHat系のLinuxはPythonが2.6系と古く、letsencryptの作業に都合が悪い。そこで SCL という仕組みを使っていたのだけど、実は最近の letsencryptの cert-bot だと、この辺まるっと面倒見てくれるようになっていた。前は自分で scl 打って python あげた環境に入ってから certbot 起動していたのだけど、いまは certbot自身が勝手に SCL 使って必要な Python 入れて更新処理をしてくれる。cronにのっけて SCL をやり繰りする知見が無くて以前は自動化をあきらめていたのだけど、いまなら簡単。

cronはroot

自動化したスクリプトは、rootのcronに仕込む。

4 4  * * 1 update_letsencrypt.sh >> /tmp/update_letsencrypt.log 2>&1

update_letsencrypt.sh

スクリプトはこんな感じ。手で打ってたのを並べるだけ。

cd;

rm -rf certbot;
`which git` -c core.sshCommand="ssh -i /example/path/.ssh/id_rsa -F /dev/null" clone git@github.com:certbot/certbot.git;
cd certbot;
./certbot-auto renew --force-renew --non-interactive;

/sbin/service nginx reconf

cert-botのリポジトリを置くディレクトリは、root専用のところにしないと警告がでるのでそうしておいた方が良い。

git

複数台ある自分のサーバ環境ごとになんか動かねーなと思っていたらgitのパスが違ってたので、whichしてるけど、構築ちゃんとしてたらこれは必要ない。

あと、root実行になってしまうので github にアクセスするための鍵をオプションで明示している。

--non-interactive

cronから実行するような場合は、certbot-auto に --non-interactive オプション付けろって言われるので足した。

nginx再起動

最後にnginxにHUP送って証明書の更新を反映する。

SCL環境が certbot 側でやってもらえるようになって、 CentOS6でも簡単になりましたね。

サイト内検索