Certbot とは?
certbot とは Let's Encrypt(レッツ・エンクリプト) と呼ばれる認証局から無料で SSL 認証書を発行が出来るツールです。
Apache などの Web サーバの設定まで行ってくれます。
certbot パッケージは、デフォルトではパッケージ マネージャーから利用できません。 Certbot をインストールするには、EPEL リポジトリを有効にする必要があります。
Apache で HTTPS で利用
Apache で HTTPS を利用するには、SSL モジュールをインストールして利用します。
sudo dnf install mod_ssl
# apache の再起動
sudo systemctl restart httpd
certbot のインストール
python3-certbot-apache は、Certbot を Apache と統合するプラグインです。証明書の取得や Apache の HTTPS の設定がコマンド1つで自動化できます。
EPEL リポジトリの追加と、certbot のインストール
# EPEL リポジトリの追加
sudo dnf install epel-release
# Apache の場合
sudo dnf install certbot python3-certbot-apache
# Nginx の場合
sudo dnf install python3-certbot-nginx -y
証明書のインストール
「 example.com 」の部分は、自分のサイトのドメイン名に置き換えます。
sudo certbot --apache -d example.com
Let's Encrypt SSL証明書の更新
証明書の有効期限は三か月のため、期限が来る前に更新作業を忘れず行います。
次のコマンドを実行した場合、更新期限が残りが30日未満の場合のみ更新されます。
更新期限が残りが30日未満の場合のみ更新
sudo certbot renew
すぐに証明書を更新したい場合は次のようにします。
すぐに証明書を更新
sudo certbot renew --force-renew
cron で定期的に証明書を更新
cron に証明書の更新を定期的に実行するコマンドを設定します。
証明書の更新 systemctl も利用するため root 権限が必要ですので、root ユーザーの cron に設定します。
cron で定期的に証明書を更新
crontab -u root -e
# 以下もほぼ同様
sudo crontab -e
証明書の更新と Apache も再起動するコマンドを設定します。
毎日 3:00 に実行されますが、SSL 証明書の有効期限が30日未満の場合のみ更新されます。
設定ファイルに以下を追記します。
cron で定期的に証明書を更新
0 3 * * * certbot renew && systemctl restart httpd
設定を確認したい場合は、以下のコマンドを実行します。
sudo crontab -l
再発行・再インストールしようとした場合の表示
すでに有効な Let's Encrypt 証明書が存在していて、それを再発行・再インストールしようとした場合に表示されます。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Certificate not yet due for renewal
You have an existing certificate that has exactly the same domains or certificate name you requested and isn't close to expiry.
(ref: /etc/letsencrypt/renewal/example.com.conf)
What would you like to do?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Attempt to reinstall this existing certificate
2: Renew & replace the certificate (may be subject to CA rate limits)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
** Invalid input **
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Renewing an existing certificate for example.com
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2025-10-10.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for example.com to /etc/httpd/conf.d/example-le-ssl.conf
Your existing certificate has been successfully renewed, and the new certificate has been installed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
デバッグログを /var/log/letsencrypt/letsencrypt.log に保存しています
証明書の更新期限はまだ切れていません
リクエストしたドメインまたは証明書名と全く同じ、有効期限が近い既存の証明書があります。
(参照: /etc/letsencrypt/renewal/example.com.conf)
どうしますか?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: 既存の証明書の再インストールを試みます
2: 証明書を更新して置き換えます(CA のレート制限の対象となる場合があります)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
該当する番号 [1-2] を選択し、[Enter] キーを押します(キャンセルするには [c] キーを押します):
** 入力が無効です **
該当する番号 [1-2] を選択し、[Enter] キーを押します(キャンセルするには [c] キーを押します): 2
example.com の既存の証明書を更新しています
証明書を正常に受信しました。
証明書は次の場所に保存されています: /etc/letsencrypt/live/example.com/fullchain.pem
鍵は次の場所に保存されています: /etc/letsencrypt/live/example.com/privkey.pem
この証明書の有効期限は2025年10月10日です。
これらのファイルは、証明書の更新時に更新されます。
Certbot は、この証明書をバックグラウンドで自動的に更新するためのスケジュールタスクを設定しました。
証明書のデプロイ中
example.com の証明書が /etc/httpd/conf.d/example-le-ssl.conf に正常にデプロイされました。
既存の証明書が正常に更新され、新しい証明書がインストールされました。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Certbot を気に入っていただけましたら、以下の方法で私たちの活動へのご支援をお願いいたします。
* ISRG / Let's Encrypt への寄付: https://letsencrypt.org/donate
* EFF への寄付: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2: Renew & replace the certificate (may be subject to CA rate limits)を繰り返し行うと制限がかかり一定期間、発行することができなくなります。
/etc/letsencrypt ディレクトリ
ディレクトリ | 内容 |
---|---|
/etc/letsencrypt | Certbot が証明書や関連情報を保存するベースとなるディレクトリ |
/etc/letsencrypt/accounts | Certbot のアカウント情報(Let's Encrypt への登録情報など)が保存されます |
/etc/letsencrypt/live | 証明書の実体がシンボリックリンクとして配置される場所です。各ドメインごとにサブディレクトリが作成され、その中に fullchain.pem (証明書チェーン), privkey.pem (秘密鍵), chain.pem (中間証明書), cert.pem (公開鍵) などが含まれます。 |
/etc/letsencrypt/archive | 過去の証明書の実体が保存される場所です。証明書を更新するたびに新しいファイルが作成され、連番が振られます。 |
/etc/letsencrypt/renewal | 証明書の更新設定ファイルが保存されます。ドメイン名に対応する`.conf`ファイルがあり、更新時に参照されます。 |
/etc/letsencrypt/renewal-hooks | 証明書の更新前、更新後、または更新成功時に実行されるスクリプトを配置する場所です。これにより、証明書更新時に他の処理を自動化できます。 |
証明書の保存場所
example.com というドメインで証明書を取得した場合は、以下の表の場所に配置されます。
証明書ファイル | パス |
---|---|
fullchain.pem | /etc/letsencrypt/live/example.com/fullchain.pem |
privkey.pem | /etc/letsencrypt/live/example.com/privkey.pem |
Let's Encrypt の証明書のバックアップ
Let's Encrypt の証明書のバックアップするには、以下のディレクトリを丸ごとコピーします。
/etc/letsencrypt/
tarでバックアップするには、以下のコマンドを実行します。
sudo tar -czvf letsencrypt-backup-$(date +%F).tar.gz /etc/letsencrypt/
バックアップを復元方法するには、以下のコマンドを実行します。作成済みの letsencrypt のバックアップファイル(.tar.gz)を ルートディレクトリ / に展開(復元)します。
sudo tar -xzvf letsencrypt-backup-YYYY-MM-DD.tar.gz -C /