win-acme でDNS-01 を利用して証明書を作成、更新する

Master Mole
質問: DNSでのwin-acmeの証明書の自動更新
win-acmeの証明書作成&更新ですが、デフォルトではHTTP-01方式で、win-acmeのSelfHostingが.well-knownに自動応答して検証していますが、 今回、リバースプロキシを経由しているため、Let’s Encrypt からの HTTP-01 検証リクエストが win-acme の SelfHosting に届かないため、SelfHostingが利用できません。 調べたところ、DNS-01方式と言うものがあり、win-acmeがDNSサービスのAPIを呼び出してDNSレコードに検証用の値を登録する方法があると聞きました。 どのように設定するか教えてください。

事前準備

win-amceのダウンロード

win-acmeをサイト(https://www.win-acme.com/)からダウンロードします。
この時、"plugin support"のバージョン(win-acme.v2.x.x.xxxx.x64.pluggable.zip)をダウンロードします。
ダウンロードしたZIPファイルを展開して配置します。

プラグインのダウンロード

DNSサーバーに対応したプラグインをダウンロードします。今回は、Azure DNSを利用しますので、Azure DNS用のプログインをダウンロードします。
ダウンロードは(https://github.com/win-acme/win-acme/releases/)のページからできます。
ダウンロードしたZIPファイルを展開して、win-acmeと同じディレクトリに配置します。

win-acme でDNS-01 を利用して証明書を作成、更新する:画像1

Azure 設定手順

Azure アプリケーションの登録

Azureポータルの画面で、Microsoft Entra IDの設定画面を開きます。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像2

左側のメニューの[アプリの登録]の高j目をクリックします。下図の画面に切り替わります。右側のエリアの[新規登録]のボタンをクリックします。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像3

アプリケーションの登録画面に切り替わりますので、アプリケーション名を入力して、新しいアプリケーションを登録します。 サポートされているアカウントの種類は[シングルテナントのみ]とします。リダイレクトURIは設定しないです。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像4

アプリの登録画面が表示され、アプリケーションが登録できました。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像5

アプリケーションのシークレットキーの発行

アプリケーションの項目をクリックし、アプリケーションの詳細画面を表示します。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像6

左側のメニューの[証明書とシークレット]の項目をクリックします。右側のエリアの[クライアント シークレット]のタブをクリックします。 下図の画面に切り替わります。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像7

[新しいクライアント シークレット]のボタンをクリックします。右側にスライドインダイアログが表示されます。[名前]のテキストボックスに クライアントシークレットの識別名(何でもよい)を入力し、有効期限を選択し、ダイアログ下部の[追加]ボタンをクリックします。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像8

新しいクライアントシークレットが作成されます。作成された直後のみ、クライアントシークレットの値が表示されます。 クライアントシークレットの値を控えておきます。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像9

ロールの割り当て

作成したアプリケーションがDNSのレコードを変更できるよう権限を割り当てます。

アプリケーションが操作するDNSドメインがあるAzure DNSのドメインの設定画面を開きます。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像10

左側のメニューの[アクセス制御 (IAM)]の項目をクリックします。下図の画面に切り替わります。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像11

右側のエリアの上部の[ロールの割り当て]タブをクリックします。下図の画面に切り替わります。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像12

[追加]ボタンをクリックし、ドロップダウンメニューの[ロールの割り当ての追加]の項目をクリックします。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像13

下図の[ロールの割り当ての追加]画面が表示されます。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像14

検索ボックスに"DNS"と入力します。ロールの項目が絞り込まれますので、[DNS ゾーンの共同作成者]のロールをクリックして選択します。 選択後画面下部の[次へ]ボタンをクリックします。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像15

[アクセスの割当先]を[ユーザー、グループ、またはサービス プリンシパル]のラジオボタンにチェックをして、[メンバーを選択する]のボタンをクリックします。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像16

右側にスライドインダイアログが表示されますので、先ほど作成したアプリケーションをクリックして選択します。ダイアログ下部の[選択]ボタンをクリックします。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像17

ページ下部の[次へ]ボタンをクリックします。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像18

[レビューと割り当て]ボタンをクリックしてロールを追加します。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像19

以上でロールの追加ができました。

SSL証明書の作成

SSL証明書を作成します。キーの設定等ありますので、対話的な操作ではなくコマンドで確実に実行する方法を利用します。

次のコマンドをPowerShellで実行します。

cd (win-acmeの配置ディレクトリ)\win-acme.v2.2.9.1701.x64.pluggable
.\wacs.exe `
  --verbose `
  --source iis `
  --host (更新するホスト名) `
  --validationmode dns-01 `
  --validation azure `
  --azuretenantid "<Tenant ID>" `
  --azureclientid "<Application / Client ID>" `
  --azuresecret "<Client Secret の値>" `
  --azuresubscriptionid "<Subscription ID>" `
  --azureresourcegroupname "<Azureリソースグループ名>" `
  --azurehostedzone "<変更する Azure DNSのドメイン名>" `
  --store certificatestore `
  --installation iis

更新するホスト名

(更新するホスト名) は "hostname.ipentec.net" などのホスト名を入力します。

Tenant ID

テナントIDを入力します。Entra ID の画面の[テナント ID]に表示されている値を入力します。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像20

Application / Client ID

先に作成したアプリケーションのIDを入力します。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像21

Client Secret の値

先に作成したアプリケーションのクライアントシークレットの値を入力します。

Subscription ID

変更するAzure DNSのDNSゾーンの[サブスクリプション ID]で確認できます。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像22

Azureリソースグループ名

リソースグループ名を入力します。変更するAzure DNSのDNSゾーンの[リソース グループ]で確認できます。
win-acme でDNS-01 を利用して証明書を作成、更新する:画像23

変更する Azure DNSのDNSゾーン名

変更するAzure DNSのDNSゾーン名を入力します。


コマンドを実行すると、証明書の取得とIISへの設定が実行されます。

補足:IISの設定

Master Mole
質問: IISのサイトの設定は?
IISのサイトの設定が無いのですが、大丈夫なのでしょうか?

--source iis がコマンドに設定されている場合、バインドのホスト名をもとにサイトを自動判定しますので、 IISのサイトIDの指定は不要です。一方で、サイトが自動判定できない場合には、--siteid オプションを利用して、明示的にIISのサイトを指定します。
siteidのオプションは次の通りです。

--source iis  --siteid (サイトIDの番号)


AuthorPortraitAlt
著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
作成日: 2026-06-27