Home | History | Annotate | Line # | Download | only in dnssec
      1 .. Copyright (C) Internet Systems Consortium, Inc. ("ISC")
      2 ..
      3 .. SPDX-License-Identifier: MPL-2.0
      4 ..
      5 .. This Source Code Form is subject to the terms of the Mozilla Public
      6 .. License, v. 2.0.  If a copy of the MPL was not distributed with this
      7 .. file, you can obtain one at https://mozilla.org/MPL/2.0/.
      8 ..
      9 .. See the COPYRIGHT file distributed with this work for additional
     10 .. information regarding copyright ownership.
     11 
     12 .. highlight: console
     13 
     14 .. iscman:: dnssec-keygen
     15 .. program:: dnssec-keygen
     16 .. _man_dnssec-keygen:
     17 
     18 dnssec-keygen: DNSSEC key generation tool
     19 -----------------------------------------
     20 
     21 Synopsis
     22 ~~~~~~~~
     23 
     24 :program:`dnssec-keygen` [**-3**] [**-A** date/offset] [**-a** algorithm] [**-b** keysize] [**-C**] [**-c** class] [**-D** date/offset] [**-d** bits] [**-D** sync date/offset] [**-E** engine] [**-f** flag] [**-F**] [**-G**] [**-h**] [**-I** date/offset] [**-i** interval] [**-K** directory] [**-k** policy] [**-L** ttl] [**-l** file] [**-n** nametype] [**-M** tag_min:tag_max] [**-P** date/offset] [**-P** sync date/offset] [**-p** protocol] [**-q**] [**-R** date/offset] [**-S** key] [**-s** strength] [**-T** rrtype] [**-t** type] [**-V**] [**-v** level] {name}
     25 
     26 Description
     27 ~~~~~~~~~~~
     28 
     29 :program:`dnssec-keygen` generates keys for DNSSEC (Secure DNS), as defined in
     30 :rfc:`2535` and :rfc:`4034`.
     31 
     32 The ``name`` of the key is specified on the command line. For DNSSEC
     33 keys, this must match the name of the zone for which the key is being
     34 generated.
     35 
     36 Options
     37 ~~~~~~~
     38 
     39 .. option:: -3
     40 
     41    This option uses an NSEC3-capable algorithm to generate a DNSSEC
     42    key. If this option is used with an algorithm that has both NSEC
     43    and NSEC3 versions, then the NSEC3 version is selected; for
     44    example, ``dnssec-keygen -3 -a RSASHA1`` specifies the NSEC3RSASHA1
     45    (deprecated) algorithm.
     46 
     47 .. option:: -a algorithm
     48 
     49    This option selects the cryptographic algorithm. For DNSSEC keys,
     50    the value of ``algorithm`` must be one of RSASHA1 (deprecated),
     51    NSEC3RSASHA1 (deprecated), RSASHA256, RSASHA512, ECDSAP256SHA256,
     52    ECDSAP384SHA384, ED25519, or ED448.
     53 
     54    These values are case-insensitive. In some cases, abbreviations
     55    are supported, such as ECDSA256 for ECDSAP256SHA256 and ECDSA384
     56    for ECDSAP384SHA384. If RSASHA1 (deprecated) is specified along
     57    with the :option:`-3` option, NSEC3RSASHA1 (deprecated) is used
     58    instead.
     59 
     60    This parameter *must* be specified except when using the :option:`-S`
     61    option, which copies the algorithm from the predecessor key.
     62 
     63    In prior releases, HMAC algorithms could be generated for use as TSIG
     64    keys, but that feature was removed in BIND 9.13.0. Use
     65    :iscman:`tsig-keygen` to generate TSIG keys.
     66 
     67 .. option:: -b keysize
     68 
     69    This option specifies the number of bits in the key. The choice of key size
     70    depends on the algorithm used: RSA keys must be between 1024 and 4096
     71    bits; Diffie-Hellman keys must be between 128 and 4096 bits. Elliptic
     72    curve algorithms do not need this parameter.
     73 
     74    If the key size is not specified, some algorithms have pre-defined
     75    defaults. For example, RSA keys for use as DNSSEC zone-signing keys
     76    have a default size of 1024 bits; RSA keys for use as key-signing
     77    keys (KSKs, generated with :option:`-f KSK <-f>`) default to 2048 bits.
     78 
     79 .. option:: -C
     80 
     81    This option enables compatibility mode, which generates an old-style key, without any timing
     82    metadata. By default, :program:`dnssec-keygen` includes the key's
     83    creation date in the metadata stored with the private key; other
     84    dates may be set there as well, including publication date, activation date,
     85    etc. Keys that include this data may be incompatible with older
     86    versions of BIND; the :option:`-C` option suppresses them.
     87 
     88 .. option:: -c class
     89 
     90    This option indicates that the DNS record containing the key should have the
     91    specified class. If not specified, class IN is used.
     92 
     93 .. option:: -d bits
     94 
     95    This option specifies the key size in bits. For the algorithms RSASHA1, NSEC3RSASA1, RSASHA256, and
     96    RSASHA512 the key size must be between 1024 and 4096 bits; DH size is between 128
     97    and 4096 bits. This option is ignored for algorithms ECDSAP256SHA256,
     98    ECDSAP384SHA384, ED25519, and ED448.
     99 
    100 .. option:: -E engine
    101 
    102    This option specifies the cryptographic hardware to use, when applicable.
    103 
    104    When BIND 9 is built with OpenSSL, this needs to be set to the OpenSSL
    105    engine identifier that drives the cryptographic accelerator or
    106    hardware service module (usually ``pkcs11``).
    107 
    108 .. option:: -f flag
    109 
    110    This option sets the specified flag in the flag field of the KEY/DNSKEY record.
    111    The only recognized flags are ZSK (Zone-Signing Key), KSK (Key-Signing Key)
    112    and REVOKE.
    113 
    114    Note that ZSK is not a physical flag in the DNSKEY record, it is merely used
    115    to explicitly tell that you want to create a ZSK. Setting :option:`-f` in
    116    conjunction with :option:`-k` will result in generating keys that only
    117    match the given role set with this option.
    118 
    119 .. option:: -F
    120 
    121    This options turns on FIPS (US Federal Information Processing Standards)
    122    mode if the underlying crytographic library supports running in FIPS
    123    mode.
    124 
    125 .. option:: -G
    126 
    127    This option generates a key, but does not publish it or sign with it. This option is
    128    incompatible with :option:`-P` and :option:`-A`.
    129 
    130 .. option:: -h
    131 
    132    This option prints a short summary of the options and arguments to
    133    :program:`dnssec-keygen`.
    134 
    135 .. option:: -K directory
    136 
    137    This option sets the directory in which the key files are to be written.
    138 
    139 .. option:: -k policy
    140 
    141    This option creates keys for a specific ``dnssec-policy``. If a policy uses multiple keys,
    142    :program:`dnssec-keygen` generates multiple keys. This also
    143    creates a ".state" file to keep track of the key state.
    144 
    145    This option creates keys according to the ``dnssec-policy`` configuration, hence
    146    it cannot be used at the same time as many of the other options that
    147    :program:`dnssec-keygen` provides.
    148 
    149 .. option:: -L ttl
    150 
    151    This option sets the default TTL to use for this key when it is converted into a
    152    DNSKEY RR. This is the TTL used when the key is imported into a zone,
    153    unless there was already a DNSKEY RRset in
    154    place, in which case the existing TTL takes precedence. If this
    155    value is not set and there is no existing DNSKEY RRset, the TTL
    156    defaults to the SOA TTL. Setting the default TTL to ``0`` or ``none``
    157    is the same as leaving it unset.
    158 
    159 .. option:: -l file
    160 
    161    This option provides a configuration file that contains a ``dnssec-policy`` statement
    162    (matching the policy set with :option:`-k`).
    163 
    164 .. option:: -M tag_min:tag_max
    165 
    166    This option sets the range of acceptable key tag values that ``dnssec-keygen``
    167    will produce. If the key tag of the new key or the key tag of
    168    the revoked version of the new key is outside this range,
    169    the new key will be rejected and another new key will be generated.
    170    This is designed to be used when generating keys in a multi-signer
    171    scenario, where each operator is given a range of key tags to
    172    prevent collisions among different operators.  The valid values
    173    for ``tag_min`` and ``tag_max`` are [0..65535].  The default allows all
    174    key tag values to be produced.  This option is ignored when ``-k policy``
    175    is specified.
    176 
    177 .. option:: -n nametype
    178 
    179    This option specifies the owner type of the key. The value of ``nametype`` must
    180    either be ZONE (for a DNSSEC zone key (KEY/DNSKEY)), HOST or ENTITY
    181    (for a key associated with a host (KEY)), USER (for a key associated
    182    with a user (KEY)), or OTHER (DNSKEY). These values are
    183    case-insensitive. The default is ZONE for DNSKEY generation.
    184 
    185 .. option:: -p protocol
    186 
    187    This option sets the protocol value for the generated key, for use with
    188    :option:`-T KEY <-T>`. The protocol is a number between 0 and 255. The default
    189    is 3 (DNSSEC). Other possible values for this argument are listed in
    190    :rfc:`2535` and its successors.
    191 
    192 .. option:: -q
    193 
    194    This option sets quiet mode, which suppresses unnecessary output, including progress
    195    indication. Without this option, when :program:`dnssec-keygen` is run
    196    interactively to generate an RSA or DSA key pair, it prints a
    197    string of symbols to ``stderr`` indicating the progress of the key
    198    generation. A ``.`` indicates that a random number has been found which
    199    passed an initial sieve test; ``+`` means a number has passed a single
    200    round of the Miller-Rabin primality test; and a space ( ) means that the
    201    number has passed all the tests and is a satisfactory key.
    202 
    203 .. option:: -S key
    204 
    205    This option creates a new key which is an explicit successor to an existing key.
    206    The name, algorithm, size, and type of the key are set to match
    207    the existing key. The activation date of the new key is set to
    208    the inactivation date of the existing one. The publication date is
    209    set to the activation date minus the prepublication interval,
    210    which defaults to 30 days.
    211 
    212 .. option:: -s strength
    213 
    214    This option specifies the strength value of the key. The strength is a number
    215    between 0 and 15, and currently has no defined purpose in DNSSEC.
    216 
    217 .. option:: -T rrtype
    218 
    219    This option specifies the resource record type to use for the key. ``rrtype``
    220    must be either DNSKEY or KEY. The default is DNSKEY when using a
    221    DNSSEC algorithm, but it can be overridden to KEY for use with
    222    SIG(0).
    223 
    224 .. option:: -t type
    225 
    226    This option indicates the type of the key for use with :option:`-T KEY <-T>`. ``type``
    227    must be one of AUTHCONF, NOAUTHCONF, NOAUTH, or NOCONF. The default
    228    is AUTHCONF. AUTH refers to the ability to authenticate data, and
    229    CONF to the ability to encrypt data.
    230 
    231 .. option:: -V
    232 
    233    This option prints version information.
    234 
    235 .. option:: -v level
    236 
    237    This option sets the debugging level.
    238 
    239 Timing Options
    240 ~~~~~~~~~~~~~~
    241 
    242 Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS
    243 (which is the format used inside key files),
    244 or 'Day Mon DD HH:MM:SS YYYY' (as printed by ``dnssec-settime -p``),
    245 or UNIX epoch time (as printed by ``dnssec-settime -up``),
    246 or the literal ``now``.
    247 
    248 The argument can be followed by ``+`` or ``-`` and an offset from the
    249 given time. The literal ``now`` can be omitted before an offset. The
    250 offset can be followed by one of the suffixes ``y``, ``mo``, ``w``,
    251 ``d``, ``h``, or ``mi``, so that it is computed in years (defined as
    252 365 24-hour days, ignoring leap years), months (defined as 30 24-hour
    253 days), weeks, days, hours, or minutes, respectively. Without a suffix,
    254 the offset is computed in seconds.
    255 
    256 To unset a date, use ``none``, ``never``, or ``unset``.
    257 
    258 .. option:: -P date/offset
    259 
    260    This option sets the date on which a key is to be published to the zone. After
    261    that date, the key is included in the zone but is not used
    262    to sign it. If not set, and if the :option:`-G` option has not been used, the
    263    default is the current date.
    264 
    265    .. program:: dnssec-keygen -P
    266    .. option:: sync date/offset
    267 
    268       This option sets the date on which CDS and CDNSKEY records that match this key
    269       are to be published to the zone.
    270 
    271 .. program:: dnssec-keygen
    272 
    273 .. option:: -A date/offset
    274 
    275    This option sets the date on which the key is to be activated. After that date,
    276    the key is included in the zone and used to sign it. If not set,
    277    and if the :option:`-G` option has not been used, the default is the current date. If set,
    278    and :option:`-P` is not set, the publication date is set to the
    279    activation date minus the prepublication interval.
    280 
    281 .. option:: -R date/offset
    282 
    283    This option sets the date on which the key is to be revoked. After that date, the
    284    key is flagged as revoked. It is included in the zone and
    285    is used to sign it.
    286 
    287 .. option:: -I date/offset
    288 
    289    This option sets the date on which the key is to be retired. After that date, the
    290    key is still included in the zone, but it is not used to
    291    sign it.
    292 
    293 
    294 .. option:: -D date/offset
    295 
    296    This option sets the date on which the key is to be deleted. After that date, the
    297    key is no longer included in the zone. (However, it may remain in the key
    298    repository.)
    299 
    300    .. program:: dnssec-keygen -D
    301    .. option:: sync date/offset
    302 
    303       This option sets the date on which the CDS and CDNSKEY records that match this
    304       key are to be deleted.
    305 
    306 .. program:: dnssec-keygen
    307 
    308 .. option:: -i interval
    309 
    310    This option sets the prepublication interval for a key. If set, then the
    311    publication and activation dates must be separated by at least this
    312    much time. If the activation date is specified but the publication
    313    date is not, the publication date defaults to this much time
    314    before the activation date; conversely, if the publication date is
    315    specified but not the activation date, activation is set to
    316    this much time after publication.
    317 
    318    If the key is being created as an explicit successor to another key,
    319    then the default prepublication interval is 30 days; otherwise it is
    320    zero.
    321 
    322    As with date offsets, if the argument is followed by one of the
    323    suffixes ``y``, ``mo``, ``w``, ``d``, ``h``, or ``mi``, the interval is
    324    measured in years, months, weeks, days, hours, or minutes,
    325    respectively. Without a suffix, the interval is measured in seconds.
    326 
    327 Generated Keys
    328 ~~~~~~~~~~~~~~
    329 
    330 When :program:`dnssec-keygen` completes successfully, it prints a string of the
    331 form ``Knnnn.+aaa+iiiii`` to the standard output. This is an
    332 identification string for the key it has generated.
    333 
    334 -  ``nnnn`` is the key name.
    335 
    336 -  ``aaa`` is the numeric representation of the algorithm.
    337 
    338 -  ``iiiii`` is the key identifier (or footprint).
    339 
    340 :program:`dnssec-keygen` creates two files, with names based on the printed
    341 string. ``Knnnn.+aaa+iiiii.key`` contains the public key, and
    342 ``Knnnn.+aaa+iiiii.private`` contains the private key.
    343 
    344 The ``.key`` file contains a DNSKEY or KEY record. When a zone is being
    345 signed by :iscman:`named` or :option:`dnssec-signzone -S`, DNSKEY records are
    346 included automatically. In other cases, the ``.key`` file can be
    347 inserted into a zone file manually or with an ``$INCLUDE`` statement.
    348 
    349 The ``.private`` file contains algorithm-specific fields. For obvious
    350 security reasons, this file does not have general read permission.
    351 
    352 Example
    353 ~~~~~~~
    354 
    355 To generate an ECDSAP256SHA256 zone-signing key for the zone
    356 ``example.com``, issue the command:
    357 
    358 ``dnssec-keygen -a ECDSAP256SHA256 example.com``
    359 
    360 The command prints a string of the form:
    361 
    362 ``Kexample.com.+013+26160``
    363 
    364 In this example, :program:`dnssec-keygen` creates the files
    365 ``Kexample.com.+013+26160.key`` and ``Kexample.com.+013+26160.private``.
    366 
    367 To generate a matching key-signing key, issue the command:
    368 
    369 ``dnssec-keygen -a ECDSAP256SHA256 -f KSK example.com``
    370 
    371 See Also
    372 ~~~~~~~~
    373 
    374 :iscman:`dnssec-signzone(8) <dnssec-signzone>`, BIND 9 Administrator Reference Manual, :rfc:`2539`,
    375 :rfc:`2845`, :rfc:`4034`.
    376