Lease version 1.99.12 is available
April 30, 2026
Lease version 1.99.12 has been released (tagged at
1.99.12.20260429174723.026e1fc40c). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Lease 1.99.12:
- RT1875: Add missing cocci files to dist
- RT1870: Fix
configure.acwarnings - RT1869: Update main copyrights to 2026
Some more development releases will be made from this branch until Lease 2.0 is ready to be branched. You can read about Lease branches and version numbering.
Loop version 1.99.12 is available
April 30, 2026
Loop version 1.99.12 has been released (tagged at
1.99.12.20260429174723.026e1fc40c). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Loop 1.99.12:
- RT1898: Return EDE for unsupported message opcodes and unsupported message class
- RT1897: Use macros instead of option codes
- RT1866: Add named support for
draft-ietf-dnsop-structured-dns-erroranddraft-muks-dns-filtering - RT1876: Fix logging example in the Loop user manual
- RT1875: Add missing cocci files to dist
- RT1873: Update logging to include file and line numbers
- RT1871: Update Vulkan manager log messages
- RT1870: Fix
configure.acwarnings - RT1869: Update main copyrights to 2026
- RT1868: Rename macro
- RT1863: Update Vulkan related
named.conf(5)manpage options; add more Vulkan manager logging
Some more development releases will be made from this branch until Loop 2.0 is ready to be branched. You can read about Loop branches and version numbering.
Border version 1.99.12 is available
April 30, 2026
Border version 1.99.12 has been released (tagged at
1.99.12.20260429174723.026e1fc40c). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Border 1.99.12:
- RT1891: Fix first release date from 1.99 branch
- RT1879: Upgrade NPM dependency packages
- RT1875: Add missing cocci files to dist
- RT1870: Fix
configure.acwarnings - RT1869: Update main copyrights to 2026
Some more development releases will be made from this branch until Border 2.0 is ready to be branched. You can read about Border branches and version numbering.
Border version 1.99.11 is available
March 13, 2026
Border version 1.99.11 has been released (tagged at
1.99.11.20260302081434.1cfd6e70ac). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Border 1.99.11:
- RT1857: Upgrade NPM dependency packages
- RT1837: Upgrade NPM dependency packages
- RT1842: Add libxcrypt to dependencies
- RT1840: Fix release notes text
Some more development releases will be made from this branch until Border 2.0 is ready to be branched. You can read about Border branches and version numbering.
Lease version 1.99.11 is available
March 13, 2026
Lease version 1.99.11 has been released (tagged at
1.99.11.20260302081434.1cfd6e70ac). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Lease 1.99.11:
- RT1840: Fix release notes text
Some more development releases will be made from this branch until Lease 2.0 is ready to be branched. You can read about Lease branches and version numbering.
Loop version 1.99.11 is available
March 13, 2026
Loop version 1.99.11 has been released (tagged at
1.99.11.20260302081434.1cfd6e70ac). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Loop 1.99.11:
- RT1806: Add Vulkan manager thread to named and related
named.conf(5)options - RT1854: Refactor jumps in cache lookups
- RT1849: Fix segfault in dnsperf
- RT1840: Fix release notes text
- RT1838: Update RFC notes of RFC 9276
- RT1836: Fix incorrect buffer size in
debit_log()
Some more development releases will be made from this branch until Loop 2.0 is ready to be branched. You can read about Loop branches and version numbering.
Loop version 1.99.10 is available
March 3, 2026
Loop version 1.99.10 has been released (tagged at
1.99.10.20260302081434.1cfd6e70ac). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Loop 1.99.10:
- RT1826: Limit NSEC3 iterations per RFC 9276. The
max-sec3-iterationsnamed.conf(5)option was added to configure the limit, and it defaults to 10.dnssec-signzone(1)warns if a non-zero NSEC3 additional iterations value or a non-zero length NSEC3 salt is used when signing a zone. - RT1831: Return EDE option when queries fail due to recursive clients going over quota. The Over Quota (32) INFO-CODE in the EDNS Extended DNS Errors option is returned.
- RT1827: Return EDE option when responses are truncated due to RRL. The Rate Limited (31) INFO-CODE in the EDNS Extended DNS Errors option is returned.
- RT1820: Fix check for
max-rsa-exponent-sizeoption - RT1825: Add RFC notes section to the Loop user manual
- RT1811: Remove unnecessary assignment that causes Sphinx warning
- RT1709: Add RPZ
intentconfig clause with values blocking/censoring/filtering; the Blocked (15), Censored (16), and Filtered (17) INFO-CODEs in the EDNS Extended DNS Errors option are returned depending on the configuredintentof the RPZ zone. - RT1820: Limit max RSA public exponent bits size to a default of 64; values up to 256 are allowed.
- RT1820: Further limit RSA public exponent to 64 bits
- RT1720: Return EDE option for SERVFAIL if a zone is not ready to be queried. The Not Ready (14) INFO-CODE is returned if the zone data has not been loaded. The Invalid Data (24) INFO-CODE Is returned if the zone data is stale or missing.
- RT1819: Fix Debian package homepage URLs
- RT1780: Return the Not Authoritative (20) INFO-CODE in the EDNS Extended DNS Errors option when the server is not authoritative for the zone
Some more development releases will be made from this branch until Loop 2.0 is ready to be branched. You can read about Loop branches and version numbering.
We wanted to merge a couple of large branches into this release, but there was insufficient time. We will likely break them up and merge them phase by phase in future releases.
Border version 1.99.10 is available
March 3, 2026
Border version 1.99.10 has been released (tagged at
1.99.10.20260302081434.1cfd6e70ac). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Border 1.99.10:
- RT1819: Fix Debian package homepage URLs
Some more development releases will be made from this branch until Border 2.0 is ready to be branched. You can read about Border branches and version numbering.
Lease version 1.99.10 is available
March 3, 2026
Lease version 1.99.10 has been released (tagged at
1.99.10.20260302081434.1cfd6e70ac). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Lease 1.99.10:
- RT1819: Fix Debian package homepage URLs
Some more development releases will be made from this branch until Lease 2.0 is ready to be branched. You can read about Lease branches and version numbering.
Loop version 1.99.9 is available
February 15, 2026
Loop version 1.99.9 has been released (tagged at
1.99.9.20260214065406.a608344ce2). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Loop 1.99.9:
- RT1812: Add Debian and Ubuntu to supported platforms
- RT1781: Fix .name TLD DNSSEC verification failure
- RT1801: Fix warning about possible thread name buffer overflow (
pthread_setname_np()) - RT1777: Rename heap callback function types and args
- RT1774: Remove CYGWIN specific code
- RT1757: Rename
*.origfiles to*.template - RT1755: Add Debian packaging
- RT1753: Add
tsigreplaysystem test to dist - RT1752: Add printing of tests that failed to
loop-system-tests.sh - RT1751: Fix the
pkcs11system test - RT1750: Set exit status when running
loop-system-tests.sh - RT1746: Fix user creation in RPM spec file for new RPM versions
- RT1743: Disable parallel make in docs directories when using Sphinx
- RT1740: Update list of supported platforms
- RT1739: Switch from
ans.pltoans.py - RT1738: Use standard C integer types
- RT1718: Change the word chapter to section
Some more development releases will be made from this branch until Loop 2.0 is ready to be branched. You can read about Loop branches and version numbering.
We now use restructured build infrastructure to build Loop, Lease, and Border packages. We are able to build and test for many more platforms now, and the builds also complete faster. The RPM builders now run the entire system test suite against the binaries built for each RPM, so that the binaries that users install and use are exactly equal to the tested binaries.
We wanted to merge a couple of large branches into this release, but there was insufficient time. We will likely break them up and merge them phase by phase in future releases.
Lease version 1.99.9 is available
February 15, 2026
Lease version 1.99.9 has been released (tagged at
1.99.9.20260214065406.a608344ce2). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Lease 1.99.9:
- RT1812: Add Debian and Ubuntu to supported platforms
- RT1801: Fix warning about possible thread name buffer overflow (
pthread_setname_np()) - RT1760: Remove socket interface code
- RT1760: Remove unused socket code
- RT1760: Remove raw socket implementation code
- RT1760: Remove log messages about HP JetAdmin software
- RT1760: Update text in manpage
- RT1760: Remove NIT code
- RT1760: Remove DLPI code
- RT1760: Remove UPF code
- RT1760: Move
icmp.cfunction protos toicmp.h - RT1760: Remove local version of
inet_aton() - RT1776: Use separate heap indexes for tracking active and inactive heaps
- RT1777: Rename heap callback function types and args
- RT1772: Refactor and port
mdb6_unittest.c - RT1775: Save and restore lease's heap index
- RT1774: Remove CYGWIN specific code
- RT1771: Refactor and port
duid_unittest.c - RT1770: Refactor and port
leaseq_unittest.c - RT1769: Refactor and port
simple_unittest.c - RT1768: Refactor and port
load_bal_unittest.c - RT1767: Refactor and port
hash_unittest.c - RT1766: Make
libdhclientlibrary - RT1765: Make
libdhcpdlibrary - RT1764: Refactor and port
test_alloc.c - RT1763: Refactor and port
ns_name_test.c - RT1762: Refactor and port
misc_unittest.c - RT1761: Refactor and port
dns_unittest.c - RT1760: Move
ddns.cfunction protos toddns.h - RT1760: Move
dns.cfunction protos todns.h - RT1760: Make
repudiate_zone()statically scoped - RT1760: Make
dns_zone_lookup()statically scoped - RT1760: Refactor
dispatch() - RT1760: Add include
- RT1760: Fix module name, etc.
- RT1760: Prefix lease to function names
- RT1760: Delete trailing whitespace
- RT1760: Fix old style function decl
- RT1760: Fix function args
- RT1760: Cleanup includes
- RT1760: Replace defines with enum
- RT1760: Delete trailing whitespace
- RT1760: Make variables static scoped
- RT1760: Fix no previous prototype compiler warnings
- RT1755: Add Debian packaging
- RT1746: Fix user creation in RPM spec file for new RPM versions
- RT1743: Disable parallel make in docs directories when using Sphinx
- RT1742: Add installation.rst to
EXTRA_DIST - RT1740: Update list of supported platforms
- RT1738: Use standard C integer types
- RT1737: Move leasechain protos to
leasechain.h - RT1736: Remove unused
resolv.c
Some more development releases will be made from this branch until Lease 2.0 is ready to be branched. You can read about Lease branches and version numbering.
Border version 1.99.9 is available
February 15, 2026
Border version 1.99.9 has been released (tagged at
1.99.9.20260214065406.a608344ce2). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Border 1.99.9:
- RT1813: Upgrade NPM dependency packages
- RT1812: Add Debian and Ubuntu to supported platforms
- RT1801: Fix warning about possible thread name buffer overflow (
pthread_setname_np()) - RT1799: Upgrade NPM dependency packages
- RT1791: Upgrade NPM dependency packages
- RT1755: Add Debian packaging
- RT1747: Upgrade NPM dependency packages
- RT1746: Fix user creation in RPM spec file for new RPM versions
- RT1743: Disable parallel make in docs directories when using Sphinx
- RT1740: Update list of supported platforms
Some more development releases will be made from this branch until Border 2.0 is ready to be branched. You can read about Border branches and version numbering.
Border version 1.99.8 is available
November 4, 2025
Border version 1.99.8 has been released (tagged at
1.99.8.20251104005426.4e37e60402). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Border 1.99.8:
- RT1674: Reset button in forms clear any previous alerts now.
- RT1679: NPM dependency packages have been upgraded.
- RT1671: libevent and libzip deps are limited to just the border RPM package now.
- RT1681: Installation instructions are now included in the Border User Manual; they were previously missing from the dist.
- RT1682: Form resets are handled more consistently now similar to submit.
- RT1683: Some JavaScript was moved out of the JSX HTML.
- RT1692: NPM dependency packages have been upgraded.
- RT1706: NPM dependency packages have been upgraded.
Some more development releases will be made from this branch until Border 2.0 is ready to be branched. You can read about Border branches and version numbering.
Loop version 1.99.8 is available
November 4, 2025
Loop version 1.99.8 has been released (tagged at
1.99.8.20251104005426.4e37e60402). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Loop 1.99.8:
- RT1671: libevent and libzip deps are limited to just the border RPM package now.
- RT1086: The TSIG timesigned value is cached and checked now per RFC 8945 section 5.2.3. Not checking the time permits a type of transaction replay attack which has been added as a testcase in our system tests.
- RT1229: Loop's
namedprogram returns the EDNS Extended DNS Error option (RFC 8914). Some configuration options such asede-enableandede-extra-text-enablehave been added to control this feature. The feature is enabled by default, and an Extended DNS Error option is returned in responses whenever additional information is available. A list of the option values that Loop may return in responses, including their RCODE, INFO-CODE, and EXTRA-TEXT values are listed in a table in the Loop User Manual (see the section titled EDNS Extended DNS Error). There are several more conditions identified where the Extended DNS Error option is to be returned, but these need additional changes that have been moved to new tickets and will be available in future releases.
Some more development releases will be made from this branch until Loop 2.0 is ready to be branched. You can read about Loop branches and version numbering.
Lease version 1.99.8 is available
November 4, 2025
Lease version 1.99.8 has been released (tagged at
1.99.8.20251104005426.4e37e60402). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Lease 1.99.8:
- RT1671: libevent and libzip deps are limited to just the border RPM package now.
Some more development releases will be made from this branch until Lease 2.0 is ready to be branched. You can read about Lease branches and version numbering.
Loop version 1.99.7 is available
August 31, 2025
Loop version 1.99.7 has been released (tagged at
1.99.7.20250831123527.772ce56e35). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Loop 1.99.7:
- RT1428: The packaging of Loop was updated. Loop is part of a source
code tree with other components such as Lease and Border, and
previously only Loop and Lease were packaged. Other components of the
tree are also packaged now as part of a multi-package RPM spec
file. The
border-releasepackage which installed theborder-epel,border-epel-testing,border-fedora, andborder-fedora-testingDNF package repositories and their package signing PGP key has been replaced with theakira-releasepackage which installs theakira-epel,akira-epel-testing,akira-fedora, andakira-fedora-testingDNF package repositories and their package signing PGP key. - RT1660: Functionality to make
named(8)a daemon was moved to a new module in the libloop library. This is not a user-visible change. - RT1661:
chroot(2)functionality was moved to the libloop library. This is not a user-visible change. - RT1662: Privilege dropping functionality (using Linux capabilities API) was moved to a new module in the libloop library. This is not a user-visible change.
- RT1657: syslog functionality was moved to a new module in the libloop library. This is not a user-visible change.
- RT1656:
ns_os_shutdownmsg()was moved to live within the server module. This is not a user-visible change. - RT1654: A
gethostname()wrapper was moved to the libloop library. This is not a user-visible change. - RT1653: PID file functionality was moved to a new module in the libloop library. This is not a user-visible change.
- RT1652: PID file code was refactored. This is not a user-visible change.
- RT1651: Error functions were refactored;
UNEXPECTED_ERRORandFATAL_ERRORmacros were removed. These are not user-visible changes. - RT1648:
loop_lib_init()now callstzset(3); it was previously called by the :program:namedprogram's code. This is not a user-visible change. The call may be removed in the future. - RT1647: CPU count functionality was moved to a new module in the libloop library. This is not a user-visible change.
- RT1646: NULL is now allowed in
loop_mem_strdup()which returns NULL. This is not a user-visible change. - RT1640: A loop_uuid module was added. This is not a user-visible change.
- RT1639: A loop_mime module was added. This is not a user-visible change.
- RT1638: Support to create urlsafe Base64 was added to libloop (see RFC 4648 section 5). This is not a user-visible change.
- RT1632: Some remnant code and documentation of the obsolete
named-compilezoneprogram were removed. - RT1633: The Loop version string was incorrectly reported in some
places previously due to some recent changes. Uses of
PACKAGE_macros were changed so that the issue does not occur again. - RT1613: All the programs of Loop and Lease were updated to use consistent command line options for version, verbosity, help, etc.
- RT1618: DNS names were added to the list of items in the data and privacy section of the Loop and Lease user manuals.
To upgrade from a previous release of Loop on an RPM platform, first
remove the obsolete border-release and loop-release RPMs:
[user@host ~]$ sudo dnf remove border-release loop-release
Then, install the akira-release package as described in the
installation instructions. This will install the
new DNF package repositories.
Then, upgrade the loop package, which should install it from the new
DNF package repository:
[user@host ~]$ sudo dnf upgrade loop
You may clean up the old Border Package Signer key using
clean-rpm-gpg-pubkey:
[user@host ~]$ sudo dnf install clean-rpm-gpg-pubkey
[user@host ~]$ sudo clean-rpm-gpg-pubkey
Some more development releases will be made from this branch until Loop 2.0 is ready to be branched. You can read about Loop branches and version numbering.
Border version 1.99.7 is available
August 31, 2025
Border version 1.99.7 has been released (tagged at
1.99.7.20250831123527.772ce56e35). This is the first public release of
Border. It is in a series of releases made from the 1.99 development
branch.
The following are release notes for Border 1.99.7:
- RT1428: Border is now packaged.
- RT1642: A header was added to Border web licenses.
- RT1664: Border now supports the
listen-onstatement inborder.conf(5). - RT1665: The
border(8)process now runs as a daemon. - RT1667: The
border(8)process now drops privileges when run asrootuser using capabilities under Linux. It also supports being run in a chroot directory. - RT1666: The
border(8)process now creates PID files in its runstate directory. - RT1668: The
border(8)process is now run as theborderuser when started from the systemdborder.service. - RT1673: Copyright year was updated in various web source files.
To install Border, please see its installation instructions.
Some more development releases will be made from this branch until Border 2.0 is ready to be branched. You can read about Border branches and version numbering.
Lease version 1.99.7 is available
August 31, 2025
Lease version 1.99.7 has been released (tagged at
1.99.7.20250831123527.772ce56e35). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Lease 1.99.7:
- RT1428: The packaging of Lease was updated. Lease is part of a source
code tree with other components such as Loop and Border, and
previously only Lease and Loop were packaged. Other components of the
tree are also packaged now as part of a multi-package RPM spec
file. The
border-releasepackage which installed theborder-epel,border-epel-testing,border-fedora, andborder-fedora-testingDNF package repositories and their package signing PGP key has been replaced with theakira-releasepackage which installs theakira-epel,akira-epel-testing,akira-fedora, andakira-fedora-testingDNF package repositories and their package signing PGP key. - RT1672: A minor syntax error was fixed in the Lease RPM's post-installation script (it did not cause an actual issue other than the error report).
- RT1613: All the programs of Loop and Lease were updated to use consistent command line options for version, verbosity, help, etc.
- RT1618: DNS names were added to the list of items in the data and privacy section of the Loop and Lease user manuals.
To upgrade from a previous release of Lease on an RPM platform, first
remove the obsolete border-release RPM:
[user@host ~]$ sudo dnf remove border-release
Then, install the akira-release package as described in the
installation instructions. This will install the
new DNF package repositories.
Then, upgrade the lease package, which should install it from the new
DNF package repository:
[user@host ~]$ sudo dnf upgrade lease
You may clean up the old Border Package Signer key using
clean-rpm-gpg-pubkey:
[user@host ~]$ sudo dnf install clean-rpm-gpg-pubkey
[user@host ~]$ sudo clean-rpm-gpg-pubkey
Some more development releases will be made from this branch until Lease 2.0 is ready to be branched. You can read about Lease branches and version numbering.
Lease version 1.99.6 is available
August 11, 2025
Lease version 1.99.6 has been released (tagged at
1.99.6.20250811025749.965cadab44). This is the first public release of
Lease. It is in a series of releases made from the 1.99 development
branch.
The following are release notes for Lease 1.99.6:
- RT1606: Lease packages are now built. Lease is part of a source code tree with other components such as Loop, and previously only Loop was packaged. Other components of the tree are also packaged now as part of a multi-package RPM spec file.
To install Lease, please see its installation instructions.
Some more development releases will be made from this branch until Lease 2.0 is ready to be branched. You can read about Lease branches and version numbering.
Loop version 1.99.6 is available
August 11, 2025
Loop version 1.99.6 has been released (tagged at
1.99.6.20250811025749.965cadab44). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Loop 1.99.6:
- RT1606: The packaging of Loop was updated. Loop is part of a source
code tree with other components such as Lease, and previously only
Loop was packaged. Other components of the tree are also packaged now
as part of a multi-package RPM spec file. The
loop-releasepackage which installed theloop-epel,loop-epel-testing,loop-fedora, andloop-fedora-testingDNF package repositories and their package signing PGP key has been replaced with theborder-releasepackage which installs theborder-epel,border-epel-testing,border-fedora, andborder-fedora-testingDNF package repositories and their package signing PGP key. - RT1607: The system path for storing PID files, session key files, etc.
was updated to use
runstatedirinstead oflocalstatedir/run, as RPM packaging makes a distinction in these paths and uses the former. - RT1608: A documentation link was added to the Systemd
named.servicefile.
To upgrade from a previous release of Loop on an RPM platform, first
remove the obsolete loop-release RPM:
[user@host ~]$ sudo dnf remove loop-release
Then, install the border-release package as described in the
installation instructions. This will install the
new DNF package repositories.
Then, upgrade the loop package, which should install it from the new
DNF package repository:
[user@host ~]$ sudo dnf upgrade loop
You may clean up the old Loop Package Signer key using
clean-rpm-gpg-pubkey:
[user@host ~]$ sudo dnf install clean-rpm-gpg-pubkey
[user@host ~]$ sudo clean-rpm-gpg-pubkey
Some more development releases will be made from this branch until Loop 2.0 is ready to be branched. You can read about Loop branches and version numbering.
Loop version 1.99.5 is available
August 4, 2025
Loop version 1.99.5 has been released (tagged at
1.99.5.20250803090512.84dee3c593). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Loop 1.99.5:
- RT1577: Loop now applies a maximum RSA public exponent size of 256
bits during DNSSEC validation. Previously it was unlimited, and there
is also no limit suggested in the DNS standards currently for the RSA
public exponent. An unlimited RSA public exponent size can increase
RSA signature validation times significantly. There was no
vulnerability due to this lack of limit in practice, as other limits
in buffer sizes and the OpenSSL library restricted the maximum
exponent size that could be successfully used. However, these effects
were serendipitous, and an explicit limit of 256 bits has now been set
as suggested in FIPS 186-5
and NIST SP 800-56B. The
maximum allowed RSA public exponent size can be configured using the
max-rsa-exponent-sizeconfig option ofnamed.conf(5). 256 bits is also the maximum value allowed for themax-rsa-exponent-sizeconfig option. RSA DNSKEYs created by Loop continue to use a fixed public exponent 65537 which is 17 bits long. - RT1569:
dnssec-keygen(1)can now create encrypted DNSKEY private keys, so that private key material can be stored encrypted at-rest on disk. Until now, private key material could only be stored in clear-text unencrypted form in files namedKnnnn.+aaa+iiiii.privatewhere <nnnn> is the key name, <aaa> is the numeric representation of the algorithm, and <iiiii> is the key identifier. If one needed better security for the key material, the only other alternative was to store the keys in a hardware security module (HSM). Now, as another option, the DNSSEC programs allow storing and using private keys in an encryptedKnnnn.+aaa+iiiii.pemfile alongside the existingKnnnn.+aaa+iiiii.keyandKnnnn.+aaa+iiiii.privatefiles. In this case, the private key material fields are stored in the encryptedKnnnn.+aaa+iiiii.pemfile instead of the clear-textKnnnn.+aaa+iiiii.privatefile, whereas theKnnnn.+aaa+iiiii.privatefile continues to store key metadata. This protects the private key material at rest. - RT1592: The Loop system tests have been updated to use modern DNSSEC
algorithms, and RSASHA1 and NSEC3RSASHA1 are no longer used except to
test specific cases where their use is required. This is in
preparation awaiting the approval of
draft-ietf-dnsop-must-not-sha1
when support for DNSSEC signing with RSA + SHA-1 will be dropped.
dnssec-keygen(1)anddnssec-keyfromlabel(1)now print a warning if RSASHA1 or NSEC3RSASHA1 keys are created. - RT1591: DNSSEC programs such as
dnssec-keygen(1)anddnssec-keyfromlabel(1)now require the DNSKEY algorithm to be specified explicitly using the-acommand-line argument. There is no longer a default selection of the algorithm. References have been added to the manpage on selecting a suitable algorithm. This is to avoid unexpected surprises when these programs are used in scripts and the default algorithm type has to change. - RT1579: The
platform.hheader which catered to differences in obsolete POSIX platforms has been removed as the source code tree has been modernized in recent years. This is not a user-visible change.
Other changes were made to the tree that are not ready for public release.
Some more development releases will be made from this branch until Loop 2.0 is ready to be branched. You can read about Loop branches and version numbering.
Loop version 1.99.4 is available
July 14, 2025
Loop version 1.99.4 has been released (tagged at
1.99.4.20250713141817.bfebf34e59). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Loop 1.99.4:
- RT1513: Support for Fedora 40 has been dropped as it has reached EOL upstream.
- RT1524: Support for RHEL 7 has been dropped as it has reached
end-of-maintenance support upstream. Compiling Loop packages for RHEL
7 had needed extra dependencies such as a newer C compiler from
devtoolset-7-gccwith support for<stdatomic.h>, and several code and build farm customizations. These have now been dropped. - RT1543: Several files missing from the dist tarball (source code
tarball) were added to
EXTRA_DIST. These are not user-visible as they're not packaged in the binary packages. - RT1544: A unittest suite was added for the database versioning
functionality (
dbversion). - RT1550: A seperate memory context is now used for OpenSSL 3 library's memory allocations. This allows the user to do accounting of OpenSSL 3 library's memory allocations.
- RT1551: A benchmark program called
benchmark-zone-querieswas added. This program is not packaged in the binary packages currently. - RT1557: The task manager (
taskmgr) was refactored to use atomic operations and remove mutex locking in several places. - RT1558: Loop's worker threads (part of the task manager) have been
refactored to use event loops instead of condition variables. The user
visible aspect of this would be that in backtraces, worker threads
would no longer be seen blocked on
pthread_cond_wait()waiting for work. Instead they would be seen blocked onepoll_wait()(Linux) orkevent()(FreeBSD). - RT1560: Some unnecessary arrays (proportional to the
<maximum-sockets> value) and mutex arrays (and associated locking)
were removed from the socket manager (
socketmgr). This was possible due to the use ofstruct epoll_event->data.ptrandstruct kevent->udatafields available as part of epoll and kevent respectively. Now, the <maximum-sockets> value as provided tonamed -Sis simply a limit and does not use any additional resources. It could become an advisory limit in the future. - RT1562: A member of the socket structure was not initialized leading
to a single Valgrind memcheck report which was fixed. There are no
more Valgrind memcheck reports generated for
namedduring any of our unit and system tests currently. - RT1515: The object attribute's value provided to
dnssec-keyfromlabel -lis now properly URI percent-encoded per RFC 7512 and RFC 3986. - RT1564: The PIN command-line argument for DNSSEC programs has been
removed. A PIN can now be provided as part of the PKCS#11 URI itself
(see RFC 7512 for the
pin-sourceandpin-valueattributes). - RT1516: A PKCS#11 HOWTO has been added to the Loop User Manual.
- RT1565: Release notes are now available in the Loop User Manual.
RT1560 and RT1558 involve significant changes to the socketmgr and
taskmgr respectively. If there are any issues observed while using
Loop, please contact us.
Other changes were made to the tree that are not ready for public release.
Some more development releases will be made from this branch until Loop 2.0 is ready to be branched. You can read about Loop branches and version numbering.
Using Loop's PKCS#11 support for DNSSEC signing
July 5, 2025
This is an example of how to use Loop's PKCS#11 support to perform DNSSEC zone signing with keys stored in HSMs (hardware security modules).
-
This example uses the SoftHSMv2 PKCS#11 provider for demonstration.
-
In real-world usage, you would use the PKCS#11 provider module provided by your HSM vendor.
-
For some smart cards and USB tokens, you may be able to use the PKCS#11 provider provided by the OpenSC project.
To bridge between the PKCS#11 provider module and the OpenSSL library, an OpenSSL provider module called pkcs11-provider is used.
Programs in Loop call the OpenSSL library, which calls the pkcs11-provider OpenSSL provider, which in turn calls the HSM vendor's PKCS#11 provider (SoftHSMv2 in this example).
Install dependencies
As the root user or using sudo, install the SoftHSMv2,
pkcs11-provider, and p11-kit packages for your
platform. p11-kit provides the program p11tool which you may
optionally use to manipulate tokens on the HSM.
For example, on Red Hat Enterprise Linux 10 or Fedora platforms, you may use the following command to install these packages:
[user@host ~]$ sudo dnf install softhsm pkcs11-provider p11-kit
On RHEL, the softhsm package should be available as a part of
AppStream.
Create a working directory
For this example, we will create a sub-directory called pkcs11/ as our
working directory and store almost everything relative to this
directory. In real-world usage, you can store configuration and data in
system directories and modify paths accordingly.
[user@host ~]$ mkdir pkcs11
[user@host ~]$ cd pkcs11
[user@host ~/pkcs11]$
Configure SoftHSMv2
Let us configure and setup SoftHSMv2. SoftHSMv2 stores tokens in a
directory on the filesystem. We create a sub-directory within the
pkcs11/ directory for it, and create a softhsm2.conf file to
configure SoftHSMv2 to use this directory. We also set the
SOFTHSM2_CONF environment variable to tell SoftHSMv2 that it should
use our softhsm2.conf file.
[user@host ~/pkcs11]$ mkdir softhsm2-tokendir
[user@host ~/pkcs11]$ cat > softhsm2.conf
directories.tokendir=softhsm2-tokendir
[user@host ~/pkcs11]$ export SOFTHSM2_CONF=softhsm2.conf
[user@host ~/pkcs11]$
Next, we initialize a SoftHSMv2 token so we may use it. We also assign a PIN of "1234" (you may use a different PIN if you like):
[user@host ~/pkcs11]$ softhsm2-util --init-token --free --label "example" --pin 1234 --so-pin 1234
Slot 0 has a free/uninitialized token.
The token has been initialized and is reassigned to slot 2076677265
[user@host ~/pkcs11]$ softhsm2-util --token example --show-slots
Available slots:
Slot 2076677265
Slot info:
Description: SoftHSM slot ID 0x7bc79491
Manufacturer ID: SoftHSM project
Hardware version: 2.6
Firmware version: 2.6
Token present: yes
Token info:
Manufacturer ID: SoftHSM project
Model: SoftHSM v2
Hardware version: 2.6
Firmware version: 2.6
Serial number: 74a2bc56fbc79491
Initialized: yes
User PIN init.: yes
Label: example
Slot 1
Slot info:
Description: SoftHSM slot ID 0x1
Manufacturer ID: SoftHSM project
Hardware version: 2.6
Firmware version: 2.6
Token present: yes
Token info:
Manufacturer ID: SoftHSM project
Model: SoftHSM v2
Hardware version: 2.6
Firmware version: 2.6
Serial number:
Initialized: no
User PIN init.: no
Label:
[user@host ~/pkcs11]$
(The slot number it assigns may differ for you as it is chosen randomly; it does not matter.)
We can use p11tool to determine the PKCS#11 URI for the token. This
URI will be used later in our example.
[user@host ~/pkcs11]$ p11tool --list-token-urls | grep "example"
pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=74a2bc56fbc79491;token=example
[user@host ~/pkcs11]$
You can also notice newly created files in softhsm2-tokendir/:
[user@host ~/pkcs11]$ find softhsm2-tokendir/
softhsm2-tokendir/
softhsm2-tokendir/b595ca7b-14c8-d5fd-74a2-bc56fbc79491
softhsm2-tokendir/b595ca7b-14c8-d5fd-74a2-bc56fbc79491/token.object
softhsm2-tokendir/b595ca7b-14c8-d5fd-74a2-bc56fbc79491/generation
softhsm2-tokendir/b595ca7b-14c8-d5fd-74a2-bc56fbc79491/token.lock
[user@host ~/pkcs11]$
Configure OpenSSL
Let us now configure OpenSSL to use pkcs11-provider, and
pkcs11-provider to use SoftHSMv2. We create an openssl.cnf
file to configure OpenSSL. We also set the OPENSSL_CONF environment
variable to tell OpenSSL that it should use our openssl.cnf file.
[user@host ~/pkcs11]$ cat > openssl.cnf
HOME = .
openssl_conf = openssl_init
[openssl_init]
providers = provider_sect
[provider_sect]
default = default_sect
pkcs11 = pkcs11_sect
[default_sect]
activate = 1
[pkcs11_sect]
module = pkcs11.so
pkcs11-module-path = /usr/lib/softhsm/libsofthsm2.so
pkcs11-module-token-pin = 1234
pkcs11-module-quirks = no-deinit
activate = 1
[user@host ~/pkcs11]$ export OPENSSL_CONF=openssl.cnf
[user@host ~/pkcs11]$
In the above configuration, a pkcs11 OpenSSL provider module is
configured in the pkcs11_sect section. It uses the pkcs11.so module
installed as part of the pkcs11-provider package into the OpenSSL
ossl-modules directory (typically somewhere within /usr/lib/).
pkcs11-module-pathconfigures pkcs11-provider to use the SoftHSM2 PKCS#11 provider. In case this path is incorrect, please use the correct path tolibsofthsm2.soon your host.pkcs11-mode-token-pinconfigures the PIN to access the SoftHSMv2 token. It is configured here as it is a tutorial, but you may want to leave it out for security, and you'll be prompted to provide the PIN every time the token is used.pkcs11-module-quirksconfigures quirks in pkcs11-provider. Here,no-deinitis configured to ask pkcs11-provider not to perform deinitialization during shutdown of the PKCS#11 module. On some supported platforms, the currently available version of SoftHSMv2 does not deinitialize properly and crashes. The available quirks are documented in the provider-pkcs11 manpage.
Please consult the OpenSSL documentation for more details about what the various configuration elements mean.
Create a DNSKEY by generating or importing keys
We will create a DNSKEY to sign the example.com. zone. There are two
approaches to creating it. We can:
- Generate a new DNSKEY on the HSM
- Import an existing key from the HSM
In both cases, the .private file of the DNSKEY file pair that is
created contains a label referring to the HSM. It doesn't contain
any private key material (which lives within the HSM). The .key file
of the DNSKEY file pair that is created contains the public key as a
DNSKEY record.
Both approaches are described in the section below.
Create a DNSKEY by generating it
The
dnssec-keygen
program can be used to generate a key on a HSM. We have to provide a
label or a full PKCS#11 URI for an object to store the key into,
using the dnssec-keygen -l argument. In this case, we will use a
PKCS#11 URI, and label the key as my-rsa-2048. So we append
;object=my-rsa-2048 to the URI that p11tool returned above.
We create a DNSKEY on the HSM with algorithm RSASHA256; the RSA key is
2048 bits in size:
[user@host ~/pkcs11]$ dnssec-keygen -l "pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=74a2bc56fbc79491;token=example;object=my-rsa-2048" -a RSASHA256 -b 2048 -n ZONE example.com
Generating key pair.
Kexample.com.+008+44679
[user@host ~/pkcs11]$ cat Kexample.com.+008+44679.private
Private-key-format: v1.3
Algorithm: 8 (RSASHA256)
Modulus: pyBJmKobVVB4NJpEYqUIsY46DZwH47dYCDCQX4qGJ2d2wbX8h9wdw8onhSpgpF5BiqfJ0uKEBx/OwsPa5FkYRRouTxXtP2BoWpq+ZRWBJssn+H7Z7Zn7BMNVyZpMiYaC5eMqWDT9N6HnD8fa6hTx8mC+5vhTT76A7FE4r5bukH48RXUfIJh4h1ipG2sGbya/nwTI22SJdnZpwhDpanqn1Li4zgH/ciy3ktdkVxD+3cgp07mSO2PowrDv7Qeyga3tRyYGO3rwHxPsbF8syj7FNCpWwFbTOUS67ooykPxV3RhevOOFTj1SRH4mpbuvNa4RY/ekPpUwcbuZuBiX0UAr9Q==
PublicExponent: AQAB
Label: cGtjczExOm1vZGVsPVNvZnRIU00lMjB2MjttYW51ZmFjdHVyZXI9U29mdEhTTSUyMHByb2plY3Q7c2VyaWFsPTc0YTJiYzU2ZmJjNzk0OTE7dG9rZW49ZXhhbXBsZTtvYmplY3Q9bXktcnNhLTIwNDgA
Created: 20250705122326
Publish: 20250705122326
Activate: 20250705122326
[user@host ~/pkcs11]$ cat Kexample.com.+008+44679.key
; This is a zone-signing key, keyid 44679, for example.com.
; Created: 20250705122326 (Sat Jul 5 20:23:26 2025)
; Publish: 20250705122326 (Sat Jul 5 20:23:26 2025)
; Activate: 20250705122326 (Sat Jul 5 20:23:26 2025)
example.com. IN DNSKEY 256 3 8 AwEAAacgSZiqG1VQeDSaRGKlCLGOOg2cB+O3WAgwkF+KhidndsG1/Ifc HcPKJ4UqYKReQYqnydLihAcfzsLD2uRZGEUaLk8V7T9gaFqavmUVgSbL J/h+2e2Z+wTDVcmaTImGguXjKlg0/Teh5w/H2uoU8fJgvub4U0++gOxR OK+W7pB+PEV1HyCYeIdYqRtrBm8mv58EyNtkiXZ2acIQ6Wp6p9S4uM4B /3Ist5LXZFcQ/t3IKdO5kjtj6MKw7+0HsoGt7UcmBjt68B8T7GxfLMo+ xTQqVsBW0zlEuu6KMpD8Vd0YXrzjhU49UkR+JqW7rzWuEWP3pD6VMHG7 mbgYl9FAK/U=
[user@host ~/pkcs11]$
The value of the Label: field printed above from the
Kexample.com.+008+44679.private file is a Base64 encoded PKCS#11 URI
string of the object. There is no private key material in this file, and
this file serves like a symbolic link to the object my-rsa-2048 in the
HSM.
[user@host ~/pkcs11]$ echo -n "cGtjczExOm1vZGVsPVNvZnRIU00lMjB2MjttYW51ZmFjdHVyZXI9U29mdEhTTSUyMHByb2plY3Q7c2VyaWFsPTc0YTJiYzU2ZmJjNzk0OTE7dG9rZW49ZXhhbXBsZTtvYmplY3Q9bXktcnNhLTIwNDgA" | base64 -d; echo
pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=74a2bc56fbc79491;token=example;object=my-rsa-2048
[user@host ~/pkcs11]$
(The DNSKEY key ID it assigns may differ for you as it is chosen randomly; it does not matter.)
See the
dnssec-keygen(1)
manpage for more details on its usage.
Create a DNSKEY by importing it from the HSM
Alternatively, the
dnssec-keyfromlabel
program can be used to import an existing key from a HSM. The public key
is imported. We have to provide a label or a full PKCS#11 URI of an
object to import the key from, using the dnssec-keyfromlabel -l
argument. In this case, we will use a PKCS#11 URI, and assume the
existing object is labeled my-rsa-2048. So we append
;object=my-rsa-2048 to the URI that p11tool returned above.
We create a DNSKEY with algorithm RSASHA256 by importing an existing
key labelled my-rsa-2048 from the HSM:
[user@host ~/pkcs11]$ dnssec-keyfromlabel -l "pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=74a2bc56fbc79491;token=example;object=my-rsa-2048" -a RSASHA256 -n ZONE example.com
Kexample.com.+008+44679
[user@host ~/pkcs11]$ cat Kexample.com.+008+44679.key
; This is a zone-signing key, keyid 44679, for example.com.
; Created: 20250705125450 (Sat Jul 5 20:54:50 2025)
; Publish: 20250705125450 (Sat Jul 5 20:54:50 2025)
; Activate: 20250705125450 (Sat Jul 5 20:54:50 2025)
example.com. IN DNSKEY 256 3 8 AwEAAacgSZiqG1VQeDSaRGKlCLGOOg2cB+O3WAgwkF+KhidndsG1/Ifc HcPKJ4UqYKReQYqnydLihAcfzsLD2uRZGEUaLk8V7T9gaFqavmUVgSbL J/h+2e2Z+wTDVcmaTImGguXjKlg0/Teh5w/H2uoU8fJgvub4U0++gOxR OK+W7pB+PEV1HyCYeIdYqRtrBm8mv58EyNtkiXZ2acIQ6Wp6p9S4uM4B /3Ist5LXZFcQ/t3IKdO5kjtj6MKw7+0HsoGt7UcmBjt68B8T7GxfLMo+ xTQqVsBW0zlEuu6KMpD8Vd0YXrzjhU49UkR+JqW7rzWuEWP3pD6VMHG7 mbgYl9FAK/U=
[user@host ~/pkcs11]$ cat Kexample.com.+008+44679.private
Private-key-format: v1.3
Algorithm: 8 (RSASHA256)
Modulus: pyBJmKobVVB4NJpEYqUIsY46DZwH47dYCDCQX4qGJ2d2wbX8h9wdw8onhSpgpF5BiqfJ0uKEBx/OwsPa5FkYRRouTxXtP2BoWpq+ZRWBJssn+H7Z7Zn7BMNVyZpMiYaC5eMqWDT9N6HnD8fa6hTx8mC+5vhTT76A7FE4r5bukH48RXUfIJh4h1ipG2sGbya/nwTI22SJdnZpwhDpanqn1Li4zgH/ciy3ktdkVxD+3cgp07mSO2PowrDv7Qeyga3tRyYGO3rwHxPsbF8syj7FNCpWwFbTOUS67ooykPxV3RhevOOFTj1SRH4mpbuvNa4RY/ekPpUwcbuZuBiX0UAr9Q==
PublicExponent: AQAB
Label: cGtjczExOm1vZGVsPVNvZnRIU00lMjB2MjttYW51ZmFjdHVyZXI9U29mdEhTTSUyMHByb2plY3Q7c2VyaWFsPTc0YTJiYzU2ZmJjNzk0OTE7dG9rZW49ZXhhbXBsZTtvYmplY3Q9bXktcnNhLTIwNDgA
Created: 20250705125450
Publish: 20250705125450
Activate: 20250705125450
[user@host ~/pkcs11]$
Unlike the dnssec-keygen command in the previous section, no key size
can be specified when using dnssec-keyfromlabel as the key is already
present in the HSM and has its existing key size.
The value of the Label: field printed above from the
Kexample.com.+008+44679.private file is a Base64 encoded PKCS#11 URI
string of the object. There is no private key material in this file, and
this file serves like a symbolic link to the object my-rsa-2048 in the
HSM.
[user@host ~/pkcs11]$ echo -n "cGtjczExOm1vZGVsPVNvZnRIU00lMjB2MjttYW51ZmFjdHVyZXI9U29mdEhTTSUyMHByb2plY3Q7c2VyaWFsPTc0YTJiYzU2ZmJjNzk0OTE7dG9rZW49ZXhhbXBsZTtvYmplY3Q9bXktcnNhLTIwNDgA" | base64 -d; echo
pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=74a2bc56fbc79491;token=example;object=my-rsa-2048
[user@host ~/pkcs11]$
See the
dnssec-keyfromlabel(1)
manpage for more details on its usage.
Sign a DNS zone using the DNSKEY
Now that we have the Kexample.com.+008+44679.key and
Kexample.com.+008+44679.private files, we can sign a master file for
the example.com zone. We use the the
dnssec-signzone program to sign zones.
Let's create a sample master file for the example.com. zone, and also
check that it is syntactically correct:
[user@host ~/pkcs11]$ cat > example.com.db
$TTL 3600
example.com. IN SOA . . 2025070500 600 600 1200 600
example.com. NS ns1.example.com.
ns1.example.com. A 127.0.0.1
example.com. A 127.0.0.1
[user@host ~/pkcs11]$ named-checkzone example.com example.com.db
zone example.com/IN: loaded serial 2025070500
OK
[user@host ~/pkcs11]$
This zone's data can be signed now using the HSM. We use smart signing
by calling dnssec-signzone -S so that it discovers the DNSKEY
automatically in the Kexample.com.+008+44679.key and
Kexample.com.+008+44679.private files.
[user@host ~/pkcs11]$ dnssec-signzone -S -z -o example.com example.com.db
Fetching ZSK 44679/RSASHA256 from key repository.
Verifying the zone using the following algorithms: RSASHA256.
Zone fully signed:
Algorithm: RSASHA256: KSKs: 0 active, 0 stand-by, 0 revoked
ZSKs: 1 active, 0 stand-by, 0 revoked
example.com.db.signed
[user@host ~/pkcs11]$
The signed zone's data is saved to the master file
example.com.db.signed and has the following content:
[user@host ~/pkcs11]$ cat example.com.db.signed
; File written on Sat Jul 5 21:22:21 2025
; dnssec-signzone version 1.99.3.20250623003957.08c26b66c1
example.com. 3600 IN SOA . . (
2025070500 ; serial
600 ; refresh (10 minutes)
600 ; retry (10 minutes)
1200 ; expire (20 minutes)
600 ; minimum (10 minutes)
)
3600 RRSIG SOA 8 2 3600 (
20250804122221 20250705122221 44679 example.com.
gOVYSFEU+F6oApb4xEFAhj77VI8XGhVxwiU+
LzVySfD/j6yL1kCGOez/f/c4jxxZzCP36ztB
MLejT6A/fuSfGVIRRsjkQ+2AK+p3z0wiSyYL
zSMeDgiQqjh5JwQ+CaR/lAa2+AzQG6goe76k
3ZQbda6E/4EK733jA2Ahh3Afl5YUJH3yqvDo
ZtVavZxd+Jo1c7FQBKn24NotXDjqewaCZ3XX
TxmmFSBzdy1Vv3PpnapF4FzLvnWqsTbR6v/Z
JQPqKvxGjUDc5ETp+aOG59JkzSE9vPj/bGZQ
OiQhUQ0VL4iDpyiN98+y8oQ3Tvp9Lh7KNwRW
beC9Lgf8CFxNg5BgUw== )
3600 NS ns1.example.com.
3600 RRSIG NS 8 2 3600 (
20250804122221 20250705122221 44679 example.com.
IdGBtB2RUyTEcpxxCoVqa6XKyYaMgyGaZhp3
dj31FNV7xyH2xLM7j9d5A8qr1ORMLm31UCB/
0tLcxndqFcH0gXipxm78rppEFGiLSNPEDs1q
8owr+zzjJ2Dtkf5Sg008BmDrAMFMHlvHQ2E0
Ij8wjdRz11NDVkdwkW/MPMp1B1RSTLZujXx3
2LQXMs1RQcrc4Nk70juyl8UNe2nUOJuEO6SV
2Y8YtDqCdWa2bgmrncm7OE+SJ79UZOG6gsu/
688V39AaN/IMK57Ua59aeN6C7bZQ3D8YWKo5
IDS+Mza+jAeydQpjFEZSBC5Z9sGReIpPRyPg
3euahyjMhnx5DWkZUg== )
3600 A 127.0.0.1
3600 RRSIG A 8 2 3600 (
20250804122221 20250705122221 44679 example.com.
mJ1Ma0CgANegpwh4Ox6wIxxMiO/W99PLE66w
mteJCTiJWdoNjiQsaK8CPpaehP+ttF4WazDs
0DNaZUzRBiaWtLa5PIJGRYlfHB/gWkWRy3Oq
3HeaVRU0i59GW0/cCt4oJsJF3KPziFLIdmUU
Ge9GA7x17m+Fyp/BDo6EfPsYgOZlMY+GBofC
DfxsZzgPhI6+MN6uLkDLrmwtuZ9KS3lIu4I5
tdIx9PLRteH1CEEAhUAHq0wFAs39TQs2uB27
TiHzqTjfergtPyZYHWc7Swry3JahKLcQw0kB
n+4q1tbb8ktOZqUszrFMt+xKzi948rkFJswU
DFID+NQzpSNRGtOzaw== )
600 NSEC ns1.example.com. A NS SOA RRSIG NSEC DNSKEY
600 RRSIG NSEC 8 2 600 (
20250804122221 20250705122221 44679 example.com.
kYFu3pdpBfI+7CITOXdKULrwCpbmVQlO+jC/
sNPcdDSNuInm8cq5UVy05/vV0FxPSJEhY1qr
38FQbYl9CAI0EuIDvlwhadlO6kli4A4QVlER
TB6diBOOHV00eyUYOwg/gNYDKaKGdh1msAhV
QnvIScf9Z5QgCglnA+vOuVngGM8u4jNQjUTf
vReOgqr4ZoWfFommJHVMzbtM8gHVabPw4ExB
hoAeqe4o4ZPPReBWh75ounOUXMhrIS48YJ5/
/X6K54m7tAKEHL7yQ21sM5OELNWe+CqXnYcK
Bq6NjYPRr+aNwqpIQ+SmsIGhE9CBbrwgka39
JpLv3QxzY+CUNaJJmA== )
3600 DNSKEY 256 3 8 (
AwEAAacgSZiqG1VQeDSaRGKlCLGOOg2cB+O3
WAgwkF+KhidndsG1/IfcHcPKJ4UqYKReQYqn
ydLihAcfzsLD2uRZGEUaLk8V7T9gaFqavmUV
gSbLJ/h+2e2Z+wTDVcmaTImGguXjKlg0/Teh
5w/H2uoU8fJgvub4U0++gOxROK+W7pB+PEV1
HyCYeIdYqRtrBm8mv58EyNtkiXZ2acIQ6Wp6
p9S4uM4B/3Ist5LXZFcQ/t3IKdO5kjtj6MKw
7+0HsoGt7UcmBjt68B8T7GxfLMo+xTQqVsBW
0zlEuu6KMpD8Vd0YXrzjhU49UkR+JqW7rzWu
EWP3pD6VMHG7mbgYl9FAK/U=
) ; ZSK; alg = RSASHA256 ; key id = 44679
3600 RRSIG DNSKEY 8 2 3600 (
20250804122221 20250705122221 44679 example.com.
GRds9ebVM8g6n6GqswPoiaEV5xK+2DcxSXZG
qgLwu8eSakGAoZQkjdZ983NhL1cGDfk5q7pL
dvxpnCNZ4tzg7AKKfXr2BEqIGt7Xo9KLtKt0
SdsF5RioWyL3iRGjeFbaqxK5G2Dy1CCQD7DJ
KHvmv+pfnp1ls3i6xKNRjXsVrNPF1iEyivt8
l5NF1AsaHOfk/PIMrlpihzFBxM2A9S8XXwn7
j6KYm15FWl9RmU2y5akzPTNtVJPVFbVJ0OcD
DNIuNd4kzF8IWY3zigrfhuH3xPzGAhop30PH
r9ANnTASD7gzcVPGjkyfSXaxOBVKTtK/cmpP
/IK+CLaM1iL3fOfHyA== )
ns1.example.com. 3600 IN A 127.0.0.1
3600 RRSIG A 8 3 3600 (
20250804122221 20250705122221 44679 example.com.
jTuSieMy/0Faveu9ODXYAZ8NTIZqo1zJ//IC
syNX3Fs908G+sUqyZNnH0JHEC5cJQvfj0OEk
Mx8aW7PkyO7gKSraUDHs5F8fws0WNNueY+Oe
Zi6H6NA1l99wUxKLcaakzFZj6XgKYCLwSO1J
yyQrPb9Zs6FNkx+GaaeRbKq7xHeK/bMTMggt
7P3hhsFfYIj4KI0hgP23Jomc+OePZe6eDHee
WUHpod5TnLDXOri7IkLLuHxUsLo9Xnjp9FF5
HJcCvx1/XRip6D1kJqZ0x6w1kTEaA0E5YfF0
6uVfxB5kjmiN40EoFdpvfylRDZVQPPey214e
MTkvp3IOwDgqb8yMrQ== )
600 NSEC example.com. A RRSIG NSEC
600 RRSIG NSEC 8 3 600 (
20250804122221 20250705122221 44679 example.com.
KmGYCG01vI2SFsbP6NhXTyDWEzr08MF7Qiy9
TmqK5gL4cTwwIMhsAUWJG3YXMKGiotpMBsW5
kvso3od/+fisEGrDA9ik4higHwTZY+aocX1O
DLUTqNaVQ/KJ/vHO96jtFb8lkvyfuFO+K/tY
GXj+sd6Ol3sdRyUkAU17GRpchLgAjFGWImX8
s5WXfWDpmCVMSy7ORQxX6qfUhuqSIGcKjGbi
o1Uw1n4D7LxRSqbKgLD5i+YVPyUjOipdTzZm
c+X6qfUF5lf1bXuJbto8MSORwUGyA9jbG64H
mV8xPAV3lI627RNCOretwtAl2sRMr2c15XAy
M8NLrOtLjl6xBCKe4A== )
[user@host ~/pkcs11]$
See the
dnssec-signzone(1)
manpage for more details on its usage.
Verify the signed zone's data
Though the signed zone's data is automatically verified as part of the
signing process, we can explicitly verify the signed zone's data to
check that it is signed properly using the
dnssec-verify
program:
[user@host ~/pkcs11]$ dnssec-verify -z -o example.com example.com.db.signed
Loading zone 'example.com' from file 'example.com.db.signed'
Verifying the zone using the following algorithms: RSASHA256.
Zone fully signed:
Algorithm: RSASHA256: KSKs: 0 active, 0 stand-by, 0 revoked
ZSKs: 1 active, 0 stand-by, 0 revoked
[user@host ~/pkcs11]$
See the
dnssec-verify(1)
manpage for more details on its usage.
This ends the example.
Loop version 1.99.3 is available
July 3, 2025
Loop version 1.99.3 has been released (tagged at
1.99.3.20250623003957.08c26b66c1). This is in a series of releases
made from the 1.99 development branch.
The following are release notes for Loop 1.99.3:
- RT1488: Some textual changes to the
arpanamemanpage were reverted. - RT1502: OpenSSL and Kerberos library detection was improved. While this may not appear to be a user-visible change, it improves the linker flags that are used.
- RT1500: Support for Red Hat Enterprise Linux 10 was added. Loop RPM
packages for RHEL 10 are now available for
x86_64andaarch64platforms. - RT1503: Support for OpenSSL library versions older than OpenSSL 3 has been dropped. All of Loop's supported platforms have the OpenSSL 3 library.
- RT1503: Usage of the libcrypto library API has been updated to use current OpenSSL 3 APIs, and all deprecated API usage has been removed.
- RT1503: PKCS#11 support has been updated to use the pkcs11-provider OpenSSL3 provider. The older OpenSSL engine support has been dropped completely. (Examples of PKCS#11 usage for DNSSEC will be documented soon.)
- RT1503: DNSSEC private keys of all the supported DNSKEY algorithms
including
RSASHA256,RSASHA512,ECDSAP256SHA256,ECDSAP384SHA384,ED25519, andED448can now be used from PKCS#11 accessible HSMs. All of these algorithms are tested in our automated system tests suite using the pkcs11-provider OpenSSL3 provider, and the SoftHSMv2 PKCS#11 provider. - RT1507:
dnssec-keygen(1)can now be used to directly generate keys on PKCS#11 accessible HSMs for all the supported DNSKEY algorithms includingRSASHA256,RSASHA512,ECDSAP256SHA256,ECDSAP384SHA384,ED25519, andED448. The-largument was added for it. The method of importing the public key of an existing keypair on the HSM usingdnssec-keyfromlabel(1)can also be used. - RT1504: Support for the
RSASHA1DNSKEY algorithm on the OS platform running Loop is checked before use. Some operating systems such as Fedora 41 (and above) and Red Hat Enterprise Linux 10 disable support forRSASHA1in their default configuration. Support is checked by signing and verifying some data using the algorithm to see if it succeeds — the algorithm is disabled (similar to thedisable-algorithmsconfig option ofnamed.conf(5)) if the check fails. - RT1505: The
named(8)nameserver now explicitly disablesRSAMD5,DSA,NSEC3DSA, andECCGOSTin its builtin configuration'sdisable-algorithmsoption. It also explicitly disablesGOSTin its builtin configuration'sdisable-ds-digestsoption. - RT1511: Porting to FreeBSD has been completed and our unit tests and system tests suite pass on it. We expect to publish packages for FreeBSD soon.
Some more development releases will be made from this branch until Loop 2.0 is ready to be branched. You can read about Loop branches and version numbering.
Loop version 1.99.1 is available
January 3, 2025
Loop version 1.99.1 has been released (tagged at
1.99.1.20250102162327.d6e6dd4b1f). This is the first release made from
the 1.99 development branch. Currently, there are no release notes.
Some more development releases will be made from this branch until Loop 2.0 is ready to be branched. You can read about Loop branches and version numbering.
Banu Systems Private Limited is incorporated
November 18, 2024
Banu Systems Private Limited has been incorporated today in Singapore. The company's primary activity is software development. We have incorporated to be an incubator for several software products. We will begin by publishing Loop and related software modules.