– Certbot 導入、証明書取得、cron または systemd タイマーでの更新設定
はじめに
Webサイトを安全に公開するために欠かせないのが SSL/TLS証明書 です。
有料の証明書を購入する方法もありますが、無料で利用できる Let’s Encrypt が広く普及しています。
この記事では、Linuxサーバー上で Certbot を使って証明書を取得し、さらに 自動更新(cronまたはsystemd) を設定する手順を解説します。
1. Certbotのインストール
Ubuntu / Debian 系
sudo apt update
sudo apt install -y certbot python3-certbot-apache # Apache用
# または
sudo apt install -y certbot python3-certbot-nginx # Nginx用
CentOS / Rocky Linux / AlmaLinux
EPELリポジトリを有効化してインストールします。
sudo dnf install -y epel-release
sudo dnf install -y certbot python3-certbot-nginx
2. 証明書の取得
Apache の場合
sudo certbot --apache -d example.com -d www.example.com
Nginx の場合
sudo certbot --nginx -d example.com -d www.example.com
Webサーバー以外(独自アプリケーションやプロキシ)の場合
Webrootプラグインを利用します。
sudo certbot certonly --webroot -w /var/www/html -d example.com
インタラクティブに進めると、証明書が /etc/letsencrypt/live/example.com/
に配置されます。
3. 証明書更新のテスト
Let’s Encrypt の証明書は 90日間有効 です。
更新テストは以下で実行可能です。
sudo certbot renew --dry-run
エラーがなければ自動更新の設定に進みます。
4. 自動更新設定
cron を使う場合
毎日2回、更新処理を試みるジョブを追加します。
sudo crontab -e
以下を追加:
0 3,15 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"
--quiet
: メッセージ非表示--post-hook
: 更新された場合にWebサーバーを再読み込み
systemd タイマーを使う場合(推奨)
Certbot はデフォルトで systemd タイマーを同梱しています。
有効化するだけでOKです。
sudo systemctl enable --now certbot.timer
sudo systemctl list-timers | grep certbot
これにより、1日2回自動的に更新チェックが行われます。
5. シェルスクリプト化(任意)
複数ドメインや特殊な環境では、更新処理をスクリプトにまとめると便利です。
例:/usr/local/bin/renew_ssl.sh
#!/bin/bash
/usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"
実行権限を付与:
sudo chmod +x /usr/local/bin/renew_ssl.sh
cron で呼び出せば管理がシンプルになります。
まとめ
- Certbot を導入すれば、Let’s EncryptのSSL証明書を無料で取得可能
certbot renew
で更新でき、cron か systemd.timer で自動化可能--post-hook
を使えば、証明書更新後にWebサーバーを自動リロードできる
SSL証明書の更新忘れはサイト停止の大きなリスクになります。
ぜひこの記事を参考に、自動更新を仕組み化しておきましょう。