dnssec-cds コマンド

目的

子委任署名者 (CDS) および子ドメイン・ネーム・サーバー・キー (CDNSKEY) に基づいて、子ゾーンの委任署名者 (DS) レコードを変更します。

構文

dnssec-cds [-a alg ...] [-c class] [-D] {-d dsset-file} {-f child-file} [-i** [extension]] [-s** 開始時刻] [-T ttl] [-u] [-v level] [-V] {domain}

説明

dnssec-cdsコマンドは、子ゾーンで公開されているCDSまたはCDNSKEYレコードに基づいて、 委任先でDSレコードを変更する。 子ゾーンにCDSレコードとCDNSKEYレコードの両方が存在する場合、 CDSが優先される。 dnssec-cdsコマンドを使用して定期的にポーリングすることで、子ゾーンが親ゾーンに 鍵署名鍵(KSK)の今後の変更を通知できるようになる。 親ゾーンはDSレコードを最新に保ち、KSKの自動ローリングを可能にする。

つの入力ファイルが必要である。 -f child-fileオプションは、子プロセスのCDSレコードとCDNSKEYレコード、および リソースレコード署名(RRSIG)とDNSKEYレコードを含むファイルを指定する。 -d pathオプションは、現在のDSレコードを含むファイルの場所を指定する。 例えば、「dnssec-signzoneコマンドによって生成された「dsset-ファイルであったり、「dnssec-dsfromkeyコマンドの出力であったり、以前に実行された「dnssec-cdsコマンドの出力であったりする。

dnssec-cdsコマンドは、RFC 7344で規定されている特別なDNSSEC検証ロジックを使用する。 dnssec-cdsコマンドは、CDSとCDNSKEYレコードが、既存のDSレコードで表現され る鍵で署名されていることを要求する。 これは通常、既存のKSKである。

リプレイ・アタックから保護するために、子レコードの署名は、 dnssec-cds コマンドの前回の実行時より古いものであってはなりません。 シグニチャーの存続期間は、 dsset- ファイルの変更時刻から取得されるか、 -s オプションを使用して取得されます。

委任の破棄からDSレコードを保護するために、'dnssec-cdsコマンドは DNSKEYリソースレコードセット(RRset)が新しいDS RRsetの全ての鍵 アルゴリズムで検証可能であり、同じ鍵セットが全てのDSダイジェストタイプで カバーされていることを保証する。

デフォルトでは、置換されたDSレコードは、'-iオプションを使って標準出力に書き出され、入力ファイルは上書きされる。 変更の必要がない場合、置き換えられたDSレコードは既存のレコードと同じである。 CDSレコードとCDNSKEYレコードが子ゾーンの安全性を確保する必要があると 指定している場合、出力は空になることがある。

注意 dnssec-cdsコマンドが失敗しても、DSレコードを削除しないでください。 あるいは、'dnssec-cds -uコマンドを使って'nsupdateスクリプトを標準出力に書き出す。 -uと'-i両オプションは、'dsset-ファイルを保持し、'nsupdateスクリプトをトリガーするために使うことができる。

フラグ

-a アルゴリズム

CDNSKEYレコードをDSレコードに変換する際に使用しなければならないダイジェストアルゴリズムを指定する。 このオプションは、各CDNSKEYレコードに対して複数のDSレコードを作成するために再度使用することができる。 このオプションはCDSレコードを使用する場合には役に立たない。

algorithmには SHA-1、SHA-256、SHA-384のいずれかを指定する。 これらの値は大/小文字を区別せず、ハイフンは省略できます。 アルゴリズムを指定しない場合、デフォルト値はSHA-256である。

-c class

ゾーンの DNS クラスを指定します。

-D

CDSレコードとCDNSKEYレコードの両方が子ゾーンに存在する場合、 CDNSKEYレコードからDSレコードを生成する。 デフォルトではCDSレコードが優先される。

-d パス

親のDSレコードの場所を指定する。 パスには、DSレコードを含むファイル名を指定することができる。 ディレクトリの場合、'dnssec-cdsコマンドはディレクトリ内の ドメインの'dsset-ファイルを検索する。

リプレイ・アタックから DS レコードを保護するために、 dsset- ファイルの変更時刻より前に署名された子レコードは拒否されます。 -s オプションを使用して、タイミングを調整できます。

-f 子ファイル

子プロセスが認証されるように、子プロセスのCDSレコードとCDNSKEYレコード、 DNSKEYレコードとそれをカバーするRRSIGレコードを含むファイルを指定する。

-i拡張

DSレコードを標準出力に書き出す代わりに、'dsset-ファイルを更新する。

-i」と拡張子の間にはスペースを入れてはならない。 extension が指定されていない場合、古い dsset- は破棄されます。 拡張子が指定された場合、古い「dsset-ファイルのバックアップは、そのファイル名に拡張子の値が付加されて保存される。

DSレコードをリプレイ攻撃から保護するために、'dsset-ファイルの変更時間は、 そのファイルの現在の変更時間よりも遅い場合に限り、子レコードの署名開始時間と 一致するように設定される。

-s 開始時刻

RRSIG記録が受け入れ可能となる日時を指定する。 これは、絶対時刻または相対時刻のいずれかにすることができます。 絶対開始時刻はYYYYMMDDHHMMSS表記の数字で示され、20170827133700は2017年8月27th日の13:37:00 UTCを示す。 dsset-ファイルからの相対時間は'-Nで示される。 現在時刻に対する相対時刻は、now+N で示されます。

start-time を指定しない場合は、 dsset- ファイルの変更時刻が使用されます。

-T ttl

新しいDSレコードに使用しなければならないTTL(time-to-live)を指定します。 値が指定されない場合、デフォルト値は古いDSレコードのTTLとなる。 古いDSレコードに明示的なTTLがない場合、新しいDSレコードにも明示的なTTLはない。

-u

新しいDSレコードを表示する代わりに、'nsupdateスクリプトを標準出力に書き出す。 変更が不要な場合、出力は空になります。

注: 新しいレコードの TTL は、 -T フラグまたは nsupdate ttl コマンドを使用して、元の dsset- ファイルに指定する必要があります。
-V

バージョン情報を印刷します。

-v レベル

デバッグのレベルを設定します。 レベル1は一般ユーザー向けで、それ以上のレベルは開発者向けである。

ドメイン (domain)

委任ポイントまたは子ゾーンの筆頭指定の名前を示します。

終了状況

dnssec-cdsコマンドは、成功すれば 0 で終了し、エラーが発生すれば 0 以外で終了する。

dnssec-signzoneコマンドを実行する前に、すべての'dsset-ファイルに対して'dnssec-cdsコマンドを実行し、デリゲーションが更新されていることを確認する。

dnssec-cds必要とする子レコードを取得するには、以下のスクリプトに示すように、「digコマンドを呼び出す。 digコマンドが失敗しても、「dnssec-cdsコマンドは必要なチェックをすべて実行する。

for f in dsset-*
do
    d=${f#dsset-}
    dig +dnssec +noall +answer $d DNSKEY $d CDNSKEY $d CDS |
    dnssec-cds -i -f /dev/stdin -d $f $d
done

namedコマンドによって親ゾーンが自動的に署名される場合、'dnssec-cdsコマンドを 'nsupdateコマンドと併用することで、以下のようにデリゲーションを維持することが できる。 dsset-ファイルは、スクリプトが親DSレコードをフェッチして検証することを許さず、リプレイ攻撃の防御時間を維持する。

dig +dnssec +noall +answer $d DNSKEY $d CDNSKEY $d CDS |
dnssec-cds -u -i -f /dev/stdin -d $f $d |
nsupdate -l