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の違い】
項目 | apt | snap |
---|---|---|
管理方式 | 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ページで証明書が更新されているかを確認します
コメント