コンテンツにスキップ

Certbotにおける複数EAB Credentialの併用管理(上級編)

本ページは上級編です

Certbotの基本的なインストール・初回設定がまだの方は、先に Certbot 設定ガイド(基本編) を参照してください。

本手順書は、CertbotにおいてすでにEAB (External Account Binding) Credentialを用いてACMEアカウント登録済み、かつ証明書運用中の環境において、別のEAB Credentialを用いた新しいACMEアカウントを追加登録し、証明書を発行する方法について解説します。

UPKIでは1つのEAB Credentialでマルチドメイン証明書(複数FQDN指定)の発行も可能ですが、管理単位や部署ごとに異なるEAB Credentialが払い出されるケースがあります。このような場合、1台のサーバで複数のEAB Credentialに紐づいたACMEアカウントを使い分ける必要が生じます。本手順書はそのような環境を想定しています。

通常の register コマンドでは重複エラーとなるため、一時ディレクトリを使用した回避策を用います。

1. 前提環境と現状確認

本手順では、以下の環境を前提としています。

  • Webサーバ: Nginx(自動設定済み)
  • 既存の証明書: test001.upki.jp が発行済みであること
  • ACMEクライアント: certbot と python3-certbot-nginx プラグインがインストール済みであること

まず、現在の証明書管理状況を確認します。

sudo certbot certificates

出力例:

Found the following certs:
  Certificate Name: test001.upki.jp
    Serial Number: 4dca7402072b9d663e9c40a01b90b30e
    Key Type: RSA
    Domains: test001.upki.jp
    Expiry Date: 2026-09-05 13:12:05+00:00 (VALID: 88 days)
    Certificate Path: /etc/letsencrypt/live/test001.upki.jp/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/test001.upki.jp/privkey.pem

test001.upki.jp のみが登録されていることが確認できます。

2. 課題:通常手順での追加登録エラー

既存のACMEアカウントがある状態で、単純に certbot register コマンドを実行して新しいEAB Credentialを登録しようとすると、以下のようなエラーが発生し、登録できません。

既存ACMEアカウントとの競合エラー

There is an existing account; registration of a duplicate account with this command is currently unsupported.

3. 手順:新規ACMEアカウントの追加と証明書発行

この問題を解決するため、作業用の一時ディレクトリを作成してACMEアカウント情報を生成し、それを本番環境へ手動でマージする手法をとります。

3.1. 一時ディレクトリでのACMEアカウント登録

既存環境(/etc/letsencrypt)に影響を与えないよう、一時的な設定ディレクトリ(temp-conf)を作成し、そこでACMEアカウント登録を行います。

Credentialの取り扱いに注意

--eab-hmac-key に指定した値はシェルのコマンド履歴に残ります。 作業完了後は history -c 等でコマンド履歴を削除することを推奨します。

# 作業ディレクトリ作成
mkdir temp-conf

# 作業ディレクトリを指定してACMEアカウント作成
sudo certbot register \
  --config-dir ./temp-conf \
  --work-dir ./temp-conf \
  --logs-dir ./temp-conf \
  --server https://secomtrust-acme.com/acme/ \
  --eab-kid <新しいKID> \
  --eab-hmac-key <新しいHMACキー>

実行後、メールアドレス登録(--email)や利用規約への同意(--agree-tos)を対話形式で求められます。プロンプトに従って入力してください。成功すると Account registered. と表示されます。

3.2. 生成されたACMEアカウントの確認

一時ディレクトリ内に新しいACMEアカウントID(ディレクトリ)が生成されていることを確認します。

ls ./temp-conf/accounts/secomtrust-acme.com/acme/
出力例: ade138f8ac69ec5a423c2198837a9cf4

3.3. 本番環境へのACMEアカウント移行

生成されたACMEアカウントディレクトリを、システムの本番用ディレクトリへコピーします。

sudo cp -r \
  ./temp-conf/accounts/secomtrust-acme.com/acme/ade138f8ac69ec5a423c2198837a9cf4 \
  /etc/letsencrypt/accounts/secomtrust-acme.com/acme/

コピー後、本番ディレクトリに2つのACMEアカウント(既存のものと追加したもの)が存在することを確認します。

sudo ls /etc/letsencrypt/accounts/secomtrust-acme.com/acme/
出力例: ade138f8ac69ec5a423c2198837a9cf4 ba8e307a22f8afe554b5376c6f89704a

確認ができたら、不要になった作業用ディレクトリを削除します。

rm -rf temp-conf

3.4. 新規証明書の発行(ACMEアカウント指定)

--account オプションによる新しいACMEアカウントIDを明示的に指定して、証明書の発行とNginxへの自動設定を行います。

ACMEアカウントIDの明示的な指定

ここで --account オプションを使い、先ほどコピーしたディレクトリ名(ID)を指定することが必須です。指定しない場合、既存のACMEアカウントが優先されてしまう可能性があります。

sudo certbot \
  --server https://secomtrust-acme.com/acme/ \
  --account ade138f8ac69ec5a423c2198837a9cf4 \
  -d test003.upki.jp \
  --key-type rsa \
  --nginx

4. 動作確認

4.1. 証明書リストの確認

コマンドを実行し、新しいドメイン(test003.upki.jp)が追加されていることを確認します。

sudo certbot certificates

出力結果に test001.upki.jptest003.upki.jp の双方が表示されていれば成功です。

4.2. 接続確認

ブラウザ等でアクセスし、HTTPS接続が可能か確認します。

4.3. 更新

この設定により、通常の certbot renew コマンドによる自動更新において、それぞれの証明書が紐づけられた正しいACMEアカウント情報を用いて更新されるようになります。

設定済みのすべての証明書がrenewコマンドによって更新されます。--dry-runオプションによる検証をしておくと安心です。

sudo certbot renew --dry-run --server https://secomtrust-acme.com/acme/

問題なく完了すれば、以下のメッセージが表示されます。

Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/test001.upki.jp/fullchain.pem (success)
  /etc/letsencrypt/live/test003.upki.jp/fullchain.pem (success)

5. まとめ

本手順により、双方の証明書がCertbotの管理下に入りました。 これにより、複数のEAB Credentialを用いたACMEアカウントが適切に分離され、安全に証明書の自動更新を行うことが可能です。