dnssec-keygen 命令

用途

域名系统安全性扩展 (DNSSEC) 密钥生成工具。

语法

dnssec-keygen [-3] [-A 日期/偏移] [-a 算法] [-b 键值] [-C] [-c ] [-D 日期/偏移] [-d 钻头] [-D sync 日期/偏移] [-E 引擎] [-f 国旗] [-G] [-g 发生器] [-h] [-I 日期/偏移] [-i 间隙] [-K 通讯录] [-k 政策] [-L ttl] [-l 文件] [-n 命名类型] [-P 日期/偏移] [-P sync 日期/偏移] [-p 规程] [-q] [-R 日期/偏移] [-S 密钥] [-s 力量] [-T rrtype] [-t 类型] [-V] [-v 夷为平地] [名字]

描述

dnssec-keygen命令为RFC 2535RFC 4034 中定义的 DNSSEC(安全 DNS)生成密钥。 它还能生成用于RFC 2845 中定义的交易签名 (TSIG) 或RFC 2930 中定义的交易密钥 (TKEY) 的密钥。

在命令行中指定密钥的名称。 对于 DNSSEC 密钥,密钥的名称必须与生成密钥的区域名称一致。

标志

表 1. 标志
描述
-3 使用支持 "NSEC3的算法生成 DNSSEC 密钥。 如果该选项与同时具有 "NSEC和 "NSEC3版本的算法一起使用,则选择 "NSEC3版本。 例如,"dnssec-keygen -3a RSASHA1指定NSEC3RSASHA1算法。
-a 算法
选择加密算法。 对于 DNSSEC 密钥,算法值必须是以下任一值:
  • RSASHA1
  • NSEC3RSASHA1
  • RSASHA256
  • RSASHA512
  • ECDSAP256SHA256
  • ECDSAP384SHA384
  • ED25519
  • ED448
-T KEY的值必须是 Diffie-Hellman (DH)。 如果指定了该值,则也会自动设置 "-T KEY选项。

这些值不区分大小写。 有时也支持缩写,如用 "ECDSA256表示 "ECDSAP256SHA256,用 "ECDSA384表示 "ECDSAP384SHA384"。 如果将 RSASHA1-3 选项一起指定,那么将改为使用 NSEC3RSASHA1

必须指定此参数,使用 -S 选项时除外,该选项从先行键复制算法。

在以前的版本中,可以生成 HMAC 算法作为 TSIG 密钥使用,但 BIND9.13.0 取消了这一功能。 使用 tsig-keygen 命令生成 TSIG 密钥。

-b 密钥大小

指定密钥位数。 密钥大小的选择取决于所使用的算法。 RSA 密钥的范围必须是 1024-4096 位,DH 密钥的范围必须是 128-4096 位。 椭圆曲线算法不需要此参数。

如果未指定密钥大小,那么某些算法具有预定义的缺省值。 例如,用作 DNSSEC 区域签名密钥的 RSA 密钥默认大小为 1024 位。 用作密钥签名密钥(KSK,用 "-f KSK生成)的 RSA 密钥默认大小为 2048 位。

-C 启用兼容模式,生成不含任何时序元数据的旧式密钥。 默认情况下,"dnssec-keygen命令会在与私钥一起存储的元数据中包含密钥的创建日期。 还可以设置其他日期,如发布日期、激活日期等。 包含这些数据的密钥可能与旧版本的 BIND 不兼容。 -C选项会抑制该数据。
-c Class 表示包含密钥的域名系统 (DNS) 记录必须具有指定的类。 如果未指定,那么使用类 IN。
-d 以位为单位指定密钥大小。 对于 "RSASHA1、"NSEC3RSASA1、"RSASHA256和 "RSASHA512"算法,密钥大小必须在 1024-4096 位范围内,DH 大小必须在 128-4096 位范围内。 对于算法 ECDSAP256SHA256ECDSAP384SHA384ED25519ED448,将忽略此选项。
-E 引擎

指定要使用的加密硬件 (如果适用)。

当 BIND 9 使用 "OpenSSL,构建时,需要将此选项设置为驱动加密加速器或硬件服务模块的 "OpenSSL引擎标识符(通常为 "PKCS11)。

-f 标志 在 KEY 或 DNSKEY 记录的 flag 字段中设置指定标志。 唯一公认的标志是 KSK DNSKEY。
-G 生成密钥,但不发布密钥或使用密钥进行签名。 此选项与 -P-A 标志不兼容。
-g 生成器 表示生成 DH 密钥必须使用的生成器。 允许的值为 2 和 5。 如果没有指定生成器,则尽可能使用RFC 2539中的已知素数,否则默认值为 2。
-h 打印 "dnssec-keygen命令的选项和参数摘要。
-K 目录 设置必须在其中写入密钥文件的目录。
-k 策略

为特定 dnssec-policy 配置创建密钥。 如果策略使用多个密钥,那么 dnssec-keygen 命令将生成多个密钥。 此选项还会创建 .state 文件以跟踪密钥状态。

此选项根据 dnssec-policy 配置创建密钥。 因此,它不能与 "dnssec-keygen命令提供的其他选项同时使用。

-L 设置 DNSSEC 密钥转换为 DNSKEY 资源记录 (RR) 时使用的默认生存时间 (TTL)。 将密钥导入到区域时使用此 TTL ,除非已设置 DNSKEY RR。 在这种情况下,现有 TTL 优先。 如果未设置此值,且 DNSKEY RR 设置不存在,则 TTL 默认为 SOA TTL。 如果 TTL 的默认值设置为 "0或 "none,则与不设置 TTL 相同。
-l 文件 此选项提供了一个配置文件,其中包含 dnssec-policy 语句 (将策略集与 -k 标志匹配)。
-n 名称类型 指定密钥的所有者类型。 nametype的值必须是以下值之一:
  • ZONE表示 DNSSEC 区域密钥(KEY 或 DNSKEY)
  • HOST
  • ENTITY表示与主机相关的密钥(KEY)
  • USER表示与用户相关的密钥(KEY)
  • 其他(DNSKEY)
这些值不区分大小写。 生成 DNSKEY 时的默认值为 "ZONE
-pProtocol 为生成的密钥设定协议值。 协议值范围为 0-255。 缺省值为 3 (DNSSEC)。 RFC 2535及其后续版本中列出了该参数的其他可能值。
-q 设置静音模式,抑制不必要的输出,包括进度指示。 如果不使用该选项交互运行 "dnssec-keygen命令来生成 Rivest-Shamir-Adleman (RSA) 或数字签名算法 (DSA) 密钥对,它会向 "stderr打印一串符号。 这表明密钥生成的进度。
  • 句号(.)表示通过初步筛分测试的随机数。
  • 加号(+)表示一个数字通过了一轮米勒-拉宾 primality 检验。
  • 空格( )表示该号码通过了所有测试,是一个令人满意的密钥。
-S 创建一个新密钥,它是现有密钥的明确继承者。 密钥的名称、算法、大小和类型会被设置为与现有密钥匹配。 新密钥的激活日期设置为现有密钥的停用日期。 发布日期设置为激活日期减去发布前时间间隔 (缺省为 30 天)。
-s 强度 指定密钥的强度值。 强度是一个范围在 0-15 之间的数字,目前在 DNSSEC 算法中没有定义用途。
-T rrtype 指定必须用于密钥的资源记录类型。 rrtype 必须是 DNSKEY 或 KEY。 使用 DNSSEC 算法时,默认值为 DNSKEY,但要使用 "SIG(0)密钥对时,可将该值更改为 KEY。
-t Type 指定密钥的使用。 类型必须是以下值之一:
  • AUTHCONF
  • NOAUTHCONF
  • NOAUTH
  • NOCONF
默认值为 "AUTHCONFAUTH表示验证数据的能力,"CONF表示加密数据的能力。
-V 打印版本信息。
-v 级别 设置调试级别。

计时标志

日期可以用 "YYYYMMDD或 "YYYYMMDDHHMMSS的格式表示。 如果参数以正号(+)或负号(-)开头,则被解释为从当前时间开始的偏移量。 如果偏移量后面有后缀 "y"、"mo"、"w"、"d"、"h"或 "mi",则偏移量的计算单位为年(定义为 365 个 24 小时日,忽略闰年)、月(定义为 30 个 24 小时日)、周、日、小时或分钟。 如果不使用后缀,那么将以秒为单位计算偏移量。 要明确阻止设置日期,请使用 "none、"never或 "unset

表 2. 定时标记
描述
-P 日期/偏移量 此选项设置必须将密钥发布到区域的日期。 在此日期之后,密钥将包含在区域中,但不会用于签署区域。 如果未设置此选项,并且未使用 -G 选项,那么缺省值为当前日期。
-P sync 日期/偏移量 该选项设置了与该密钥相匹配的子委托签名者 (CDS) 和子域名服务器密钥 (CDNSKEY) 记录必须发布到区域的日期。
-A 日期/偏移量 此选项设置必须激活密钥的日期。 在该日期之后,该密钥将包含在区域中,并用于对该区域进行签名。 如果未设置此选项,并且未使用 -G 选项,那么缺省值为当前日期。 如果设置了此选项,并且未设置 -P 标志,那么发布日期将设置为激活日期减去发布前时间间隔。
-R 日期/偏移量 此选项设置必须撤销密钥的日期。 在该日期之后,该密钥将标记为已撤销。 密钥仍包含在区域中,并用于签署区域。
-I 日期/偏移量 此选项设置必须撤销密钥的日期。 在该日期之后,密钥仍包含在区域中,但不用于签署区域。
-D 日期/偏移量 此选项设置必须删除密钥的日期。 在该日期之后,该密钥不会包含在区域中。 不过,它可能会保留在密钥存储库中。
-D sync 日期/偏移量 此选项设置必须删除与此键匹配的 CDS 和 CDNSKEY 记录的日期。
-i interval 此选项设置密钥的发布前时间间隔。 如果设置了该选项,则出版日期和激活日期会被指定的时间分隔开来。 如果指定了激活日期,但未指定发布日期,那么发布日期缺省为激活日期之前的指定时间。 相反,如果指定了发布日期,但未指定激活日期,那么会将激活设置为发布后的指定时间。

如果密钥是作为另一个密钥的明确继承者创建的,则默认的发布前间隔为 30 天,否则为 0 天。

与日期偏移一样,如果参数后面有后缀 "y、"mo、"w、"d"、"h或 "mi,则时间间隔的单位为年、月、周、日、小时或分钟。 如果没有后缀,那么时间间隔以秒为单位进行度量。

参数

表 3. 参数
描述
名称 命令行上指定的密钥的名称。 对于 DNSSEC 密钥,该名称必须与生成密钥的区域名称一致。

生成的密钥

dnssec-keygen 命令成功完成时,它会将格式为 Knnnn.+aaa+iiiii 的字符串打印到标准输出。 这是生成的密钥的标识字符串。
  • nnnn是密钥名。
  • aaa 算法的数字表示。
  • iiiii 是密钥标识(或占地面积)。
dnssec-keygen 命令创建两个文件。 基于打印字符串的文件名。 Knnnn.+aaa+iiiii.key包含公钥和基于打印字符串的文件名。 Knnnn.+aaa+iiiii.private包含私人密钥。

.key文件包含 DNSKEY 或 KEY 记录。 使用 "named命令或 "dnssec-signzone -S命令签署区域时,会自动包含 DNSKEY 记录。 在其他情况下,可手动或通过 $INCLUDE 语句将 .key 文件插入区域文件。

.private 文件中包含特定于算法的字段。 为了安全起见,此文件没有常规的读许可权。

示例

要为区域example.com 生成ECDSAP256SHA256区域签名密钥,请输入以下命令:
dnssec-keygen -a ECDSAP256SHA256 example.com
该命令将打印格式如下的字符串:
Kexample.com.+013+26160

在此示例中, dnssec-keygen 命令将创建文件 Kexample.com.+013+26160.keyKexample.com.+013+26160.private

要生成匹配的密钥签名密钥,请输入以下命令:
dnssec-keygen -a ECDSAP256SHA256 -f KSK example.com