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, . [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, . [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, . [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, . [RFC5531] Thurlow, R., "RPC: Remote Procedure Call Protocol Specification Version 2", RFC 5531, DOI 10.17487/RFC5531, May 2009, . 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, . [RFC6066] Eastlake 3rd, D., "Transport Layer Security (TLS) Extensions: Extension Definitions", RFC 6066, DOI 10.17487/RFC6066, January 2011, . [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, . [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, . [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, . [RFC9289] Myklebust, T. and C. Lever, Ed., "Towards Remote Procedure Call Encryption by Default", RFC 9289, DOI 10.17487/RFC9289, September 2022, . [RFC9525] Saint-Andre, P. and R. Salz, "Service Identity in TLS", RFC 9525, DOI 10.17487/RFC9525, November 2023, . [RFC9846] Rescorla, E., "The Transport Layer Security (TLS) Protocol Version 1.3", RFC 9846, DOI 10.17487/RFC9846, July 2026, . 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, . 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, . [RFC5011] StJohns, M., "Automated Updates of DNS Security (DNSSEC) Trust Anchors", STD 74, RFC 5011, DOI 10.17487/RFC5011, September 2007, . [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, . [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, . [RFC7258] Farrell, S. and H. Tschofenig, "Pervasive Monitoring Is an Attack", BCP 188, RFC 7258, DOI 10.17487/RFC7258, May 2014, . [RFC7435] Dukhovni, V., "Opportunistic Security: Some Protection Most of the Time", RFC 7435, DOI 10.17487/RFC7435, December 2014, . [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, . [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, . [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, . [RFC9076] Wicinski, T., Ed., "DNS Privacy Considerations", RFC 9076, DOI 10.17487/RFC9076, July 2021, . 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]