SSLならセクティゴ・コモドのEV・企業・ドメイン認証

SSLならセクティゴ・コモドのEV・企業・ドメイン認証

サポート


こちらからサポート記事を検索いただけます

検索キーワード:

注文・設定方法など (CaaS関連)

Certbot クライアントでドメインのDNS TXT レコードを自動で更新するための手順

BIND DNS サーバを API 経由で操作するには、通常、BIND のゾーンファイルを直接操作するか、ISC Kea のような次世代の DNS サーバで API 機能を利用する方法が考えられますが、CertbotなどのACMEクライアント本体がこれらと直接連携する機能はありません。

代替案1 商用 DNS プロバイダはAPI 経由で更新操作に対応させる


Cloudflare


Route 53 (AWS)


Google Cloud DNS


Azure DNS


DigitalOcean DNS


Dynu


GoDaddy


OVH


それぞれのプロバイダのマニュアルに従い設定してください

代替案2: certbot-dns-rfc2136 プラグインの利用 (ダイナミックアップデート)


もし BIND サーバが RFC 2136 (DNS ダイナミックアップデート) をサポートしている場合、certbot-dns-rfc2136 プラグインを利用できる可能性があります。これは、DNS のレコードを動的に更新するための標準的なプロトコルです。
要件: BIND サーバがダイナミックアップデートを受け入れるように設定されていること。 キーファイル(TSIGキー)を生成し、Certbot がそのキーを使って認証できるようにすること。
BIND 9系であれば RFC 2136 (DNS ダイナミックアップデート) をサポートしています。
RFC 2136 で定義されているダイナミックアップデート機能は、BIND のバージョン9系ではかなり古いバージョンからサポートされ、この機能に関して安定しており、広く利用されています。
ただし、サポートしているからといって、デフォルトで有効になっているわけではありません。ダイナミックアップデートを受け入れるように BIND の設定ファイル (named.conf) で明示的に設定する必要があります。

named.conf の設定例

// named.conf またはゾーンファイル内で
zone "your.domain.com" IN {
type master;
file "your.domain.com.zone";
allow-update { key "your-tsig-key"; }; // ここでダイナミックアップデートを許可
};

// TSIGキーの定義 (named.conf のオプションセクションなどで)
key "your-tsig-key" {
algorithm hmac-sha256; // 使用するアルゴリズム
secret "YOUR_BASE64_ENCODED_TSIG_SECRET"; // dnssec-keygen で生成した秘密鍵
};


重要なポイント:

allow-update ディレクティブ: これがダイナミックアップデートを許可するために必須です。{ any; } とすると誰でもアップデートできてしまうため、セキュリティ上非常に危険です。通常は、特定のIPアドレスや、上記のようにTSIGキーを指定して認証されたクライアントのみに限定します。

TSIGキー: dnssec-keygen ツールを使ってキーを生成し、そのキーを named.conf に定義する必要があります。certbot-dns-rfc2136 プラグインも、このTSIGキーを使って認証を行います。

ゾーンファイルのパーミッション: BINDがゾーンファイルを書き換えられるように、ゾーンファイルの所有者とパーミッションを適切に設定する必要があります。通常、named ユーザーがゾーンファイルを書き込めるようにします。

まとめ 上記の設定を行うことで certbot-dns-rfc2136 プラグインを利用してTXTレコードをダイナミックアップデート経由で更新することが可能です。

代替案3:カスタムスクリプトと--manual-auth-hook / --manual-cleanup-hook の利用

これは最も柔軟な方法ですが、ご自身でスクリプトを作成する必要があります。

Certbot の manual プラグインは、証明書発行プロセス中に特定のフック(スクリプト)を実行する機能を提供します。

--manual-auth-hook スクリプト:

Certbot が TXT レコードを追加する際に実行されます。このスクリプト内で、BIND サーバのゾーンファイルを操作したり、nsupdate コマンドを使ってダイナミックアップデートを実行したりするロジックを実装します。

CERTBOT_DOMAIN: 証明書を発行するドメイン名

CERTBOT_VALIDATION: TXT レコードの値(ACMEチャレンジトークン)

--manual-cleanup-hook スクリプト:

Certbot が TXT レコードの検証が完了した後、そのレコードを削除する際に実行されます。

スクリプトの実装例(nsupdate を使用する場合):

auth_hook.sh:

Bash

#!/bin/bash

# BINDサーバのIPアドレスとTSIGキーの情報
BIND_SERVER="your.bind.server.ip"
TSIG_KEY_NAME="your-tsig-key"
TSIG_KEY_FILE="/path/to/your/tsig-key.key" # TSIGキーファイルへのパス

# nsupdate コマンドでTXTレコードを追加
echo "server $BIND_SERVER"
echo "update add _acme-challenge.$CERTBOT_DOMAIN 60 IN TXT \"$CERTBOT_VALIDATION\""
echo "send"
echo "quit"
# ここでパイプを使ってnsupdateにコマンドを渡す
# もしTSIGキーを使う場合は "-k" オプションでキーファイルを指定
/usr/bin/nsupdate -k "$TSIG_KEY_FILE" << EOF
server $BIND_SERVER
update add _acme-challenge.$CERTBOT_DOMAIN 60 IN TXT "$CERTBOT_VALIDATION"
send
quit
EOF


sleep 10 # DNSの伝播を待つために少し待機
cleanup_hook.sh:


Bash


#!/bin/bash


# BINDサーバのIPアドレスとTSIGキーの情報
BIND_SERVER="your.bind.server.ip"
TSIG_KEY_NAME="your-tsig-key"
TSIG_KEY_FILE="/path/to/your/tsig-key.key" # TSIGキーファイルへのパス


# nsupdate コマンドでTXTレコードを削除
/usr/bin/nsupdate -k "$TSIG_KEY_FILE" << EOF
server $BIND_SERVER
update delete _acme-challenge.$CERTBOT_DOMAIN TXT
send
quit
EOF
Certbot コマンドの実行:


Bash

sudo certbot certonly --manual --preferred-challenges dns \
--manual-auth-hook /path/to/auth_hook.sh \
--manual-cleanup-hook /path/to/cleanup_hook.sh \
-d your.domain.com


注意点: これらのスクリプトは、実行権限(chmod +x)が必要です。 nsupdate コマンドが利用できる環境が必要です。 TSIG_KEY_FILE は、セキュリティ上、適切なパーミッションを設定し、保護してください。 スクリプト内でエラーハンドリングを追加するなど、堅牢性を高める必要があります。 どちらの方法を選ぶか? RFC 2136 をサポートする BIND サーバがあり、比較的シンプルな設定で済ませたい場合: certbot-dns-rfc2136 が最も適しています。 より細かな制御が必要な場合、または rfc2136 プラグインがうまく動作しない場合: カスタムスクリプト (--manual-auth-hook / --manual-cleanup-hook) を作成する方法が適しています。ただし、スクリプトの作成とデバッグに手間がかかります。 まとめ Certbot が直接 BIND のゾーンファイルをAPI経由で更新するような統合された機能は持っていませんが、上記のいずれかの方法で実現することが可能

サポートトップへ

CaaSとは

注文・設定方法など

トラブルシューティング

その他