Using RPC-with-TLS with DNS-Based Authentication of Named Entities
draft-cel-nfsv4-rpc-tls-dane-00
This document is an Internet-Draft (I-D).
Anyone may submit an I-D to the IETF.
This I-D is not endorsed by the IETF and has no formal standing in the
IETF standards process.
| Document | Type | Active Internet-Draft (individual) | |
|---|---|---|---|
| Author | Chuck Lever | ||
| Last updated | 2026-09-01 | ||
| RFC stream | (None) | ||
| Intended RFC status | (None) | ||
| Formats | |||
| Stream | Stream state | (No stream defined) | |
| Consensus boilerplate | Unknown | ||
| RFC Editor Note | (None) | ||
| IESG | IESG state | I-D Exists | |
| Telechat date | (None) | ||
| Responsible AD | (None) | ||
| Send notices to | (None) |
draft-cel-nfsv4-rpc-tls-dane-00
Network File System Version 4 C. Lever, Ed.
Internet-Draft 1 September 2026
Updates: 9289 (if approved)
Intended status: Standards Track
Expires: 5 March 2027
Using RPC-with-TLS with DNS-Based Authentication of Named Entities
draft-cel-nfsv4-rpc-tls-dane-00
Abstract
RPC-with-TLS assumes that DNS-Based Authentication of Named Entities
(DANE) is available on platforms where it is deployed, and recommends
that a client operating under an opportunistic security policy check
for a TLSA record before initiating an association, but does not say
how. This document specifies the missing details, so that a TLSA
record authenticates an RPC server with no certification authority
trust anchor provisioned on the client. It updates RFC 9289.
About This Document
This note is to be removed before publishing as an RFC.
The latest revision of this draft can be found at
https://chucklever.github.io/i-d-rpc-tls-dane/draft-cel-nfsv4-rpc-
tls-dane.html. Status information for this document may be found at
https://datatracker.ietf.org/doc/draft-cel-nfsv4-rpc-tls-dane/.
Discussion of this document takes place on the nfsv4 Working Group
mailing list (mailto:nfsv4@ietf.org), which is archived at
https://mailarchive.ietf.org/arch/browse/nfsv4/. Subscribe at
https://www.ietf.org/mailman/listinfo/nfsv4/.
Source for this draft and an issue tracker can be found at
https://github.com/chucklever/i-d-rpc-tls-dane.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Lever Expires 5 March 2027 [Page 1]
Internet-Draft RPC TLS with DANE September 2026
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 5 March 2027.
Copyright Notice
Copyright (c) 2026 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Revised BSD License text as
described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Revised BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2. Updates to RFC 9289 . . . . . . . . . . . . . . . . . . . . . 6
3. Conventions and Definitions . . . . . . . . . . . . . . . . . 7
4. Overview of Operation . . . . . . . . . . . . . . . . . . . . 8
4.1. DANE policy modes . . . . . . . . . . . . . . . . . . . . 9
5. TLSA Records for RPC Services . . . . . . . . . . . . . . . . 9
5.1. Owner names . . . . . . . . . . . . . . . . . . . . . . . 10
5.2. Alternate ports . . . . . . . . . . . . . . . . . . . . . 10
5.3. Port provenance . . . . . . . . . . . . . . . . . . . . . 10
5.4. Publishing and key rollover . . . . . . . . . . . . . . . 11
6. The Reference Name . . . . . . . . . . . . . . . . . . . . . 11
6.1. Requirements on the reference name . . . . . . . . . . . 11
6.2. Destinations that carry no DANE binding . . . . . . . . . 12
7. Locating the TLSA RRset . . . . . . . . . . . . . . . . . . . 12
7.1. Resolver trust . . . . . . . . . . . . . . . . . . . . . 12
7.2. DNS outcome classes . . . . . . . . . . . . . . . . . . . 13
7.3. Candidate TLSA base domains . . . . . . . . . . . . . . . 14
7.4. Evaluation and result reduction . . . . . . . . . . . . . 14
7.5. Usable records and digest algorithm agility . . . . . . . 16
7.6. The selected TLSA base domain, SNI, and reference
identifiers . . . . . . . . . . . . . . . . . . . . . . . 17
8. Authenticating the Server . . . . . . . . . . . . . . . . . . 17
8.1. Certificate usages . . . . . . . . . . . . . . . . . . . 17
8.2. DANE-EE(3) . . . . . . . . . . . . . . . . . . . . . . . 18
Lever Expires 5 March 2027 [Page 2]
Internet-Draft RPC TLS with DANE September 2026
8.3. DANE-TA(2) . . . . . . . . . . . . . . . . . . . . . . . 18
8.4. Required client behavior by outcome class . . . . . . . . 19
9. Downgrade Resistance . . . . . . . . . . . . . . . . . . . . 20
9.1. The security floor . . . . . . . . . . . . . . . . . . . 20
9.2. AUTH_TLS probe outcomes . . . . . . . . . . . . . . . . . 21
9.3. Cleartext fallback . . . . . . . . . . . . . . . . . . . 21
9.4. Failure after a handshake is attempted . . . . . . . . . 22
9.5. Coherence within an association attempt . . . . . . . . . 23
10. Association Scope and Policy Granularity . . . . . . . . . . 23
10.1. Policy is per association . . . . . . . . . . . . . . . 23
10.2. Transports joining an association later . . . . . . . . 24
10.3. Derived associations . . . . . . . . . . . . . . . . . . 24
11. Auditing . . . . . . . . . . . . . . . . . . . . . . . . . . 25
12. Implementation Status . . . . . . . . . . . . . . . . . . . . 25
12.1. tlshd (ktls-utils) . . . . . . . . . . . . . . . . . . . 26
13. Security Considerations . . . . . . . . . . . . . . . . . . . 27
13.1. What DANE authentication does and does not establish . . 27
13.2. Replay and the limits of revocation . . . . . . . . . . 27
13.3. Fail-closed behavior is a denial-of-service surface . . 28
13.4. Unauthenticated port selection . . . . . . . . . . . . . 28
13.5. Derived associations . . . . . . . . . . . . . . . . . . 29
13.6. Privacy considerations . . . . . . . . . . . . . . . . . 29
13.7. Client authentication . . . . . . . . . . . . . . . . . 30
14. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 30
15. References . . . . . . . . . . . . . . . . . . . . . . . . . 30
15.1. Normative References . . . . . . . . . . . . . . . . . . 30
15.2. Informative References . . . . . . . . . . . . . . . . . 31
Appendix A. Deployment Considerations . . . . . . . . . . . . . 33
A.1. Publishing TLSA records for RPC services . . . . . . . . 33
A.2. Unsigned zones prove nothing . . . . . . . . . . . . . . 34
A.3. Downgrade resistance of opportunistic DANE . . . . . . . 34
Appendix B. Open Issues . . . . . . . . . . . . . . . . . . . . 34
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 35
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 35
1. Introduction
RPC-with-TLS [RFC9289] protects Remote Procedure Call [RFC5531]
traffic by encapsulating it in a TLS [RFC9846] session. A client
discovers whether a server supports the mechanism by sending a NULL
procedure carrying the AUTH_TLS authentication flavor, in cleartext,
before the TLS handshake begins. A server that supports RPC-with-TLS
replies with a "STARTTLS" token, after which the client sends a
ClientHello on the same connection or to the same UDP destination
port.
Lever Expires 5 March 2027 [Page 3]
Internet-Draft RPC TLS with DANE September 2026
Section 5.2.1 of [RFC9289] requires every RPC-with-TLS implementation
to support authenticating server certificates by PKIX [RFC5280] trust
against a locally configured expected DNS-ID. The client resolves
that name in the DNS to reach the server, but the DNS supplies
nothing that authenticates the server or that says the server is
expected to speak TLS. Two deployment problems follow:
* Trust anchor distribution. Every client must be provisioned with
the certification authority material needed to validate the
servers it will contact, and kept current as certificates are
rotated. A server operator without a certification authority has
no way to tell clients what key to expect other than by
configuring each of them.
* STRIPTLS. The AUTH_TLS probe and its reply are exchanged in
cleartext. An on-path attacker who suppresses the probe, or
rewrites the reply so that it does not carry the "STARTTLS" token,
makes a TLS-capable server appear not to support RPC-with-TLS, and
a client under an opportunistic policy proceeds in cleartext.
Nothing the client learns on the way to the server tells it that
TLS was expected.
[RFC9289] anticipated these problems and pointed at the same remedy
for them, DNS-Based Authentication of Named Entities (DANE)
[RFC6698], in several places:
* Section 1 lists DNSSEC/DANE among the platform facilities that
RPC-with-TLS support is assumed to build on.
* Section 6.1.1 offers a TLSA record as one of two mitigations for
STRIPTLS attacks: it "can alert clients that TLS is expected to
work, and provide a binding of a hostname to the X.509 identity",
and a client under an opportunistic security policy should check
for one before initiating an association. The other mitigation, a
policy that requires TLS on every connection, is strongly
encouraged where TLSA records are not available.
* Section 6.4 lists among its best security policy practices that,
when using AUTH_NULL or AUTH_SYS, "both peers are RECOMMENDED to
have DNSSEC TLSA records" together with "a security policy that
requires mutual peer authentication and rejection of a connection
when host authentication fails".
A TLSA RRset addresses both problems at once. Published in a zone
the operator already signs, it carries the binding between a server
name and its public key in the DNS, alongside the name the client had
to resolve anyway, so no client needs certification authority
material for that server. And because a DNSSEC-validated TLSA RRset
Lever Expires 5 March 2027 [Page 4]
Internet-Draft RPC TLS with DANE September 2026
is an authenticated statement by the server operator that TLS is
expected to work, a client holding one can no longer treat silent
fallback to cleartext as acceptable: the STRIPTLS attack fails
closed.
However, [RFC9289] offers a sketch rather than a specification. It
leaves unspecified the owner names at which a client queries for the
TLSA record, whether a lookup failure is treated as an absent record,
the name the client sends in SNI and verifies in the server's
certificate when a record is found, and which outcomes of the
AUTH_TLS probe still permit cleartext. Two independent
implementations resolving these questions differently would not
interoperate: one fails a handshake that the other completes. A
client that makes the permissive choice at each point obtains none of
the downgrade resistance a TLSA record appears to promise.
To close these gaps, this document specifies DANE for RPC-with-TLS
completely enough to implement and deploy, following the operational
specifications of [RFC7671] and [RFC7672] and making the RPC-specific
choices those documents leave to application protocols.
1.1. Scope
This document defines client behavior and places no requirements on
RPC servers. Its one requirement on the server side, in Section 5.4,
binds the publisher of the TLSA RRset; Appendix A gives the
operational guidance that accompanies it. A server that conforms to
[RFC9289] interoperates with a client implementing this document
without modification.
This document specifies the use of DANE to authenticate an RPC server
to an RPC client. Authentication of an RPC client to an RPC server
by means of DANE is out of scope; see Section 13.7.
This document applies where the server authenticates itself with a
certificate. A server association that uses the pre-shared key
mechanism of Section 5.2.2 of [RFC9289] presents no certificate for
DANE to authenticate. The procedures in this document do not apply
to it. The exclusion extends to downgrade resistance: such an
association does not consult TLSA records to pin a security floor
(Section 9.1). The provisioned key is itself the operator's
commitment to TLS, and it is already in the client's possession, so
local policy can require TLS for the association without a DNS
lookup.
Section 5.1 of [RFC7671] also provides for matching a DANE-EE(3)
record against a raw public key [RFC7250]; [RFC9289] defines no way
to convey one, so that case does not arise here.
Lever Expires 5 March 2027 [Page 5]
Internet-Draft RPC TLS with DANE September 2026
TLSA owner names are defined here for the transports [RFC9289] itself
defines, namely TLS over TCP and DTLS over UDP. A future document
that specifies RPC over another transport is expected to define the
corresponding owner-name convention.
2. Updates to RFC 9289
Two requirements of [RFC9289] are changed here:
* Section 5.2.1 of [RFC9289] requires PKIX path validation and a
check of the expected DNS-ID or iPAddress subjectAltName against
the presented certificate. Those requirements continue to apply
unchanged wherever this document requires PKIX authentication, and
to the name checks performed for certificate usage DANE-TA(2).
They do not apply to a server authenticated by a DANE-EE(3) match,
for the reasons given in Section 5.1 of [RFC7671] and restated in
Section 8.2.
* Where [RFC9289] cites [RFC6125] for certificate name checks,
clients implementing this document perform those checks per
[RFC9525], which obsoletes [RFC6125]. The additional restriction
in Section 5.2.1 of [RFC9289], that a DNS domain name in an RPC-
with-TLS certificate contain no wildcard character, is retained.
Elsewhere [RFC9289] makes a recommendation or leaves a choice to
local policy. This document replaces each of the following with a
requirement stated in the section named:
* The first bullet of Section 6.1.1 of [RFC9289] recommends a TLSA
check before an association is initiated, and disconnection when
TLS or authentication then fails. Section 7, Section 8.4, and
Section 9.1 replace that recommendation.
* The second bullet of Section 6.1.1 of [RFC9289] recommends a
policy that requires TLS on every connection, and Section 6.4
recommends, for AUTH_NULL and AUTH_SYS, TLSA records for both
peers and rejection of a connection when host authentication
fails. Section 9.1 and Section 9.3 require the server-
authentication half of that behavior where this document pins a
security floor; the client-authentication half is out of scope
(Section 13.7). Where no floor is pinned, Section 9.3 permits
cleartext operation on a well-formed decline; a deployment that
adopts either recommendation in full remains conformant.
* Section 4.1 of [RFC9289] leaves to local policy whether RPC
operation continues in cleartext when the AUTH_TLS probe does not
yield the "STARTTLS" indication. Section 9.3 specifies that
policy, and it is more restrictive than what [RFC9289] permits.
Lever Expires 5 March 2027 [Page 6]
Internet-Draft RPC TLS with DANE September 2026
This document also extends the audit log that Section 6.1 of
[RFC9289] requires: Section 11 adds to the required content of that
log and permits it to be assembled from correlatable events.
Nothing in this document changes the TLS version, ALPN, cipher suite,
confidentiality, or transport requirements of [RFC9289], nor its
provisions for pre-shared keys or for RPCSEC_GSS.
3. Conventions and Definitions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
This document assumes a working knowledge of RPC version 2 [RFC5531],
of RPC-with-TLS [RFC9289], and of DANE [RFC6698] [RFC7671]. It uses
the DNSSEC validation states "secure", "insecure", "bogus", and
"indeterminate" as defined in Section 5 of [RFC4033].
The following terms are used as defined here.
Reference name: The DNS domain name that identifies to the client
the server it is contacting. For an association established by
administrative configuration, it is the name that appeared in that
configuration -- for NFS, the server component of the mount
specification. For a derived association (Section 10.3), it is
the name the upper-layer protocol supplied. Section 6 states the
requirements on it.
TLSA base domain: The domain name to which the port and transport
labels are prepended to form a TLSA owner name, as in Section 3 of
[RFC6698]. A client may have more than one candidate base domain
for a single reference name; see Section 7.3.
Selected TLSA base domain: The candidate TLSA base domain whose
evaluation produced the DNS outcome class for the association
attempt. See Section 7.6.
DNS outcome class: One of the five results defined in Section 7.2
that a client assigns to a TLSA lookup for a given reference name,
port, and transport.
Usable record: A TLSA record that the client is able to use to
authenticate a server certificate, in the sense of Section 4.1 of
[RFC6698] and as further constrained by Section 7.5.
Lever Expires 5 March 2027 [Page 7]
Internet-Draft RPC TLS with DANE September 2026
Server association: The set of transport connections a client
operates toward one server, selected by one reference name, and
treated as a single administrative and security unit; [RFC9289]
uses "association" informally. It begins with the client's first
association attempt and ends when the administrative action that
created it is undone. For NFS, it is what a mount point and any
additional connections established for it are carried over, and it
lasts from mount to unmount.
Association attempt: One attempt by a client to establish a
transport connection for a server association, from the selection
of a destination through either the completion of a TLS handshake,
a decision to proceed in cleartext, or failure.
Security floor: The minimum acceptable security level that a client
has determined for a server association, and below which it MUST
NOT operate. See Section 9.1.
DANE policy mode: The client's configured disposition toward DANE
for a given server association: disabled, opportunistic, or
mandatory. See Section 4.1.
4. Overview of Operation
A client that has DANE enabled for a server association performs, in
addition to what [RFC9289] already specifies, the following steps.
1. It derives a reference name for the server it is about to
contact, subject to the requirements in Section 6. A destination
the client cannot name in the DNS, such as one selected by IP
address literal, carries no DANE binding and is handled per
Section 6.2.
2. It looks up TLSA records at the owner names derived from that
reference name, the destination port, and the transport, and
reduces the results to a single DNS outcome class. Section 7
specifies this procedure.
3. It applies the outcome class to the association attempt. An
outcome of SECURE_USABLE or SECURE_UNUSABLE pins a security floor
for the association (Section 9.1), which constrains whether
cleartext operation remains permissible and which failures are
recoverable.
4. If a TLS handshake takes place, it authenticates the server
according to the outcome class: by DANE (Section 8) where the
client found a usable record, and by the PKIX rules of
Section 5.2.1 of [RFC9289] otherwise.
Lever Expires 5 March 2027 [Page 8]
Internet-Draft RPC TLS with DANE September 2026
5. It records the policy inputs, the decision, and the
authentication result in the audit log that Section 6.1 of
[RFC9289] already requires (Section 11).
Steps 2 and 3 concern the association attempt as a whole and can be
performed before the AUTH_TLS probe is sent; step 4 happens during
the handshake. How an implementation divides the work is not
specified; Section 9.5 states the two constraints a division MUST
respect.
4.1. DANE policy modes
A client implementing this document MUST support the following three
policy modes, and MUST allow the mode to be configured independently
for each server association.
Disabled: The client performs none of the procedures in this
document. Its behavior is that specified by [RFC9289].
Opportunistic: The client performs the procedures in this document.
A DNS outcome class of SECURE_USABLE or SECURE_UNUSABLE pins a
security floor and constrains the association as specified in
Section 8.4 and Section 9.1. SECURE_ABSENT and INSECURE pin no
floor; Section 9.3 then governs whether the attempt may proceed in
cleartext, and any TLS session established is authenticated by the
PKIX rules of Section 5.2.1 of [RFC9289]. ERROR fails the attempt
(Section 8.4). This mode is intended for fleet-wide deployment
against a server population that has not uniformly published TLSA
records; see Appendix A.3.
Mandatory: The client performs the procedures in this document and
additionally requires that the server be authenticated by DANE.
Any outcome other than SECURE_USABLE followed by a successful DANE
authentication MUST fail the association attempt. A destination
that cannot carry a DANE binding at all (Section 6.2) fails rather
than falling back to PKIX.
Mandatory mode never silently degrades. An implementation that lacks
some part of this specification, such as a transport for which it
defines no owner name, MUST fail an association attempt made in
mandatory mode rather than proceed without the protection the mode
was configured to obtain.
5. TLSA Records for RPC Services
Lever Expires 5 March 2027 [Page 9]
Internet-Draft RPC TLS with DANE September 2026
5.1. Owner names
TLSA owner names for RPC services follow the convention in Section 3
of [RFC6698] without modification. The owner name is formed by
prepending, to a TLSA base domain:
* the second label "_tcp" for RPC-with-TLS over TCP, or "_udp" for
RPC-with-DTLS over UDP, per Sections 5.1.1 and 5.1.2 of [RFC9289];
and
* the first label, consisting of an underscore followed by the
decimal representation, without leading zeros, of the port number
to which the client connects.
For example, an NFS server reached at "nfs.example.com" on the
default NFS port over TCP publishes its TLSA RRset at
"_2049._tcp.nfs.example.com".
5.2. Alternate ports
The port in the owner name is the port to which the client actually
connects, not a registered port for the RPC program in use. RPC
services are routinely offered on other ports, by site convention or
by local configuration: a service reached on port 20490 over TCP at
"nfs.example.com" publishes its TLSA RRset at
"_20490._tcp.nfs.example.com", and a server that offers the same
service on several ports publishes one TLSA RRset per port.
Because the port is part of the owner name, a TLSA RRset
authenticates the server at a known port and says nothing about the
same server at another port, in the same way that Section 4.1 of
[RFC9289] observes that a successful AUTH_TLS probe on one port and
transport implies nothing about any other.
5.3. Port provenance
The distinction that matters for downgrade resistance is not the
value of the port but where the client obtained it.
An RPC client may learn the port for a program from the server's
RPCBIND service [RFC1833], whose replies are not authenticated. An
attacker who substitutes a port in an RPCBIND reply thereby
substitutes the first label of the TLSA owner name the client will
query. The query is made at a name for which the operator published
nothing, and the client assigns SECURE_ABSENT (Section 7.2) and pins
no floor.
Accordingly:
Lever Expires 5 March 2027 [Page 10]
Internet-Draft RPC TLS with DANE September 2026
* DANE authentication as specified in Section 8 applies at whatever
port the client connects to, whatever the provenance of that port.
* A client MUST NOT pin a security floor (Section 9.1) on the basis
of a DNS outcome derived from a port the client obtained from an
unauthenticated source. Ports obtained from local configuration,
including a configured default for the RPC program, are trusted
for this purpose; ports obtained from an unauthenticated RPCBIND
reply, or from any other unauthenticated in-band source, are not.
A TLSA RRset can authenticate a server at a port the client already
knew. It cannot retroactively secure the client's selection of that
port. Section 13.4 describes how a client obtains ports from an
authenticated source.
5.4. Publishing and key rollover
Publishers MUST observe the requirements of Section 8 of [RFC7671],
in particular during key rollover: the RRset must at all times
contain a record matching the certificate that every server answering
for the name may present. A client that has pinned a floor fails
rather than falls back when the RRset and the certificate disagree,
so a rollover performed in the wrong order takes the service down.
That is intended, but operators should plan for it.
6. The Reference Name
6.1. Requirements on the reference name
The TLSA base domains a client considers MUST be derived from the
association's reference name, as specified in Section 7.
A client MUST NOT use a name obtained by reverse resolution of the
server's network address as a reference name, or as the basis for
one. Such a name is chosen by whoever controls the reverse zone, and
accepting it would let that party select the TLSA RRset against which
the client authenticates.
Before treating a configured value as a reference name, a client MUST
apply the following input contract.
* If the value is an IPv4 or IPv6 address literal, including an IPv6
literal bearing a zone identifier, it is not a DNS name. The
destination carries no DANE binding; see Section 6.2.
* An internationalized domain name MUST be converted to A-label form
[RFC5890] before it is used to construct an owner name, as
Section 3 of [RFC6698] requires.
Lever Expires 5 March 2027 [Page 11]
Internet-Draft RPC TLS with DANE September 2026
* The value MUST satisfy the syntax and length limits for DNS names
in [RFC1035], in both wire and presentation form. A value with an
empty or over-long label, or one that exceeds the total name
length limit once the port and transport labels have been
prepended, is not usable as a reference name, and the association
attempt is handled as in Section 6.2.
* ASCII case is not significant. A client that compares reference
names -- to decide whether two association attempts concern the
same server association, for instance -- MUST compare them case-
insensitively.
* A trailing empty label, written as a trailing dot in presentation
form, is retained when constructing DNS queries and removed when
the name is used as a Server Name Indication (SNI) value [RFC6066]
or as a PKIX reference identifier.
6.2. Destinations that carry no DANE binding
A destination selected by IP address literal has no DNS name from
which a TLSA base domain could be derived, and DANE does not apply to
it; this matches the treatment of address literals in Section 2.2 of
[RFC7672]. The same holds for a destination whose configured name
fails the input contract above.
For such a destination:
* In opportunistic mode, no floor is pinned and Section 9.3 governs
whether the attempt may proceed in cleartext. If the client
authenticates the server, it does so by the rules of Section 5.2.1
of [RFC9289], which provide for matching an iPAddress
subjectAltName.
* In mandatory mode, the association attempt fails (Section 4.1).
7. Locating the TLSA RRset
7.1. Resolver trust
Every guarantee in this document rests on the client obtaining DNSSEC
validation states it can trust. A client that accepts the AD bit
from a remote validating resolver has moved its trust to that
resolver and to the path between them, which is precisely the kind of
unprotected path this document exists to defend against.
Accordingly, a client implementing this document SHOULD validate
DNSSEC responses itself, or obtain them from a validating resolver it
trusts over a channel whose integrity is protected.
Lever Expires 5 March 2027 [Page 12]
Internet-Draft RPC TLS with DANE September 2026
Section 7.2 classes a failure to load, read, or parse the trust
anchors as ERROR, not INSECURE, since a client without them cannot
distinguish an unsigned zone from a signed one. An anchor maintained
automatically [RFC5011] that has fallen out of date is subject to the
same rule.
7.2. DNS outcome classes
A client reduces the result of its TLSA lookups for one reference
name, port, and transport to exactly one of the following five
outcome classes. Throughout, "usable" has the meaning given in
Section 7.5.
SECURE_USABLE: A DNSSEC-validated TLSA RRset was found, and at least
one record in it is usable. The client authenticates the server
by DANE.
SECURE_UNUSABLE: A DNSSEC-validated TLSA RRset was found, and no
record in it is usable. The operator has committed to TLS, but
the client cannot perform DANE authentication against what was
published.
SECURE_ABSENT: The candidate base domains were exhausted without
finding a validated TLSA RRset, and the last candidate evaluated
yielded a DNSSEC-validated denial of existence. The operator has
published no signed TLSA RRset for this service.
INSECURE: The search ended at a TLSA owner name that lies in a
provably unsigned span of the DNS. DANE does not apply, and no
conclusion can be drawn from the absence or presence of records.
ERROR: The client could not obtain a validated answer. This class
covers a "bogus" or "indeterminate" validation result, a timeout,
a SERVFAIL or other error response, a malformed reply, a failure
to load, read, or parse the resolver's trust anchors, and any
other condition that prevents the client from assigning one of the
four classes above.
An ERROR outcome MUST NOT be treated as equivalent to INSECURE, and
MUST NOT authorize cleartext operation: as Sections 2.1.1 and 2.1.2
of [RFC7672] observe, the conditions that produce it are the ones an
attacker can produce at will. An implementation MAY retry a lookup
that produced ERROR; if no attempt yields a validated answer, the
outcome remains ERROR.
Lever Expires 5 March 2027 [Page 13]
Internet-Draft RPC TLS with DANE September 2026
7.3. Candidate TLSA base domains
RPC-with-TLS has no service location indirection of the kind that MX
or SRV records provide, so the redirection case that Section 7 of
[RFC7671] addresses arises for RPC through CNAME aliasing. A client
therefore determines an ordered list of candidate base domains before
querying for TLSA records, as shown in Figure 1.
CandidateBaseDomains(name):
Resolve the address records for "name" in each address family
the client will use for this association attempt, following
any CNAME chain hop by hop and noting the DNSSEC validation
state of each link.
If any step of that resolution is bogus or indeterminate, or
fails to complete:
return error
If "name" is an alias, and in every address family resolved
the chain reaches the same canonical name, and every link of
every such chain is secure:
return [ canonical-name, name ]
return [ name ]
Figure 1: Determining the candidate base domains
The single-element result covers every case in which the client
cannot show that the redirection itself was authenticated. A client
MUST NOT expand a chain that it has not validated end to end, because
an unvalidated CNAME lets whoever forged it choose the base domain
and therefore the TLSA RRset.
A CNAME encountered at a TLSA owner name itself is followed by
ordinary DNS resolution under the same requirement; a chain with an
insecure or bogus link yields INSECURE or ERROR respectively for that
candidate. Such a CNAME does not change which candidate is the
selected TLSA base domain, since it redirects the records, not the
identity of the service.
7.4. Evaluation and result reduction
A client evaluates the candidate list in order, as shown in Figure 2.
Lever Expires 5 March 2027 [Page 14]
Internet-Draft RPC TLS with DANE September 2026
Evaluate(refname, port, proto):
name = Normalize(refname) ; input contract
if name is an address literal:
return "no DANE binding"
candidates = CandidateBaseDomains(name) ; preceding figure
if candidates is error:
return ERROR
for C in candidates: ; in order
owner = "_" + port + "._" + proto + "." + C
R = Lookup(owner, TLSA)
if R is bogus or indeterminate or failed:
return ERROR
if R is secure and carries a TLSA RRset:
selected_base_domain = C
if AnyUsable(R): ; usability filtering
return SECURE_USABLE
else:
return SECURE_UNUSABLE
if R is secure and is a denial of existence:
continue
if R is insecure:
if C is not the last candidate:
continue
else:
return INSECURE
return SECURE_ABSENT
Figure 2: TLSA lookup and result reduction
The rules this encodes, stated in prose:
* A validated TLSA RRset is final, whether or not the client can use
the records in it. Finding one stops the search; the client does
not fall back to a later candidate in the hope of finding records
it likes better. This is what makes SECURE_UNUSABLE a distinct
outcome rather than a variety of absence.
* A validated denial of existence continues the search, per
Section 7 of [RFC7671], which directs a client that finds no TLSA
record at the expanded name to query at the original name. If no
Lever Expires 5 March 2027 [Page 15]
Internet-Draft RPC TLS with DANE September 2026
candidate remains, the outcome is SECURE_ABSENT. An insecure
answer likewise continues the search, since the operator may have
published a signed RRset at a later candidate.
A client MUST assign the same outcome class as this procedure would
for the same DNS data. Implementations are not required to perform
the queries in this order, or to perform queries whose result cannot
affect the outcome.
7.5. Usable records and digest algorithm agility
Whether a record is usable is determined before any attempt is made
to match it against a certificate, and a record that is usable but
does not match the server's certificate is an authentication failure,
never a reason to reclassify the RRset as unusable. Conflating the
two would let an attacker who can influence the certificate a server
presents convert a DANE mismatch into a fallback.
A client determines the usable records in a validated TLSA RRset as
follows.
1. Discard any record whose RDATA is truncated, whose certificate
association data has a length inconsistent with its matching
type, or that is otherwise malformed.
2. Discard any record whose certificate usage, selector, or matching
type the client has not implemented or has been configured not to
use. Certificate usage support is specified in Section 8.1.
3. Apply digest algorithm agility per Section 9 of [RFC7671]: for
each combination of certificate usage and selector remaining, the
client retains records with a matching type of Full(0), and
records whose matching type is the strongest the client supports
among those present for that usage and selector. Records using a
weaker supported matching type are discarded.
A matching type the client does not support MUST NOT suppress the
strongest type it does support, and malformed records MUST be
discarded in step 1 so that they do not influence the strength
selection in step 3.
If any record survives step 3, the RRset is usable and the outcome is
SECURE_USABLE. If none does, the RRset is unusable and the outcome
is SECURE_UNUSABLE.
Lever Expires 5 March 2027 [Page 16]
Internet-Draft RPC TLS with DANE September 2026
7.6. The selected TLSA base domain, SNI, and reference identifiers
The selected TLSA base domain is the candidate at which the
evaluation in Section 7.4 found a validated TLSA RRset. It is
defined only for the outcome classes SECURE_USABLE and
SECURE_UNUSABLE.
When the outcome is SECURE_USABLE, the selected TLSA base domain MUST
be sent as the Server Name Indication [RFC6066] value and, for
certificate usages other than DANE-EE(3), MUST be the primary
reference identifier for certificate name checks. This is the rule
of Section 7 of [RFC7671].
When the outcome is SECURE_UNUSABLE, the client MUST instead send the
original reference name as the Server Name Indication value, and MUST
use the original reference name as the reference identifier for the
PKIX name checks that Section 8.4 then requires.
This departs from Section 7 of [RFC7671] because of what
SECURE_UNUSABLE means. A DANE client puts the expanded base domain
in SNI because it is prepared to accept a certificate issued for that
name. A client that can use no record in the RRset is about to fall
back to PKIX authentication against the configured name; sending the
base domain in SNI would ask a server that selects its certificate by
SNI for a certificate the client must then reject, and the handshake
fails for a reason unrelated to the security of either name.
The selected TLSA base domain is reported in the audit record
(Section 11) in both cases, so that an operator can see which name
the policy decision was derived from.
8. Authenticating the Server
8.1. Certificate usages
A client implementing this document MUST support certificate usages
DANE-EE(3) and DANE-TA(2). Both are used with the semantics given in
Sections 5.1 and 5.2 of [RFC7671] respectively. Section 4 of
[RFC7671] recommends exactly this pair, and cautions that
simultaneous support for all four usages is not recommended.
Support for certificate usages PKIX-TA(0) and PKIX-EE(1) is OPTIONAL.
A client that does not support them treats records carrying them as
unusable in step 2 of Section 7.5. Where such records are the only
ones published, the outcome is SECURE_UNUSABLE, and Section 8.4
requires the client to authenticate the server by the PKIX rules of
Section 5.2.1 of [RFC9289]. That check is weaker than the published
records call for, but never weaker than [RFC9289] alone.
Lever Expires 5 March 2027 [Page 17]
Internet-Draft RPC TLS with DANE September 2026
A client MUST support the selectors Cert(0) and SPKI(1) and the
matching types Full(0) and SHA2-256(1), which is the support that
Section 6 of [RFC6698] lets publishers rely on. Support for
SHA2-512(2) is RECOMMENDED.
8.2. DANE-EE(3)
Authentication by a DANE-EE(3) record consists of matching the
server's end-entity certificate, or its SubjectPublicKeyInfo, against
the certificate association data of a usable record, per Section 5.1
of [RFC7671].
When such a match succeeds, the server is authenticated. In
particular, and following Section 5.1 of [RFC7671]:
* The client MUST NOT reject the server because no name in the
presented certificate matches the reference name or the selected
TLSA base domain. The binding of key to name is made by the TLSA
record, not by the certificate.
* The client MUST NOT reject the server because the presented
certificate is expired or not yet valid. The validity of the
binding is the validity of the DNSSEC signatures over the TLSA
RRset.
* The client MUST NOT require that the presented certificate chain
to a trusted certification authority.
Consequently a self-signed server certificate, published as a DANE-
EE(3) record with selector SPKI(1) and matching type SHA2-256(1), is
a fully conforming deployment; see Appendix A.1.
8.3. DANE-TA(2)
Authentication by a DANE-TA(2) record consists of validating the
server's certificate chain to the trust anchor the record identifies,
per Section 5.2 of [RFC7671], and then performing name checks against
the reference identifiers determined in Section 7.6.
Those name checks are performed per [RFC9525], retaining the
restriction in Section 5.2.1 of [RFC9289] that a DNS domain name in
an RPC-with-TLS certificate MUST NOT contain the wildcard character
"*".
Lever Expires 5 March 2027 [Page 18]
Internet-Draft RPC TLS with DANE September 2026
8.4. Required client behavior by outcome class
Table 1 states what a client MUST do for each DNS outcome class in
each of the two active policy modes. In every case where
authentication is required, failure of that authentication fails the
association attempt; see Section 9.4.
The requirement that TLS be used is carried by the security floor.
Where the DNS outcome was derived from a port of untrusted
provenance, Section 5.3 withholds that floor, and Section 9.3 then
governs whether the attempt may proceed in cleartext. The
authentication requirements in the table apply to any (D)TLS session
that is established, whatever the provenance of the port.
+=================+==============================+================+
| DNS outcome | Opportunistic mode | Mandatory mode |
+=================+==============================+================+
| SECURE_USABLE | TLS is required, and the | As for |
| | server MUST be authenticated | opportunistic. |
| | by DANE per Section 8. PKIX | |
| | authentication MUST NOT be | |
| | substituted for it. | |
+-----------------+------------------------------+----------------+
| SECURE_UNUSABLE | TLS is required, and the | The attempt |
| | server MUST be authenticated | MUST fail. |
| | per Section 5.2.1 of | |
| | [RFC9289]. | |
+-----------------+------------------------------+----------------+
| SECURE_ABSENT | No floor is pinned; | The attempt |
| | Section 9.3 governs | MUST fail. |
| | cleartext operation. A TLS | |
| | session is authenticated per | |
| | Section 5.2.1 of [RFC9289]. | |
+-----------------+------------------------------+----------------+
| INSECURE | As for SECURE_ABSENT. | The attempt |
| | | MUST fail. |
+-----------------+------------------------------+----------------+
| ERROR | The attempt MUST fail. | The attempt |
| | | MUST fail. |
+-----------------+------------------------------+----------------+
Table 1: Required client behavior by DNS outcome class
Lever Expires 5 March 2027 [Page 19]
Internet-Draft RPC TLS with DANE September 2026
The SECURE_USABLE row is the central requirement of this document. A
client MUST NOT accept a PKIX authentication in place of the DANE
authentication the RRset calls for, however trusted the issuing
certification authority; that substitution would return control of
the association's authentication to whoever can obtain a certificate
for the name, which is what the TLSA RRset was published to prevent.
The SECURE_UNUSABLE row strengthens the guidance in Section 10.3 of
[RFC7671] and Section 2.2 of [RFC7672], which require only
unauthenticated TLS in this case; Section 10.3 of [RFC7671]
anticipates such a strengthening where expecting it is realistic for
the application protocol. For RPC-with-TLS the intermediate position
is not available at all. In both client deployment modes of
Section 4.2 of [RFC9289] the client authenticates the server, so the
server is never anonymous to the client, and accepting
unauthenticated TLS here would be a downgrade relative to the base
specification rather than an improvement on cleartext.
9. Downgrade Resistance
9.1. The security floor
A DNS outcome class of SECURE_USABLE or SECURE_UNUSABLE pins a
security floor for the server association, except where Section 5.3
withholds it: the client MUST NOT operate that association at a
security level weaker than an authenticated TLS session, and MUST
fail the association attempt rather than do so.
The floor is a property of the server association, not of the
connection on which it was determined, and it persists for the
lifetime of the association. Once pinned, it applies to every
subsequent association attempt for that association and to every
transport that joins it (Section 10). A later evaluation that pins
no floor, whatever its outcome class, does not remove one already
pinned: an operator who withdraws a TLSA RRset lowers the floor only
for associations established after the withdrawal (Appendix A.1). A
client MUST retain a pinned floor, together with the selected TLSA
base domain it was derived from, until the association ends.
The floor is stated in terms of the security level reached rather
than of any particular attack. It covers the STRIPTLS attack of
Section 6.1.1 of [RFC9289], to which Section 9.2 specifies the
client's response, and any mechanism by which an attacker induces a
client to select a transport or path that receives weaker protection;
a document specifying RPC over another transport can cite this
section for the latter.
Lever Expires 5 March 2027 [Page 20]
Internet-Draft RPC TLS with DANE September 2026
9.2. AUTH_TLS probe outcomes
Section 4.1 of [RFC9289] specifies that a client that does not
receive the "STARTTLS" indication MUST NOT send a ClientHello, and
that "RPC operation may continue, depending on local policy, but
without confidentiality, integrity, or peer authentication protection
from (D)TLS". This document specifies that local policy.
A client classifies the result of the AUTH_TLS probe into exactly one
of the following outcomes.
ACCEPTED: A Reply was received with a reply_stat of MSG_ACCEPTED and
an AUTH_NONE verifier containing the "STARTTLS" token, as
specified in Section 4.1 of [RFC9289].
DECLINED: A complete, well-formed Reply to the probe was received
that indicates the server does not support RPC-with-TLS. This
comprises a reply_stat of MSG_ACCEPTED with an AUTH_NONE verifier
that does not carry the "STARTTLS" token, and a reply_stat of
MSG_DENIED with a reject_stat of AUTH_ERROR. These are the
responses produced by a server that does not implement the
AUTH_TLS authentication flavor; in particular, AUTH_ERROR is how a
server predating [RFC9289] rejects an unrecognized flavor.
RPCERR: A complete, well-formed Reply was received that is neither
of the above -- for example a reply_stat of MSG_DENIED with a
reject_stat of RPC_MISMATCH, or a reply_stat of MSG_ACCEPTED with
a verifier whose flavor is not AUTH_NONE.
MALFORMED: A response was received that cannot be parsed as a well-
formed RPC Reply to the probe, or whose verifier length is
inconsistent with its declared flavor.
UNREACHABLE: The connection was refused or reset, or was closed
before a Reply was received.
TIMEOUT: No response was received within the client's timeout.
LOCAL: A local resource failure prevented the probe from being sent,
or its result from being determined.
9.3. Cleartext fallback
Table 2 states whether the client may continue in cleartext.
Lever Expires 5 March 2027 [Page 21]
Internet-Draft RPC TLS with DANE September 2026
+=============+================+===================================+
| Probe | Floor pinned | No floor pinned |
| outcome | | |
+=============+================+===================================+
| ACCEPTED | Proceed to the | Proceed to the TLS handshake. |
| | TLS handshake. | |
+-------------+----------------+-----------------------------------+
| DECLINED | The attempt | Cleartext operation is permitted, |
| | MUST fail. | subject to local policy, per |
| | | Section 4.1 of [RFC9289]. |
+-------------+----------------+-----------------------------------+
| RPCERR | The attempt | The attempt MUST fail. |
| | MUST fail. | |
+-------------+----------------+-----------------------------------+
| MALFORMED | The attempt | The attempt MUST fail. |
| | MUST fail. | |
+-------------+----------------+-----------------------------------+
| UNREACHABLE | The attempt | The attempt MUST fail. |
| | MUST fail. | |
+-------------+----------------+-----------------------------------+
| TIMEOUT | The attempt | The attempt MUST fail. |
| | MUST fail. | |
+-------------+----------------+-----------------------------------+
| LOCAL | The attempt | The attempt MUST fail. |
| | MUST fail. | |
+-------------+----------------+-----------------------------------+
Table 2: Cleartext fallback by AUTH_TLS probe outcome
Only DECLINED permits cleartext operation, and only where no floor
has been pinned. The other non-ACCEPTED outcomes are what an
attacker interfering with the cleartext exchange looks like; a client
that treats them as declines has no downgrade resistance even against
an attacker who cannot forge a well-formed Reply.
[[TODO: Whether opportunistic mode should instead take the stricter
policy of Section 6.1.1 and Section 6.4 of [RFC9289], at the cost of
reachability to servers that predate it, is open.
https://github.com/chucklever/i-d-rpc-tls-dane/issues/4 ]]
9.4. Failure after a handshake is attempted
Once the AUTH_TLS probe has been ACCEPTED and a (D)TLS handshake has
been attempted, the client MUST NOT retry the association attempt in
cleartext, whatever the DNS outcome class and whatever the reason the
handshake or the subsequent authentication failed. This holds for
DANE mismatches, PKIX validation failures where PKIX applies, TLS
negotiation failures, and the unavailability of whatever local
Lever Expires 5 March 2027 [Page 22]
Internet-Draft RPC TLS with DANE September 2026
component performs the handshake.
Section 4.1 of [RFC9289] describes a client that reports a handshake
failure after a successful probe the same way it reports an
AUTH_ERROR rejection; for a client implementing this document that is
a requirement.
9.5. Coherence within an association attempt
How an implementation obtains DNS data, how many times within one
association attempt it evaluates Section 7, and how a policy result
reaches the point at which the handshake is authenticated are
implementation matters. Two properties are required of any
arrangement.
* A client MUST evaluate the DNS outcome class from DNS data that is
current at the time of the association attempt, and MUST NOT reuse
an outcome obtained for an earlier attempt beyond the validity of
the DNS data it was derived from. The security floor is not such
a result: it persists across attempts (Section 9.1), and a fresh
evaluation can raise it or leave it but never lower it.
* Within one association attempt, a client MUST NOT conclude at a
security level weaker than any determination it has already made
during that attempt. Where two evaluations during one attempt
disagree, the stronger conclusion governs.
The second property is what makes the mechanism resistant to an
attacker who can affect the timing of DNS answers. A client MAY act
on a strengthened conclusion, a later evaluation that finds a usable
RRset where an earlier one did not, since doing so cannot lower the
security of the attempt.
A TLSA RRset republished mid-attempt during a key rollover produces
the same disagreement. The client cannot distinguish it from an
attack within a single attempt, and a retry evaluated wholly against
the new data succeeds.
10. Association Scope and Policy Granularity
10.1. Policy is per association
The DANE policy mode, the reference name, and any pinned security
floor are properties of a server association. A client MUST be able
to apply different policies concurrently to different server
associations, since the servers a host contacts differ in whether
they have deployed DANE.
Lever Expires 5 March 2027 [Page 23]
Internet-Draft RPC TLS with DANE September 2026
A client that shares underlying state between server associations --
connection caching, session reuse, or a client object shared between
two mounts of the same server -- MUST NOT share it between
associations whose DANE policy modes or reference names differ. Two
names that resolve to the same address may have different TLSA
RRsets, and an association established under one name has not
authenticated the server for the other.
10.2. Transports joining an association later
A client may add transports to an existing server association for
additional bandwidth or additional server network paths.
While a security floor is pinned for an association, a transport MUST
NOT join that association unless it carries the association's
reference name and its own evaluation meets the association's floor.
A transport whose destination is an address literal therefore cannot
join a floor-pinned association (Section 6.2). A client MUST refuse
such an addition and record the refusal (Section 11); the association
continues over the transports that do meet its floor.
10.3. Derived associations
Upper-layer protocols direct clients to establish further
associations to destinations the client did not select. NFSv4
[RFC8881] does this in at least three ways: a parallel NFS layout
identifies data servers, the file system location attributes identify
referral targets, and a migration event identifies a new location for
a file system. A destination so identified is either an address
literal or a DNS name. A name is the reference name of the derived
association, subject to the input contract of Section 6; an address
literal gives the derived association no DANE binding (Section 6.2).
A security floor pinned for one server association does not extend to
a derived association. A client MUST evaluate DANE policy
independently for each association it establishes, from that
association's own reference name. In mandatory mode, a derived
association for which no DANE binding can be established fails
(Section 4.1), even though this may render some upper-layer features
unusable (Section 13.5).
Defining DNS-based identities for the destinations that upper-layer
protocols hand out -- so that a data server or a referral target can
be named rather than addressed -- is work for the specifications of
those protocols, and is outside the scope of this document.
Lever Expires 5 March 2027 [Page 24]
Internet-Draft RPC TLS with DANE September 2026
11. Auditing
A client implementing this document MUST extend the audit log that
Section 6.1 of [RFC9289] requires to cover the DANE policy decision.
For each association attempt in which DANE policy applied, the record
MUST include:
* the reference name, and an indication of whether it was supplied
by local configuration or derived some other way;
* the destination network address, port, and transport;
* the DANE policy mode in effect and where it came from;
* the DNS outcome class, and enough diagnostic detail to distinguish
the conditions grouped under ERROR;
* the selected TLSA base domain, where one was determined;
* the AUTH_TLS probe outcome (Section 9.2);
* the means by which the server was authenticated, if it was: DANE-
EE(3), DANE-TA(2), or PKIX;
* for a DANE authentication, the usage, selector, and matching type
of the record that matched; and
* the resulting disposition of the attempt: authenticated TLS,
cleartext operation, or failure, with the reason for a failure.
The record MAY consist of correlatable events emitted by more than
one component, provided that the events can be joined and that
together they cover the whole list. A correlation identifier used to
join such events MUST NOT carry information that is not already
disclosed by the events themselves.
12. Implementation Status
This section is to be removed before publishing as an RFC.
This section records the status of known implementations of the
protocol defined by this specification at the time of posting of this
Internet-Draft, and is based on a proposal described in [RFC7942].
The description of implementations in this section is intended to
assist the IETF in its decision processes in progressing drafts to
RFCs. Please note that the listing of any individual implementation
here does not imply endorsement by the IETF. Furthermore, no effort
has been spent to verify the information presented here that was
Lever Expires 5 March 2027 [Page 25]
Internet-Draft RPC TLS with DANE September 2026
supplied by IETF contributors. This is not intended as, and must not
be construed to be, a catalog of available implementations or their
features. Readers are advised to note that other implementations may
exist.
12.1. tlshd (ktls-utils)
Organization: The ktls-utils project.
Description: tlshd is the userspace handshake agent used by the
Linux kernel's TLS handshake service. It performs the (D)TLS
handshake on behalf of in-kernel RPC-with-TLS consumers.
Implementation: https://github.com/oracle/ktls-utils
Level of maturity: Prototype. The DANE support is not part of a
released version at the time of writing, and is disabled by
default.
Coverage: The reference-name input contract (Section 6); the
candidate determination and result reduction of Section 7,
including secure CNAME expansion; the five outcome classes of
Section 7.2; the usability filtering and digest algorithm agility
of Section 7.5; the reference-identity rules of Section 7.6;
certificate usage DANE-EE(3) (Section 8.2); and the authentication
behavior of Section 8.4 for both the client-anonymous and the
mutually authenticated handshake path.
Not implemented: certificate usage DANE-TA(2), DTLS over UDP, and
the association-scope enforcement of Section 10, which belongs to
the RPC client rather than to the handshake agent.
Licensing: GPLv2.
Contact: The editor of this document.
Experience: The implementation was exercised against publicly
available DANE test zones as well as against a locally signed test
zone. Two findings are reflected in the text of this document.
First, the reference-identity rule in Section 7.6 for the
SECURE_UNUSABLE class was added after the implementation hit the
handshake failure that section describes.
Second, the implementation performs the usability filtering of
Section 7.5 in its own code rather than relying on the TLS
library's DANE support, so that the outcome classification does
not depend on library internals. The library's raw verification
Lever Expires 5 March 2027 [Page 26]
Internet-Draft RPC TLS with DANE September 2026
interface reports parse success in its return value and
verification results in a separate output parameter; an
implementation that checks only the return value accepts
unauthenticated peers.
13. Security Considerations
The security considerations of [RFC9289], [RFC6698], [RFC7671], and
[RFC4033] apply.
13.1. What DANE authentication does and does not establish
A successful DANE-EE(3) match establishes that the peer holds the key
that the operator of the TLSA base domain's zone published for that
service at that port and transport. It establishes nothing about the
names in the presented certificate, its validity dates, or its issuer
(Section 8.2). A deployment that relies on certificate contents for
authorization -- an extended key usage check, a certificate policy, a
subjectAltName URI -- as Section 5.2.1 of [RFC9289] permits, must
continue to perform those checks independently; a DANE match does not
perform them.
Control of the zone that publishes the TLSA RRset is control of the
service's authentication. Trust moves from the certification
authorities the client would otherwise trust to the zone operator and
the DNSSEC chain above it. For the deployments in Appendix A.1 that
is the point, since the party that operates the server also operates
the zone; where DNS is operated by a third party, the concentration
should be evaluated before deployment.
13.2. Replay and the limits of revocation
DNSSEC provides no way to revoke a signed RRset before its signatures
expire (Section 11 of [RFC7671]). Two consequences follow, and both
are bounded by the signature validity period rather than by anything
the client can do.
An attacker who captured a signed denial of existence for a TLSA
owner name before the operator published the RRset can replay it
within that period; the client assigns SECURE_ABSENT and pins no
floor (Appendix A.3).
An attacker who holds a key the operator has withdrawn can replay the
TLSA RRset that still names it, and a client will authenticate the
peer; since Section 8.2 disregards the certificate's validity dates,
the RRset's signatures are the only expiry. The mitigation is
operational and belongs to the publisher (Appendix A.1).
Lever Expires 5 March 2027 [Page 27]
Internet-Draft RPC TLS with DANE September 2026
A security floor, once pinned, persists for the lifetime of the
association (Section 9.1). A replayed denial of existence therefore
affects only an association's first attempt: replayed at a reconnect,
it finds the floor already pinned, and the attempt fails rather than
falls back. Conversely, this document does not require a client to
re-evaluate an association that is already established, so a long-
lived session established against an RRset that has since been
withdrawn continues under the conclusion reached when it was
established.
13.3. Fail-closed behavior is a denial-of-service surface
The rules in Section 8.4, Section 9.3, and Section 9.5 require a
client to fail an association attempt in circumstances where an
[RFC9289] client would have continued. An attacker who can disrupt
the client's DNS -- by dropping responses, by inducing SERVFAIL, or
by corrupting signatures to produce a bogus validation result -- can
therefore prevent the client from establishing associations.
This is a deliberate trade: degrading when DNS is disrupted hands the
same attacker the ability to strip protection silently, and an
attacker who can disrupt DNS can usually disrupt the RPC traffic
itself. Opportunistic mode does not relieve this exposure, since
ERROR fails the attempt in both active modes; operators for whom
availability outweighs confidentiality express that by leaving DANE
disabled for the associations concerned.
13.4. Unauthenticated port selection
The rule in Section 5.3, that a floor is pinned only on a port of
trusted provenance, keeps an attacker who substitutes the port in an
RPCBIND [RFC1833] reply from pinning a floor the operator did not
intend. It does not prevent the SECURE_ABSENT outcome that the
substitution produces, so a client that obtains its ports from
RPCBIND is left as exposed to cleartext fallback as an [RFC9289]
client.
An RPCBIND reply carries a universal address (Section 2.2.1 of
[RFC1833]), so an attacker who rewrites it can substitute the host as
readily as the port. A substituted host alone is defended by DANE,
since it cannot present a certificate matching the TLSA RRset for the
reference name; a substituted port yields SECURE_ABSENT, and neither
the address nor the port is then protected.
The remedy available today is to protect RPCBIND itself. RPCBIND is
an RPC program, so a client can send an AUTH_TLS probe to its port,
authenticate it by the procedures in this document against the TLSA
RRset published for that port and transport, and make its lookups
Lever Expires 5 March 2027 [Page 28]
Internet-Draft RPC TLS with DANE September 2026
over the resulting session. The ports it learns then come from an
authenticated source. The RPCBIND port is well known and therefore
of trusted provenance under Section 5.3, so there is no bootstrap
problem. This document describes the arrangement rather than
requiring it, since no RPCBIND implementation is known to support
RPC-with-TLS.
A session established to the RPCBIND port authenticates the RPCBIND
service alone. The service the client goes on to contact is
authenticated separately, against the TLSA RRset for its own port,
and a security floor determined for one is not a floor for the other.
An operator who protects RPCBIND but publishes no TLSA RRset for the
service has secured the discovery step alone; one who publishes for
the service but leaves RPCBIND unprotected has left the guarantees in
this document resting on an unauthenticated reply.
13.5. Derived associations
A security floor does not extend to an association whose destination
an upper-layer protocol supplied (Section 10.3). The practical
consequence for NFSv4 [RFC8881] is that data-path traffic is
protected only as well as the weakest derived association carrying
it. A client that has pinned a floor for its metadata association,
and then reads and writes file data over parallel NFS data server
connections established from address literals, has obtained no DANE
protection for the data itself. Operators should not infer from a
floor pinned on the metadata association that the data path is
equivalently protected. A client in mandatory mode fails such
connections rather than establishing them (Section 10.3), which makes
the limitation visible rather than silent, at the cost of the
feature.
13.6. Privacy considerations
TLSA queries disclose, to an observer of the client's DNS traffic,
which RPC services the client is about to contact and on which ports.
The names and addresses are already disclosed by address resolution
and by the RPC traffic itself; the port and transport labels are
additional. This is the exposure discussed in Section 6.1.2 of
[RFC9289], and the same mitigations, protecting the client's DNS
transport or resolving locally, apply. [RFC9076] surveys what DNS
transactions disclose, and pervasive monitoring [RFC7258] of DNS is a
known concern for DANE generally.
Lever Expires 5 March 2027 [Page 29]
Internet-Draft RPC TLS with DANE September 2026
13.7. Client authentication
This document specifies the authentication of a server to a client
only. [RFC9289] also provides for mutual authentication, in which
the server validates the client's certificate by PKIX; DANE-based
authentication in that direction is not specified here. The generic
mechanism exists in [I-D.ietf-dance-client-auth], and an RPC profile
of it would need to choose the owner-name form for RPC peers,
restrict the certificate usages, and specify how a DANE-authenticated
client name maps onto RPC-layer authorization. That is work for a
separate document.
Until then, a deployment that requires mutual authentication uses the
PKIX mechanism of Section 5.2.1 of [RFC9289] for the client direction
and DANE for the server direction; Section 8.4 applies to the
server's certificate whether or not the client presents one.
14. IANA Considerations
This document requests no IANA actions.
15. References
15.1. Normative References
[RFC1035] Mockapetris, P., "Domain names - implementation and
specification", STD 13, RFC 1035, DOI 10.17487/RFC1035,
November 1987, <https://www.rfc-editor.org/rfc/rfc1035>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/rfc/rfc2119>.
[RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S.
Rose, "DNS Security Introduction and Requirements",
RFC 4033, DOI 10.17487/RFC4033, March 2005,
<https://www.rfc-editor.org/rfc/rfc4033>.
[RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S.,
Housley, R., and W. Polk, "Internet X.509 Public Key
Infrastructure Certificate and Certificate Revocation List
(CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008,
<https://www.rfc-editor.org/rfc/rfc5280>.
[RFC5531] Thurlow, R., "RPC: Remote Procedure Call Protocol
Specification Version 2", RFC 5531, DOI 10.17487/RFC5531,
May 2009, <https://www.rfc-editor.org/rfc/rfc5531>.
Lever Expires 5 March 2027 [Page 30]
Internet-Draft RPC TLS with DANE September 2026
[RFC5890] Klensin, J., "Internationalized Domain Names for
Applications (IDNA): Definitions and Document Framework",
RFC 5890, DOI 10.17487/RFC5890, August 2010,
<https://www.rfc-editor.org/rfc/rfc5890>.
[RFC6066] Eastlake 3rd, D., "Transport Layer Security (TLS)
Extensions: Extension Definitions", RFC 6066,
DOI 10.17487/RFC6066, January 2011,
<https://www.rfc-editor.org/rfc/rfc6066>.
[RFC6698] Hoffman, P. and J. Schlyter, "The DNS-Based Authentication
of Named Entities (DANE) Transport Layer Security (TLS)
Protocol: TLSA", RFC 6698, DOI 10.17487/RFC6698, August
2012, <https://www.rfc-editor.org/rfc/rfc6698>.
[RFC7671] Dukhovni, V. and W. Hardaker, "The DNS-Based
Authentication of Named Entities (DANE) Protocol: Updates
and Operational Guidance", RFC 7671, DOI 10.17487/RFC7671,
October 2015, <https://www.rfc-editor.org/rfc/rfc7671>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/rfc/rfc8174>.
[RFC9289] Myklebust, T. and C. Lever, Ed., "Towards Remote Procedure
Call Encryption by Default", RFC 9289,
DOI 10.17487/RFC9289, September 2022,
<https://www.rfc-editor.org/rfc/rfc9289>.
[RFC9525] Saint-Andre, P. and R. Salz, "Service Identity in TLS",
RFC 9525, DOI 10.17487/RFC9525, November 2023,
<https://www.rfc-editor.org/rfc/rfc9525>.
[RFC9846] Rescorla, E., "The Transport Layer Security (TLS) Protocol
Version 1.3", RFC 9846, DOI 10.17487/RFC9846, July 2026,
<https://www.rfc-editor.org/rfc/rfc9846>.
15.2. Informative References
[I-D.ietf-dance-client-auth]
Huque, S. and V. Dukhovni, "TLS Client Authentication via
DANE TLSA records", Work in Progress, Internet-Draft,
draft-ietf-dance-client-auth-13, 23 July 2026,
<https://datatracker.ietf.org/doc/html/draft-ietf-dance-
client-auth-13>.
Lever Expires 5 March 2027 [Page 31]
Internet-Draft RPC TLS with DANE September 2026
[RFC1833] Srinivasan, R., "Binding Protocols for ONC RPC Version 2",
RFC 1833, DOI 10.17487/RFC1833, August 1995,
<https://www.rfc-editor.org/rfc/rfc1833>.
[RFC5011] StJohns, M., "Automated Updates of DNS Security (DNSSEC)
Trust Anchors", STD 74, RFC 5011, DOI 10.17487/RFC5011,
September 2007, <https://www.rfc-editor.org/rfc/rfc5011>.
[RFC6125] Saint-Andre, P. and J. Hodges, "Representation and
Verification of Domain-Based Application Service Identity
within Internet Public Key Infrastructure Using X.509
(PKIX) Certificates in the Context of Transport Layer
Security (TLS)", RFC 6125, DOI 10.17487/RFC6125, March
2011, <https://www.rfc-editor.org/rfc/rfc6125>.
[RFC7250] Wouters, P., Ed., Tschofenig, H., Ed., Gilmore, J.,
Weiler, S., and T. Kivinen, "Using Raw Public Keys in
Transport Layer Security (TLS) and Datagram Transport
Layer Security (DTLS)", RFC 7250, DOI 10.17487/RFC7250,
June 2014, <https://www.rfc-editor.org/rfc/rfc7250>.
[RFC7258] Farrell, S. and H. Tschofenig, "Pervasive Monitoring Is an
Attack", BCP 188, RFC 7258, DOI 10.17487/RFC7258, May
2014, <https://www.rfc-editor.org/rfc/rfc7258>.
[RFC7435] Dukhovni, V., "Opportunistic Security: Some Protection
Most of the Time", RFC 7435, DOI 10.17487/RFC7435,
December 2014, <https://www.rfc-editor.org/rfc/rfc7435>.
[RFC7672] Dukhovni, V. and W. Hardaker, "SMTP Security via
Opportunistic DNS-Based Authentication of Named Entities
(DANE) Transport Layer Security (TLS)", RFC 7672,
DOI 10.17487/RFC7672, October 2015,
<https://www.rfc-editor.org/rfc/rfc7672>.
[RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running
Code: The Implementation Status Section", BCP 205,
RFC 7942, DOI 10.17487/RFC7942, July 2016,
<https://www.rfc-editor.org/rfc/rfc7942>.
[RFC8881] Noveck, D., Ed. and C. Lever, "Network File System (NFS)
Version 4 Minor Version 1 Protocol", RFC 8881,
DOI 10.17487/RFC8881, August 2020,
<https://www.rfc-editor.org/rfc/rfc8881>.
[RFC9076] Wicinski, T., Ed., "DNS Privacy Considerations", RFC 9076,
DOI 10.17487/RFC9076, July 2021,
<https://www.rfc-editor.org/rfc/rfc9076>.
Lever Expires 5 March 2027 [Page 32]
Internet-Draft RPC TLS with DANE September 2026
Appendix A. Deployment Considerations
A.1. Publishing TLSA records for RPC services
The simplest conforming deployment, and the one that addresses the
operational problem described in Section 1, is to publish for each
service a single DANE-EE(3) record with selector SPKI(1) and matching
type SHA2-256(1), written "3 1 1", in a DNSSEC-signed zone:
_2049._tcp.nfs.example.com. IN TLSA 3 1 1 (
2A1B4C... )
Figure 3: A minimal TLSA RRset for an NFS service
Clients then need no certification authority material for those
servers, the operator maintains the binding in one place, and by
Section 8.2 the certificate may be self-signed with any notAfter
date. Keeping the RRset and certificates in step, in particular
during key rollover, is specified in Section 5.4. Withdrawing DANE
takes the same posture: a client that has pinned a floor for an
association keeps requiring authenticated TLS until that association
ends (Section 9.1), so removing the RRset lowers what clients require
only as they remount.
The signature validity period the operator chooses bounds the replay
window described in Section 13.2. Section 11 of [RFC7671] suggests a
lifetime of a few days for domains publishing high-value keys.
A publisher of DANE-TA(2) records has one further obligation. A
client validates the server's chain to the trust anchor the record
identifies (Section 8.3), and it has no trust store in which to find
that anchor. Unless the record carries the full trust anchor
certificate, the server must therefore include the anchor in the
chain it presents, even a self-signed root that a TLS server would
ordinarily omit; Section 5.2.2 of [RFC7671] states the requirement.
The Server Name Indication value such a deployment receives is not
fixed. Section 7.6 sends the selected TLSA base domain when the
outcome is SECURE_USABLE and the original reference name when it is
SECURE_UNUSABLE, and the two differ whenever the RRset was found at a
securely CNAME-expanded name. A server that selects its certificate
strictly by SNI, and fails a handshake carrying a name it does not
recognize, rejects clients that conform to this document. A server
should instead present its default certificate, the one its TLSA
RRset matches, when the SNI value is absent or unrecognized.
Section 8.1 of [RFC7672] gives SMTP servers the same guidance for the
same reason.
Lever Expires 5 March 2027 [Page 33]
Internet-Draft RPC TLS with DANE September 2026
A.2. Unsigned zones prove nothing
A TLSA RRset in an unsigned zone yields the outcome INSECURE whatever
it contains, and so does a denial of existence from one. Publishing
without signing the zone gives an attacker something to remove rather
than the client something to rely on; an operator obtains none of the
properties in this document without signing the zone.
A.3. Downgrade resistance of opportunistic DANE
Opportunistic mode (Section 4.1) adapts to what each operator has
deployed, which is what makes it usable across a mixed server
population. This adaptivity is not itself a downgrade path.
Against a client that validates DNSSEC, an attacker who wants to move
a server from SECURE_USABLE to a weaker class must either forge a
denial of existence in a signed zone, which fails NSEC or NSEC3
validation, or strip signatures, which yields ERROR and therefore
failure rather than fallback. The remaining class, INSECURE, arises
only from a genuinely unsigned delegation, which the attacker cannot
manufacture without control of the parent zone's signing key.
One path remains, and it requires neither forgery nor signature
stripping: replay of a signed denial of existence captured before the
operator published the RRset, which validates until its signatures
expire and leaves the client at SECURE_ABSENT with no floor pinned.
Section 13.2 describes that window and its bound; it applies to an
association's first attempt only, since a pinned floor persists
(Section 9.1).
Apart from that window, the outcome classes an attacker can reach
from SECURE_USABLE are the ones that fail the attempt. A deployment
that wants to close the window as well can adopt the stricter policy
of Section 6.4 of [RFC9289], whatever the DNS outcome.
This is the same argument that supports opportunistic DANE for SMTP
[RFC7672]. On the relationship between this adaptivity and
opportunistic security in general, see [RFC7435].
Appendix B. Open Issues
This section is to be removed before publishing as an RFC.
Each item is tracked as an issue in this document's issue tracker,
where the detail and the discussion live.
Lever Expires 5 March 2027 [Page 34]
Internet-Draft RPC TLS with DANE September 2026
* Section 9.2: whether the partition of AUTH_TLS probe results, and
in particular which of them count as DECLINED, preserves
reachability to the pre-[RFC9289] server population. Issue 3
(https://github.com/chucklever/i-d-rpc-tls-dane/issues/3)
* Section 9.3: whether cleartext operation remains permitted where
no floor has been pinned and the server declines, or opportunistic
mode takes the stricter policy of Section 6.1.1 of [RFC9289].
Issue 4 (https://github.com/chucklever/i-d-rpc-tls-dane/issues/4)
Acknowledgments
Much of the prose in this document was generated by Claude, a large
language model, working from the editor's design, outline, and
instructions, and was reviewed and revised by the editor, who is
responsible for its content. Claude is not an author of this
document.
The editor is grateful to Bill Baker, Greg Marsden, and Martin
Thomson for their input and support.
Special thanks to Area Director Gorry Fairhurst, NFSv4 Working Group
Chair Brian Pawlowski, and NFSv4 Working Group Secretary Thomas
Haynes for their guidance and oversight.
Author's Address
Charles Lever (editor)
United States of America
Email: cel-ietf@chucklever.net
Lever Expires 5 March 2027 [Page 35]