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 プラグインがインストール済みであること
まず、現在の証明書管理状況を確認します。
出力例:
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アカウントとの競合エラー
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(ディレクトリ)が生成されていることを確認します。
出力例: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アカウント(既存のものと追加したもの)が存在することを確認します。
出力例:ade138f8ac69ec5a423c2198837a9cf4 ba8e307a22f8afe554b5376c6f89704a
確認ができたら、不要になった作業用ディレクトリを削除します。
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)が追加されていることを確認します。
出力結果に test001.upki.jp と test003.upki.jp の双方が表示されていれば成功です。
4.2. 接続確認
ブラウザ等でアクセスし、HTTPS接続が可能か確認します。
4.3. 更新
この設定により、通常の certbot renew コマンドによる自動更新において、それぞれの証明書が紐づけられた正しいACMEアカウント情報を用いて更新されるようになります。
設定済みのすべての証明書がrenewコマンドによって更新されます。--dry-runオプションによる検証をしておくと安心です。
問題なく完了すれば、以下のメッセージが表示されます。
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アカウントが適切に分離され、安全に証明書の自動更新を行うことが可能です。