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リダイレクト設定で説明しています。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲