Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CertMgr_と_Azure_DNS.pdf

 CertMgr_と_Azure_DNS.pdf

この資料は 2026 年 8 月 20 日 に開催の第 89 回「のの会」で使用したスライドです。
HCL Domino で CertMgr タスクを使用して TLS 証明書の作成/更新を行う場合、メーカー指定の Web サイトから DNS プロバイダに一致する DXL ファイルをダウンロードして、それを CertStore.nsf のインポート機能を使い DNS 設定文書を作成します。DNS プロバイダに一致する DXL ファイルが用意されていない場合は、DNS 設定文書をいちから作成することもできますが、今回は Azure の DNS 設定文書の作成を行いました。この資料では 2 種類の DNS 関連設定の文書の内容と、この設定に至った不具合の内容などを掲載しています。

Avatar for Haruyuki Nakano

Haruyuki Nakano

September 11, 2026

More Decks by Haruyuki Nakano

Other Decks in Education

Transcript

  1. Dominoの証明書管理 • CertMgr タスクの導入前(Ver. 12.0より前)は、証明書の格納 先としてキーリングファイル(拡張子 .kyr)を作成する必要が あった • CertMgr

    タスクを使用すると、既存のキーリングファイルを証 明書ストア (CertStore.nsf) へ取り込み、文書による管理へ移 行することも(これまでどおりファイルで運用することも)可 能 • CertMgr タスクは ACME プロトコルをサポートしており、証 明書の更新の自動化が可能
  2. ACME (アクミー)とは • Automatic Certificate Management Environment を省略した もので日本語では「自動証明書管理環境」 •

    証明書の取得や更新などを人の手を介さず自動化するための通 信プロトコル • 証明書を発行する認証局(認証機関)が ACME に対応した サービスを行っている必要あり • メリットとして証明書の更新忘れの防止や管理工数の削減に役 立っている
  3. CertMgr がサポートするチャレンジ HTTP-01 チャレンジ DNS-01 チャレンジ • Web サーバーにファイルを作成すること •

    DNS に TXT レコードを作成することで で所有者であることを証明する • ファイルには、認証局から指定された 所有者であることを証明する • TXT レコードには、認証局から指定され 「トークン」と呼ばれる文字列をセット た「トークン」と呼ばれる文字列をセッ する トする • 証明書のホスト名を持つ Web サーバーが • DNS に社外からアクセス可能で、REST 既存で社外から http でアクセス可能であ API やコマンド等で TXT レコードを作成 る必要あり できる必要あり • ワイルドカード証明書を取得可能
  4. ACME のフロー(DNS-01) 1. 証明書リクエスト 認証局 2. 認証用トークン発行 認証局 3. トークンを

    TXT レコードにセット DNS 認証局 4. 認証チャレンジの要求 5. TXT レコードの確認 DNS 認証局 6. 証明書発行 7. TXT レコードの削除 認証局 DNS
  5. 証明書ストアの DNS 関連設定は2つ ✓DNS プロバイダ: ※タイトル:DNS プロバイダアカウント 証明書を取得するドメイン名と、それを管理する 「DNS 設定」を紐づけます

    「DNS 設定」で使用するパラメータの値を登録します ✓DNS 設定: ※タイトル:DNS プロバイダ設定 TXT レコードを DNS へ自動作成・削除する方法を設定 します DXL ファイルから文書作成する機能「DXL のインポー ト」がアクションメニューにあります
  6. Azure DNS の DXL ファイルが無い?! サポートサイトからダウンロード可能な DNS プロバイダ(のDXL ファイル)は以下のとおり(2026年8月16日時点) •

    Cloudflare • Digital Ocean • Hetzner • IONOS Cloud • ACME-DNS • deSec e.V. • Kapper • ClouDNS • Bunny.net DNS 現状のサポートサイトには Azure DNS も AWS の Route 53 も無い (どちらも CertMgr で対応した実績あり) 【出典】https://github.com/HCL-TECH-SOFTWARE/domino-cert-manager/tree/main/dns-providers
  7. Azure DNS のどんな情報が必要? Azure DNS は REST API で操作要求が可能 •

    TXT レコードの新規作 成・更新と削除の要求に同 じ URL を使用する • REST API で使用するメ ソッドは、新規作成・更新 に PUT、削除は DELETE 要求に必要な Azure の情報: ✓ サブスクリプション ID ✓ リソースグループ名 ✓ DNS ゾーン名 ✓ レコードタイプ ✓ レコードセット名 【出典】 https://learn.microsoft.com/ja-jp/rest/api/dns/record-sets/create-or-update?view=rest-dns-2018-05-01 https://learn.microsoft.com/ja-jp/rest/api/dns/record-sets/delete?view=rest-dns-2018-05-01
  8. DNS への操作要求に必要な文字列を生成 する「式」を組み立てます 【URLのフィーマット】※Azure DNS の場合、URL は追加・更新・削除のいずれも共通でした https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/ Microsoft.Network/dnsZones/{zoneName}/{recordType}/{relativeRecordSetName}?api-version=2018-05-01 パラメータ

    設定する値 値をセットするフォーム フォームの項目名 フォームのフィールド名 {subscriptionId} サブスクリプションID DNSプロバイダアカウント 許可キー cfg_AuthKey {resourceGroupName} リソースグループ名 DNSプロバイダアカウント カスタム値 cfg_CustomValue {zoneName} DNSゾーン名 DNSプロバイダアカウント DNSゾーン cfg_DnsZone {recordType} レコードタイプ ※固定値 “TXT” - - {relativeRecordSetName} レコードセット名 ※式で算出 - - https:// … /subscriptions ベースURL DNSプロバイダ設定 要求URL cfg_URL 【URLの式】 cfg_URL +“/”+ cfg_AuthKey + “/resourceGroups/” + cfg_CustomValue + “/providers/Microsoft.Network/dnsZones/” + cfg_DnsZone + “/TXT/” + <式で算出> + ?api-version=2018-05-01"
  9. Azure の操作 Azure の管理画面(portal.azure.com)から以下の操作を行います 1. Automation アカウント作成(リソースグループをこの操作中 に新規作成可能) 2. DNS

    ゾーン作成(1と同じリソースグループを指定) 3. リソースグループへの権限付与 4. (Microsoft Entra ID で)アプリの登録 5. (登録したアプリで)クライアントシークレットの作成 6. IDや名前を控える
  10. 【参考】IDや名前を控える • DNS の操作に必要な情報を Azure の管理画面から控えます ➢テナント ID Microsoft Entra

    ID – 概要 ➢DNSゾーンの名前 すべてのリソース – すべてのリソース ➢リソースグループの名前 すべてのリソース – すべてのリソース –作成したDNSゾーン名 ➢サブスクリプション ID すべてのリソース – すべてのリソース –作成したDNSゾーン名 ➢クライアント ID Microsoft Entra ID – アプリの登録 – すべてのアプリケーショ ン ➢クライアントシークレット Microsoft Entra ID – アプリの登録 – すべてのアプリケーショ ン - 作成したアプリ名 - 証明書とシークレット
  11. 控えた値とフィールド名を結びつけます • 控えた値を DNS プロバイダアカウント文書 の「設定値」のどの項目へセットするかを決 め、フィールド名と結びつけます Azureの名称 DNS プロバイダ

    DNS プロバイダア アカウントの カウントの項目 フィールド名 DNSゾーンの名前 DNS ゾーン cfg_DnsZone サブスクリプションID 許可キー cfg_AuthKey リソースグループの名前 カスタム値 cfg_CustomValue クライアントID ユーザー名 cfg_UserName クライアントシークレット 認証トークン cfg_AuthToken テナントID E メールアドレス cfg_InternetAddress ※未使用 パスワード cfg_Password
  12. 要求する方法の定義 • Azure の DNS の操作に REST API を使用します •

    TXT レコードの追加・更新と削除の操作を要求するにはベア ラートークンが必要なため、最初にトークンを要求します 1. トークンの要求 2. TXT レコードの追加・更新の要求 3. TXT レコードの削除の要求 • TXT レコード名を URL へ、追加する TXT レコードの値(= チャレンジの値)をボディへJSON形式で、それぞれ指定しま す
  13. [操作] DNS 操作方法の指定 種類 HTTP 要求 ステータス式 @if (retJSON_Add.etag !=

    ""; 200; 400) 要求 URL https://management.azure.com/subscriptions DNS プロバイダ遅延 20 HTTP 要求トレース 有効
  14. [HTTP 設定 - HTTP 検索要求(追加および削除操作に適用)] ベアラートークンの取得 検索要求種別 POST 検索 URL

    式 https://login.microsoftonline.com/<テナントID>/oauth2/token 検索ヘッダー式 Content-Type: application/x-www-form-urlencoded 検索投稿データ式 grant_type=client_credentials& client_id=<クライアントID>& client_secret=<クライアントシークレット>& resource=https://management.azure.com& scope=https://azure.com
  15. [HTTP 設定 - HTTP 追加要求] TXT レコードの追加・更新 要求種別 PUT URL

    式 <要求URL> +“/”+ <サブスクリプションID> + “/resourceGroups/” + <リ ソースグループ名> + “/providers/Microsoft.Network/dnszones/” + <DNS ゾーン名> + “/TXT/” + <(DNSゾーン名を含まない)TXT レコード名> + "?api-version=2018-05-01" ヘッダー式 ( “Authorization: Bearer ” + <ベアラートークン> ) : ( "Content-Type: application/json" ) 投稿データ式 ‘{“properties”: {“TTL”: 300,“TXTRecords”: [{“value”: [“’ + <認証局が指定す るチャレンジの値> + '"]}]}}'
  16. [HTTP 設定 - HTTP 削除要求] TXT レコードの削除 要求種別 DELETE URL

    式 <要求URL> +“/”+ <サブスクリプションID> + “/resourceGroups/” + <リ ソースグループ名> + “/providers/Microsoft.Network/dnszones/” + <DNS ゾーン名> + “/TXT/” + <(DNSゾーン名を含まない)TXT レコード名> + "?api-version=2018-05-01" ヘッダー式 “Authorization: Bearer ” + <ベアラートークン>
  17. 【参考】ステータス式 • DNS への TXT レコードの追加・更新の成功を判断するための 式を「ステータス式」へ設定します • Azure DNS

    では追加・更新が成功すると、その応答(下図)に 「etag」がセットされます JSON をパースしたもの • ここでは追加したときの応答に「etag」があれば成功とみなし 次の式を使用しました @if (retJSON_Add.etag != ""; 200; 400)
  18. 【参考】URL の共通部分 • URL の最初の部分は HTTP 追加要求と HTTP 削除要求で共通 のため「操作

    – 要求 URL」へセットしました • 要求 URL へセットする値は、フィールド名「cfg_URL」とし て式で参照できます
  19. 【参考】TXT レコードの名前 • 「TXT レコードの名前」を URL へセットします • URL へセットする「TXT

    レコードの名前」は param_DnsTxtName の値から「.<DNSゾーン名>」を削除し た値(上の例では “_acme-challenge.harudnstest4”)をセット するため、次の式を使用しました @ReplaceSubstring(param_DnsTxtName ; "."+param_RegisteredDomain ; "" )
  20. 控えた値を DNS プロバイダアカウント文書に保存 Azure の名称 フォームの項目 フィールド名 DNS ゾーンの名前 DNS

    ゾーン cfg_DnsZone サブスクリプションID 許可キー cfg_AuthKey リソースグループの名前 カスタム値 cfg_CustomValue クライアントID ユーザー名 cfg_UserName クライアントシークレット 認証トークン cfg_AuthToken テナントID E メールアドレス cfg_InternetAddress Azure の情報を保存する DNS プロバイダアカ ウント文書上の項目は、上記である必要はあり ません。 保存する値の項目を入れ替える場合、後述する 要求時の式のフィールド名も入れ替えます
  21. DNS プロバイダトレース文書の情報(2) 分類 概要 設定: 「DNS プロバイダアカウント」文書と「DNS プロバイダ設定」文書で 設定した項目の”cfg_”で始まるフィールド名とその値を表示します パラメータ:

    DNS から指定された「認証用トークン」などの情報を表示します URL: DNS への検索・追加・削除の各要求の URL を表示します DNS プロバイダ設定文書で指定した各 URL 式の計算結果です ヘッダー: DNS への検索・追加・削除の各要求のヘッダーを表示します DNS プロバイダ設定文書で指定した各ヘッダー式の計算結果です 投稿: DNS への検索・追加・削除の各要求の投稿データを表示します DNS プロバイダ設定文書で指定した各投稿データ式の計算結果です 検索結果: DNS への検索・追加・削除の各要求の結果を表示します リターンコードを “ret_xxxStatus”、戻り値を “ret_xxxResult” で表示 します JSON 結果: 検索結果が JSON 形式のとき、パースして表示します
  22. [Azure]TXT レコードの名前に注意 • TXT レコードの名前を URL へ埋め込む際、名前に DNS ゾー ン名を含めた場合、retJSON_Add.Properties.fqdn

    の値で DNS ゾーン名の重複が見られました。このとき認証局から検索でき なくなりチャレンジに失敗しました