2026年7月22日
2026年7月22日
Let’s EncryptのSSL証明書をcertbotで取得する方法|Apache・webroot・自動更新
Let's Encrypt は、無料で SSL/TLS 証明書(サーバー証明書)を発行する認証局です。証明書の申請から Web サーバーへの設定、更新までを自動で行うクライアントとして、EFF(電子フロンティア財団)が開発する certbot が広く使われています。
この記事では、Linux サーバーで certbot を使って証明書を取得し、自動更新を設定するまでを説明します。手順は certbot 公式サイト(certbot.eff.org)と certbot のユーザーガイド、Let's Encrypt の公式ドキュメントで2026年10月時点の内容を確認しています。Nginx を使っている場合はcertbotでNginx用のSSL証明書を設定する方法を参照してください。
始める前に確認すること
- ドメインの DNS がこのサーバーを向いていること(A レコードや AAAA レコード)。
- 外部からポート80(HTTP)に接続できること。通常の方式(HTTP-01)では、Let's Encrypt がポート80でドメインの所有を確認します。ファイアウォールやクラウドのセキュリティグループでポート80と443を開けておきます。
- サーバーで root 権限(sudo)が使えること。
ドメインの確認方法(チャレンジ)
Let's Encrypt は、証明書を申請した人がそのドメインを管理していることを、次のどちらかの方法で確認します。メールによる確認はありません。
| 方式 | 確認のしかた | 向いている場面 |
|---|---|---|
| HTTP-01 | http://ドメイン/.well-known/acme-challenge/ に置かれたファイルを Let's Encrypt が読みに来る |
通常のWebサイト。certbot の --apache・--nginx・--webroot はこの方式 |
| DNS-01 | 指定された値の TXT レコードを _acme-challenge.ドメイン に登録する |
ワイルドカード証明書(*.example.com)、ポート80を開けられないサーバー |
ワイルドカード証明書は DNS-01 でしか取得できません。
手順1: certbot をインストールする
certbot 公式サイトは snap でのインストールを案内しています。
# OSのパッケージで入れたcertbotがあれば先に削除する(Debian / Ubuntu の例)
sudo apt-get remove certbot
# snapでインストールし、certbotコマンドを使えるようにする
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
snap を使わない場合は、ディストリビューションのパッケージでも入れられます。
# Debian / Ubuntu(Apacheで使う場合)
sudo apt update
sudo apt install certbot python3-certbot-apache
RHEL・AlmaLinux・Rocky Linux では、EPEL リポジトリを有効にすると certbot と python3-certbot-apache パッケージを入れられます。ディストリビューションのパッケージは snap 版より certbot のバージョンが古いことがあります。
手順2: 証明書を取得する
Apache の設定まで自動で行う
Apache で ServerName に対象のドメインを書いたバーチャルホストがあれば、次のコマンドで証明書の取得と Apache の設定をまとめて行えます。
sudo certbot --apache -d example.com -d www.example.com
初回は、連絡用メールアドレスの入力と利用規約への同意を求められます。certbot は HTTPS 用のバーチャルホストの設定(Debian / Ubuntu では /etc/apache2/sites-available/ に -le-ssl.conf で終わるファイル)を作り、Apache を再読み込みします。
証明書だけを取得する(webroot 方式)
Web サーバーの設定は自分で書きたい場合や、certbot のプラグインが対応していない構成では、公開ディレクトリにファイルを置く webroot 方式を使います。Web サーバーは止めずに済みます。
sudo certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com
-w には、そのドメインの公開ディレクトリ(ドキュメントルート)を指定します。
取得した証明書のファイル
証明書は /etc/letsencrypt/live/ドメイン名/ に置かれます。
| ファイル | 内容 |
|---|---|
fullchain.pem |
サーバー証明書と中間証明書をまとめたもの。Web サーバーの証明書として指定する |
privkey.pem |
秘密鍵。外部に出さない |
更新のたびに中身が新しくなるため、ファイルをコピーせず、Web サーバーの設定でこのパスを直接指定します。certbot 2.0 以降、新しく作る証明書の鍵は既定で ECDSA(P-256)です。
手順3: 自動更新を確認する
Let's Encrypt の証明書の有効期間は、2026年10月時点で90日です。certbot のパッケージ(snap・apt など)には、定期的に certbot renew を実行する systemd タイマーか cron の設定が含まれているので、自分で cron を書く必要は通常ありません。certbot renew は、有効期限が近い証明書だけを更新します(certbot 4.0 以降は有効期間の残りが3分の1を切ったとき。それより前の版は期限の30日前)。
# 更新のタイマーがあるか確認する
systemctl list-timers | grep certbot
# 本番の証明書を変えずに、更新の手順を試す(テスト用の環境で実行される)
sudo certbot renew --dry-run
--dry-run がエラーなく終われば、自動更新も同じ手順で動きます。
更新後に Web サーバーを再読み込みする
--apache や --nginx で取得した証明書は、更新時に certbot が Web サーバーの再読み込みまで行います。webroot 方式(certonly)で取得した場合は、新しい証明書を読み込ませるために、更新後に再読み込みする「デプロイフック」を設定します。
取得するときに --deploy-hook を付けると、その設定は /etc/letsencrypt/renewal/ のドメインごとの設定ファイルに保存され、以降の自動更新でも使われます。
sudo certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com \
--deploy-hook "systemctl reload apache2"
すでに取得済みの証明書には、/etc/letsencrypt/renewal-hooks/deploy/ に実行可能なスクリプトを置く方法が使えます。このフォルダーのスクリプトは、証明書が更新されたときに実行されます。
# 更新後に Apache を再読み込みするスクリプトを作る
printf '#!/bin/sh\nsystemctl reload apache2\n' | sudo tee /etc/letsencrypt/renewal-hooks/deploy/reload-apache.sh
sudo chmod 755 /etc/letsencrypt/renewal-hooks/deploy/reload-apache.sh
RHEL 系の Apache では apache2 を httpd に置き換えます。
手順4: 証明書の状態を確認する
# 管理している証明書、対象ドメイン、有効期限を表示する
sudo certbot certificates
うまくいかないときは、certbot のログを確認します。
sudo tail -n 100 /var/log/letsencrypt/letsencrypt.log
よくある原因は、DNS がまだこのサーバーを向いていない、ポート80がファイアウォールで閉じている、HTTP から HTTPS へのリダイレクトや Basic認証で /.well-known/acme-challenge/ が読めない、といったものです。
レート制限
Let's Encrypt には発行数の上限があります。2026年10月時点の主なものは次のとおりです。
| 制限 | 上限 |
|---|---|
| 登録ドメインごとの新規証明書 | 7日間で50枚 |
| 同じドメインの組み合わせの証明書 | 7日間で5枚 |
| アカウント・ドメインごとの確認の失敗 | 1時間に5回 |
設定を試すときは、--dry-run や --test-cert(テスト用の環境を使い、ブラウザーでは信頼されない証明書を発行する)を使うと、本番の上限を消費せずに済みます。
有効期間の短縮に備える
Let's Encrypt は、証明書の有効期間を段階的に短くする予定を公表しています。標準の証明書は、2027年2月10日から64日、2028年2月16日から45日になる予定です。certbot の自動更新は有効期間の割合で更新時期を決めるため、そのまま対応できますが、「60日ごとに手動で更新する」といった固定の運用は見直しが必要です。
また、Let's Encrypt は2025年6月に有効期限切れを知らせるメールの送信を終了しています。更新が止まっていないかは、certbot certificates や外部の監視サービスで確認してください。
不要になった証明書を削除する
# 一覧から選んで削除する
sudo certbot delete
# 名前を指定して削除する
sudo certbot delete --cert-name example.com
削除する前に、Web サーバーの設定からその証明書を参照している行を外してください。/etc/letsencrypt/ の中のファイルを手で消すと certbot の管理情報が壊れるため、削除は certbot delete で行います。
まとめ
- Let's Encrypt はポート80(HTTP-01)か DNS の TXT レコード(DNS-01)でドメインの管理を確認する。ワイルドカード証明書は DNS-01 のみ。
- certbot は snap で入れるのが公式の案内。
--apacheなら証明書の取得と Apache の設定をまとめて行える。 - 自動更新はパッケージに含まれるタイマーで動く。
certbot renew --dry-runで確認し、webroot 方式では再読み込みのフックを付ける。 - 有効期間は今後64日、45日へ短くなる予定。手動更新の運用は見直す。
WordPress サイトを HTTPS に切り替える手順全体はLet's EncryptでWordPressをSSL化する手順、HTTP からのリダイレクトはWordPressのHTTPからHTTPSへの301リダイレクト設定で説明しています。