【Ubuntu 24.04対応】Let’s Encrypt証明書を自動更新する設定

letsencrypt_ssl_logo Linux
letsencrypt_ssl_logo

Certbotを利用してSSL証明書を発行して自動更新を有効にして、nginxを再起動する方法

Ubuntuでnginxを使ってWebサーバーを構築していて、SSL証明書を利用したいです。

SSL証明書は無料のLet’s EncryptのSSL証明書を利用してCertbotで導入するのが一般的です。
CebotではSSL証明書の再発行は自動でできますが、nginxを再起動しないと、新しい証明書が反映されません。この記事では以下の内容をわかりやすく解説します。

  • Snapのインストール方法とaptとの違い
  • Certbotを使ったSSL証明書の発行(例:example.com)
  • 証明書の自動更新設定とnginxの自動リロード

Snapのインストールとaptとの違い

Cebotは、aptコマンドやsnapコマンドでインストールできます。以前はRHEL系のサーバでWEBサーバを運営していたので、snapコマンドは利用する機会がなかったのでこの機会は簡単に説明します

Snap は Ubuntu公式が提供するパッケージ管理の新しい形式で、アプリケーションとその依存関係を一つのコンテナにまとめて配布・管理できる仕組みです。

【aptとsnapの違い】

項目aptsnap
管理方式OSのパッケージ管理と連携独立したランタイム環境
アップデートシステム全体と一体管理アプリごとに自動更新あり
配布単位OS向けパッケージ(deb)サンドボックス化されたアプリ(snap)
Certbotのバージョン古いことが多い最新安定版を自動更新

CertbotのようなSSL証明書ツールは常に最新版が望ましいため、snap版の使用が推奨されています。

Snapのインストール(Ubuntu 24.04)

Ubuntu 24.04には通常、snapdはすでにインストール済みですが、ない場合は以下で導入します

$ sudo apt update
$ sudo apt install snapd

snapdサービスが有効になっていることを確認します

$ sudo systemctl enable --now snapd

Certbotのインストール(snap版)

apt版が入っている場合は削除します。

$ sudo apt remove certbot

SnapでCertbotをインストールします

$ sudo snap install core; sudo snap refresh core
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

新規に「example.com 」のSSL証明書を発行する

新規にSSL証明書を発行します。ドメイン及びWEBルートは以下です

  • ドメイン:example.com
  • Webルート:/var/www/vhosts/example.com/html

設定ファイルは以下のような設定です

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/vhosts/example.com/html;

    location /.well-known/acme-challenge/ {
        allow all;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

certbotコマンドで証明書の発行します

# 証明書を発行します
$ sudo certbot certonly --webroot -w /var/www/vhosts/example.com/html -d example.com -d www.example.com

# 発行される以下のファイルが生成されています
/etc/letsencrypt/live/example.com/fullchain.pem
/etc/letsencrypt/live/example.com/privkey.pem

自動更新タイマーの確認

Snap版Certbotは、systemdのタイマーで自動的に更新が行われます。Cronで「certbot renew」は不要です。

下記のコマンドで確認できます。snap.certbot.renew.timer が表示されればOKです。

$ systemctl list-timers | grep certbot
Tue 2025-07-22 23:46:00 JST      10h -                                      - snap.certbot.renew.timer       snap.certbot.renew.service

証明書更新時にnginxを自動リロードする設定

Certbotには、証明書更新後にスクリプトを自動実行できる仕組みがありますので利用します

「/etc/letsencrypt/renewal-hooks/deploy」のディレクトリにnginxを再起動するスクリプトを作成して配置します

# [/etc/letsencrypt/renewal-hooks/deploy]のディレクトリを作成します
$ sudo mkdir -p /etc/letsencrypt/renewal-hooks/deploy

# nginxを再起動するスクリプトを作成します
$ sudo vim /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
#!/bin/bash
echo "Reloading Nginx after cert renewal..."
systemctl reload nginx

作成したスクリプトに実行権を付与します

$ sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

このスクリプトが実行されるタイミングは、実際に証明書が更新されたとき のみ 実行されます。確認するには証明書を更新するしか確認できません。「–dry-run」では発行できないので注意が必要です

nginxが再起動するかの確認するに証明書を更新するしか方法があります。また期限切れ (30日未満) が近い場合は「certbot renew」で更新されます。証明書の有効期限に関係なく更新する場合は「certbot –force-renewal」を実行すると有効期限に関係なく更新が実行されます。

# 証明書の期限が30日未満の場合は下記
$ sudo certbot renew

# 有効期限に関係なく証明書を更新(1週間に5回までの制限あり)
$ sudo certbot renew --force-renewal

ログファイルやWEBページで証明書が更新されているかを確認します

スポンサーリンク
スポンサーリンク
スポンサーリンク
スポンサーリンク
LinuxUbuntu
スポンサーリンク
adminをフォローする

コメント

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