certbot (Let’s Encrypt) で 証明書更新の前後に処理をする
背景
TLS証明書にLet's Encrypt のクライアント実装であるcertbotを使用している。
certbotではHTTP-01チャレンジをサポートしている。
証明書を取得したいドメインの80/tcpが利用できれば発行できる。
某サーバーにおいて、普段は80/tcpを使用していないのでファイアーウォールを閉じているが、使用する時だけ80/tcpを許可する。
Let's Encrypt のクライアントとして certbotを使用している。
certbot の pre-hook と post-hook でファイアーウォールを操作する。
なお、証明書更新した後にサービスを再起動するという動作もこれを応用して実現できる。
証明書を更新した際、Nextcloudに通知を送る実装を行う。予めOSの通知をNextcloudに送るが必要。
実装
それぞれスクリプトを書く
sudo vi /etc/letsencrypt/renewal-hooks/pre/ufw.sh
#!/bin/bash
ufw allow 80/tcp
sudo vi /etc/letsencrypt/renewal-hooks/post/ufw.sh
#!/bin/bash
ufw delete allow 80/tcp
sudo vi /etc/letsencrypt/renewal-hooks/deploy/notification_nextcloud.sh
#!/bin/bash
/root/sh/nextcloud_notification.sh "certbot renewed $RENEWED_DOMAINS"
それぞれに実行権限を与える
sudo chmod +x /etc/letsencrypt/renewal-hooks/pre/ufw.sh
sudo chmod +x /etc/letsencrypt/renewal-hooks/post/ufw.sh
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/notification_nextcloud.sh
確認
動作は下記コマンドで確認できる。
sudo certbot renew --dry-run
下記のような出力があれば、ファイアーウォールは開いて閉じるという動作をしている。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Hook 'pre-hook' ran with output:
Rule added
Rule added (v6)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Hook 'post-hook' ran with output:
Rule deleted
Rule deleted (v6)
コメントを残す