Linux上でのLet’s Encrypt 無料SSL証明書の取得・更新自動化スクリプト

– 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 で更新でき、cronsystemd.timer で自動化可能
  • --post-hook を使えば、証明書更新後にWebサーバーを自動リロードできる

SSL証明書の更新忘れはサイト停止の大きなリスクになります。
ぜひこの記事を参考に、自動更新を仕組み化しておきましょう。

タイトルとURLをコピーしました