ACME(証明書の自動更新)手順書

Certbot インストール&設定ガイド(FujiSSL ACME)

2025年10月14日

対象:Linux(Ubuntu/Debian、RHEL/CentOS、Amazon Linux)、macOS、WSL(Windows)。Apache / NGINX / スタンドアロン / DNS-01 に対応。

前提:管理ツールで ACME 情報を取得
契約一覧のコマンドから次の4項目を控えておきます:
ACME サーバURLドメイン(FQDN)EAB KIDEAB HMAC Key
EAB KID / EAB HMAC Key は機密。公開リポジトリやブログ、資料への記載は禁止。

1. Certbot のインストール

Ubuntu 20.04/22.04/24.04(apt)

sudo apt update
sudo apt install -y certbot python3-certbot-apache python3-certbot-nginx
# Apache 利用時(必要な方のみ):
# sudo apt install -y python3-certbot-apache
# NGINX 利用時(必要な方のみ):
# sudo apt install -y python3-certbot-nginx

RHEL 8/9、CentOS Stream(dnf + EPEL)

sudo dnf install -y epel-release
sudo dnf install -y certbot python3-certbot-apache python3-certbot-nginx

Amazon Linux 2/2023(dnf / yum)

# 2023:
sudo dnf install -y certbot
# 2:
sudo yum install -y certbot
# ウェブサーバ連携プラグインは環境により提供状況が異なります。未提供なら「--standalone」や DNS-01 を利用してください。

macOS(Homebrew)

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install certbot

Windows(WSL 経由)

# WSL で Ubuntu を導入後、Ubuntu 手順(apt)を実施
wsl --install -d Ubuntu
# 再起動→Ubuntu 起動→「Ubuntu(apt)」の手順へ
補足:snap/pipx/Docker でもOK
最新版が必要な場合は snappipx、コンテナでの実行も可能です。サーバ標準のパッケージで問題なければ上記で十分です。

2. FujiSSL ACME へのアカウント登録(EAB)

取得済みの EAB 情報を使って Certbot アカウントを作成します。

certbot register \
  --server 管理画面で取得したACMEサーバURL \
  --eab-kid <EAB_KID> \
  --eab-hmac-key <EAB_HMAC_KEY> \
  -m admin@example.com \
  --agree-tos --no-eff-email
注意:EAB は厳重に保護
EAB KID / EAB HMAC Key を環境変数やCIに平文で置かないでください。どうしてもスクリプト化する場合は root 限定の権限(600)で専用ファイルに保存し、アクセス制御を徹底してください。

3. 証明書の発行(HTTP-01 / DNS-01)

Apache に自動組み込み(HTTP-01)

sudo certbot --apache \
  --server 管理画面で取得したACMEサーバURL \
  -d example.com -d www.example.com

NGINX に自動組み込み(HTTP-01)

sudo certbot --nginx \
  --server 管理画面で取得したACMEサーバURL \
  -d example.com -d www.example.com

ウェブサーバ停止が可能な場合(standalone, HTTP-01)

# 80番ポートを certbot が一時占有
sudo systemctl stop apache2 nginx || true
sudo certbot certonly --standalone \
  --preferred-challenges http \
  --server 管理画面で取得したACMEサーバURL \
  -d example.com
sudo systemctl start apache2 nginx || true

ワイルドカード対応やCDN越しの環境(DNS-01)

一旦「手動DNS-01」で例示。運用はDNSプラグインの利用を推奨します。

certbot certonly \
  --manual --preferred-challenges dns \
  --server 管理画面で取得したACMEサーバURL \
  -d example.com -d *.example.com \
  -m admin@example.com --agree-tos --no-eff-email \
  --manual-public-ip-logging-ok
DNS プラグイン例(自動化)

  • Route53: python3-certbot-dns-route53 を導入し、IAM 権限つきプロファイルで実行
  • Cloudflare: python3-certbot-dns-cloudflare~/.secrets/cf.ini0600
# Cloudflare 例
sudo apt install -y python3-certbot-dns-cloudflare
cat > ~/.secrets/cf.ini <<'EOF'
dns_cloudflare_api_token = <CF_API_TOKEN>
EOF
chmod 600 ~/.secrets/cf.ini

certbot certonly \
  --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/cf.ini \
  --server 管理画面で取得したACMEサーバURL \
  -d example.com -d *.example.com

4. 取得ファイルの場所

/etc/letsencrypt/live/<FQDN>/ に配置されます。

  • fullchain.pem(サーバ証明書 + 中間証明書)
  • privkey.pem(秘密鍵)

Apache/NGINX を自動設定した場合は、仮想ホスト設定も同時更新されます。

5. 自動更新(renew)

Certbot は 30 日以内に失効する証明書を自動更新します。

シンプルな cron 例

sudo crontab -e
# 毎日 03:15 に更新チェック。成功時はサービスをリロード
15 3 * * * certbot renew --server 管理画面で取得したACMEサーバURL --deploy-hook "systemctl reload nginx || systemctl reload apache2"

systemd タイマー確認

systemctl list-timers | grep -i certbot
journalctl -u certbot.service -n 200 --no-pager

6. セキュリティとネットワーク

  • EAB・APIトークンは 600 / root:root。リポジトリや共有に置かない。
  • HTTP-01 は 80/TCP、HTTPS は 443/TCP を開放。
  • SELinux 有効環境では httpd_can_network_connect や httpd_can_network_connect_db などの Booleans を確認。

7. トラブルシュート(要点)

  • HTTP-01: 失敗 → 80番が外部到達できるか / リバースプロキシ越しのパス書き換え / ACME 挑戦位置(/.well-known/acme-challenge/)が上書きされていないか。
  • DNS-01: 失敗 → TXT が即時伝播していない / 値の末尾の引用符や空白ミス / サブドメインのゾーン委任。
  • 権限エラー/etc/letsencrypt/ の所有者/権限、Web設定の読み込み権限を再確認。
  • 複数バーチャルホスト → 指定 FQDN が正しい vhost にマッピングされているか、-d を網羅しているか。
# 詳細ログ
sudo certbot -v ...   # または --debug-challenges で検証

8. 次のステップ

  • 運用ではDNS-01 の自動化(APIトークン最小権限+0600)を推奨。
  • 証明書配布先(ロードバランサ、アプリGW、メールサーバ等)へのデプロイフックを整備。
  • 監視に有効期限チェックを追加(Nagios/Icinga/cron + OpenSSL など)。

よく読まれている質問