
私は、サブジェクト代替名 (SAN) を使用して複数のドメインをホストしている Web サーバー上で、EFF certbot ACME クライアントを使用して単一の TLS 証明書を生成しています。これまで、すべてのドメインは特定の Digital Ocean チームでホストされていましたが、そのチーム用に作成された Digital Ocean DNS プラグインと個人アクセス トークンを使用して certbot を設定し、複数のドメイン (ワイルドカード ドメインを含む) で証明書を生成しています。
現在、クライアントは、完全な制御を維持したいドメインも私に提供してほしいと望んでいるため、新しい Digital Ocean チームを作成し、DO 個人アクセス トークンが作成された私のアカウントにアクセス権が付与されました。残念ながら、個人アクセス トークンはチーム用に作成され、別のチームでは使用できないこともわかりました。
certbot のドキュメントを確認しましたが、同じ SAN 証明書に対して異なるドメインに異なる DO 資格情報を構成する方法が見つかりませんでした。これは可能なのでしょうか?
そうでない場合、このユースケースを実装するための他の代替案は何ですか?
答え1
これは組み込みの認証プラグインではサポートされていないようですが、「手動フック」を使用してチャレンジをスクリプト化し、検証対象のドメインごとに検証トークンを生成する最適な方法を選択することで解決できます。
それぞれに個人アクセス トークンがあることを前提として、複数の Digital Ocean チーム/ユーザーのドメインの検証をサポートする手動フック スクリプトを作成しました。スクリプトはここから入手できます: https://gist.github.com/guss77/01f095623a1d2fd00869784554d3e1a5。
これを使用するには、Digital Ocean CLI ツールがどこかにインストールされていることを確認しdoctl
(スクリプト内で設定する)、スクリプト内で個人アクセス トークンも設定します (スクリプトには、dig
どこにでもあると思われる一般的な POSIX シェル ツールもいくつか必要ですが、Linux 以外ではうまく動作しない可能性があります)。
次に、いずれかのプラグインを使用する代わりに--dns*
、以下を使用します。
--preferred-challenges=dns --manual \
--manual-auth-hook /path/to/certbot-hook.sh \
--manual-cleanup-hook /path/to/certbot-hook.sh
認証を試行すると、certbot はこのスクリプトを呼び出して、検証する各ドメインの DNS レコードを作成します。スクリプトは、doctl
各個人アクセス トークンを使用して利用可能なドメインのリストをスキャンし、レコードを作成する正しい「ゾーン」を選択した後、ツールを使用します。
ただし、このアプローチでは、特に DNS 伝播時間に関して問題が発生することがあります。certbot は、DNS プラグインのカスタム DNS 伝播待機タイムアウトをサポートしていますが、手動モードではサポートしておらず、それ以外の場合はそれを模倣する良い方法がありません。
答え2
異なる設定ファイルを指定するだけでこれが実現できると思います。
によるとcertbot-dns-digitalocean
プラグインのドキュメント資格情報は ini ファイルで提供されます:
--dns-digitalocean-credentials
DigitalOcean 資格情報 INI ファイル。(必須)
ini ファイルに次のような内容が含まれます:
dns_digitalocean_token = 0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff
異なる資格情報ごとに異なるファイルを作成すると、これらの異なるファイルを指定して、プラグインが異なる資格情報を使用するようにすることができます。
例えば、
certbot certonly \
--dns-digitalocean \
--dns-digitalocean-credentials ~/.secrets/certbot/digitalocean-foo.ini \
-d domain1.example
そして
certbot certonly \
--dns-digitalocean \
--dns-digitalocean-credentials ~/.secrets/certbot/digitalocean-bar.ini \
-d domain2.example
2 つの別々のファイルからの資格情報を使用します。