rfc9289.original | rfc9289.txt | |||
---|---|---|---|---|
Network File System Version 4 T. Myklebust | Internet Engineering Task Force (IETF) T. Myklebust | |||
Internet-Draft Hammerspace | Request for Comments: 9289 Hammerspace | |||
Updates: 5531 (if approved) C. Lever, Ed. | Updates: 5531 C. Lever, Ed. | |||
Intended status: Standards Track Oracle | Category: Standards Track Oracle | |||
Expires: 27 May 2021 23 November 2020 | ISSN: 2070-1721 September 2022 | |||
Towards Remote Procedure Call Encryption By Default | Towards Remote Procedure Call Encryption by Default | |||
draft-ietf-nfsv4-rpc-tls-11 | ||||
Abstract | Abstract | |||
This document describes a mechanism that, through the use of | This document describes a mechanism that, through the use of | |||
opportunistic Transport Layer Security (TLS), enables encryption of | opportunistic Transport Layer Security (TLS), enables encryption of | |||
Remote Procedure Call (RPC) transactions while they are in-transit. | Remote Procedure Call (RPC) transactions while they are in transit. | |||
The proposed mechanism interoperates with ONC RPC implementations | The proposed mechanism interoperates with Open Network Computing | |||
that do not support it. This document updates RFC 5531. | (ONC) RPC implementations that do not support it. This document | |||
updates RFC 5531. | ||||
Note | ||||
Discussion of this draft takes place on the NFSv4 working group | ||||
mailing list (nfsv4@ietf.org), which is archived at | ||||
https://mailarchive.ietf.org/arch/browse/nfsv4/. Working Group | ||||
information can be found at https://datatracker.ietf.org/wg/nfsv4/ | ||||
about/. | ||||
This note is to be removed before publishing as an RFC. | ||||
The source for this draft is maintained in GitHub. Suggested changes | ||||
should be submitted as pull requests at | ||||
https://github.com/chucklever/i-d-rpc-tls. Instructions are on that | ||||
page as well. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | This document is a product of the Internet Engineering Task Force | |||
Task Force (IETF). Note that other groups may also distribute | (IETF). It represents the consensus of the IETF community. It has | |||
working documents as Internet-Drafts. The list of current Internet- | received public review and has been approved for publication by the | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | Information about the current status of this document, any errata, | |||
and may be updated, replaced, or obsoleted by other documents at any | and how to provide feedback on it may be obtained at | |||
time. It is inappropriate to use Internet-Drafts as reference | https://www.rfc-editor.org/info/rfc9289. | |||
material or to cite them other than as "work in progress." | ||||
This Internet-Draft will expire on 27 May 2021. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Simplified BSD License text | to this document. Code Components extracted from this document must | |||
as described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Simplified BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
2. Requirements Language . . . . . . . . . . . . . . . . . . . . 5 | 2. Requirements Language | |||
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Terminology | |||
4. RPC-Over-TLS in Operation . . . . . . . . . . . . . . . . . . 5 | 4. RPC-with-TLS in Operation | |||
4.1. Discovering Server-side TLS Support . . . . . . . . . . . 6 | 4.1. Discovering Server-Side TLS Support | |||
4.2. Authentication . . . . . . . . . . . . . . . . . . . . . 7 | 4.2. Authentication | |||
4.2.1. Using TLS with RPCSEC GSS . . . . . . . . . . . . . . 8 | 4.2.1. Using TLS with RPCSEC_GSS | |||
5. TLS Requirements . . . . . . . . . . . . . . . . . . . . . . 8 | 5. TLS Requirements | |||
5.1. Base Transport Considerations . . . . . . . . . . . . . . 9 | 5.1. Base Transport Considerations | |||
5.1.1. Protected Operation on TCP . . . . . . . . . . . . . 10 | 5.1.1. Protected Operation on TCP | |||
5.1.2. Protected Operation on UDP . . . . . . . . . . . . . 10 | 5.1.2. Protected Operation on UDP | |||
5.1.3. Protected Operation on Other Transports . . . . . . . 11 | 5.1.3. Protected Operation on Other Transports | |||
5.2. TLS Peer Authentication . . . . . . . . . . . . . . . . . 12 | 5.2. TLS Peer Authentication | |||
5.2.1. X.509 Certificates Using PKIX Trust . . . . . . . . . 12 | 5.2.1. X.509 Certificates Using PKIX Trust | |||
5.2.2. Pre-Shared Keys . . . . . . . . . . . . . . . . . . . 14 | 5.2.1.1. Extended Key Usage Values | |||
6. Implementation Status . . . . . . . . . . . . . . . . . . . . 14 | 5.2.2. Pre-shared Keys | |||
6.1. DESY NFS server . . . . . . . . . . . . . . . . . . . . . 14 | 6. Security Considerations | |||
6.2. Hammerspace NFS server . . . . . . . . . . . . . . . . . 15 | 6.1. The Limitations of Opportunistic Security | |||
6.3. Linux NFS server and client . . . . . . . . . . . . . . . 15 | 6.1.1. STRIPTLS Attacks | |||
6.4. FreeBSD NFS server and client . . . . . . . . . . . . . . 15 | 6.1.2. Privacy Leakage before Session Establishment | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | 6.2. TLS Identity Management on Clients | |||
7.1. The Limitations of Opportunistic Security . . . . . . . . 16 | 6.3. Security Considerations for AUTH_SYS on TLS | |||
7.1.1. STRIPTLS Attacks . . . . . . . . . . . . . . . . . . 17 | 6.4. Best Security Policy Practices | |||
7.1.2. Privacy Leakage Before Session Establishment . . . . 17 | 7. IANA Considerations | |||
7.2. TLS Identity Management on Clients . . . . . . . . . . . 18 | 7.1. RPC Authentication Flavor | |||
7.3. Security Considerations for AUTH_SYS on TLS . . . . . . . 18 | 7.2. ALPN Identifier for SunRPC | |||
7.4. Best Security Policy Practices . . . . . . . . . . . . . 19 | 7.3. Object Identifier for PKIX Extended Key Usage | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 19 | 7.4. Object Identifier for ASN.1 Module | |||
8.1. RPC Authentication Flavor . . . . . . . . . . . . . . . . 19 | 8. References | |||
8.2. ALPN Identifier for SUNRPC . . . . . . . . . . . . . . . 20 | 8.1. Normative References | |||
8.3. Object Identifier for PKIX Extended Key Usage . . . . . . 20 | 8.2. Informative References | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 20 | Appendix A. Known Weaknesses of the AUTH_SYS Authentication Flavor | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . 21 | Appendix B. ASN.1 Module | |||
9.2. Informative References . . . . . . . . . . . . . . . . . 22 | Acknowledgments | |||
Appendix A. Known Weaknesses of the AUTH_SYS Authentication | Authors' Addresses | |||
Flavor . . . . . . . . . . . . . . . . . . . . . . . . . 23 | ||||
Appendix B. ASN.1 Module . . . . . . . . . . . . . . . . . . . . 25 | ||||
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 25 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 26 | ||||
1. Introduction | 1. Introduction | |||
In 2014 the IETF published a document entitled "Pervasive Monitoring | In 2014 the IETF published a document entitled "Pervasive Monitoring | |||
Is an Attack" [RFC7258], which recognized that unauthorized | Is an Attack" [RFC7258], which recognized that unauthorized | |||
observation of network traffic had become widespread and was a | observation of network traffic had become widespread and was a | |||
subversive threat to all who make use of the Internet at large. It | subversive threat to all who make use of the Internet at large. It | |||
strongly recommended that newly defined Internet protocols should | strongly recommended that newly defined Internet protocols should | |||
make a genuine effort to mitigate monitoring attacks. Typically this | make a genuine effort to mitigate monitoring attacks. Typically, | |||
mitigation includes encrypting data in transit. | this mitigation includes encrypting data in transit. | |||
The Remote Procedure Call version 2 protocol has been a Proposed | The Remote Procedure Call version 2 protocol has been a Proposed | |||
Standard for three decades (see [RFC5531] and its antecedents). Over | Standard for three decades (see [RFC5531] and its antecedents). Over | |||
twenty years ago, Eisler et al. first introduced RPCSEC GSS as an in- | twenty years ago, Eisler et al. first introduced RPCSEC_GSS as an in- | |||
transit encryption mechanism for RPC [RFC2203]. However, experience | transit encryption mechanism for RPC [RFC2203]. However, experience | |||
has shown that RPCSEC GSS with in-transit encryption can be | has shown that RPCSEC_GSS with in-transit encryption can be | |||
challenging to use in practice: | challenging to use in practice due to the following: | |||
* Parts of each RPC header remain in clear-text, constituting a loss | * Parts of each RPC header remain in cleartext, constituting a loss | |||
of metadata confidentiality. | of metadata confidentiality. | |||
* Offloading the GSS privacy service is not practical in large | * Offloading the Generic Security Service (GSS) privacy service is | |||
multi-user deployments since each message is encrypted using a key | not practical in large multi-user deployments since each message | |||
based on the issuing RPC user. | is encrypted using a key based on the issuing RPC user. | |||
However strong GSS-provided confidentiality is, it cannot provide any | However strong GSS-provided confidentiality is, it cannot provide any | |||
security if the challenges of using it result in choosing not to | security if the challenges of using it result in choosing not to | |||
deploy it at all. | deploy it at all. | |||
Moreover, the use of AUTH_SYS remains common despite the adverse | Moreover, the use of AUTH_SYS remains common despite the adverse | |||
effects that acceptance of UIDs and GIDs from unauthenticated clients | effects that acceptance of User Identifiers (UIDs) and Group | |||
brings with it. Continued use is in part because: | Identifiers (GIDs) from unauthenticated clients brings with it. | |||
Continued use is in part because: | ||||
* Per-client deployment and administrative costs for the only well- | * Per-client deployment and administrative costs for the only well- | |||
defined alternative to AUTH_SYS are expensive at scale. For | defined alternative to AUTH_SYS are expensive at scale. For | |||
instance, administrators must provide keying material for each RPC | instance, administrators must provide keying material for each RPC | |||
client, including transient clients. | client, including transient clients. | |||
* GSS host identity management and user identity management | * GSS host identity management and user identity management | |||
typically must be enforced in the same security realm. However, | typically must be enforced in the same security realm. However, | |||
cloud providers, for instance, might prefer to remain | cloud providers, for instance, might prefer to remain | |||
authoritative for host identity but allow tenants to manage user | authoritative for host identity but allow tenants to manage user | |||
identities within their private networks. | identities within their private networks. | |||
In view of the challenges with the currently available mechanisms for | In view of the challenges with the currently available mechanisms for | |||
authenticating and protecting the confidentiality of RPC | authenticating and protecting the confidentiality of RPC | |||
transactions, this document specifies a transport-layer security | transactions, this document specifies a transport-layer security | |||
mechanism that complements the existing ones. The Transport Layer | mechanism that complements the existing ones. The TLS [RFC8446] and | |||
Security [RFC8446] (TLS) and Datagram Transport Layer Security | Datagram Transport Layer Security (DTLS) [RFC9147] protocols are | |||
[I-D.ietf-tls-dtls13] (DTLS) protocols are a well-established | well-established Internet building blocks that protect many standard | |||
Internet building blocks that protect many standard Internet | Internet protocols such as the Hypertext Transfer Protocol (HTTP) | |||
protocols such as the Hypertext Transport Protocol (HTTP) [RFC2818]. | [RFC9110]. | |||
Encrypting at the RPC transport layer accords several significant | Encrypting at the RPC transport layer accords several significant | |||
benefits: | benefits: | |||
Encryption By Default: Transport encryption can be enabled without | Encryption by Default: Transport encryption can be enabled without | |||
additional administrative tasks such as identifying client systems | additional administrative tasks such as identifying client systems | |||
to a trust authority and providing each with keying material. | to a trust authority and providing each with keying material. | |||
Encryption Offload: Hardware support for the GSS privacy service has | Encryption Offload: Hardware support for the GSS privacy service has | |||
not appeared in the marketplace. However, the use of a well- | not appeared in the marketplace. However, the use of a well- | |||
established transport encryption mechanism that is employed by | established transport encryption mechanism that is employed by | |||
other ubiquitous network protocols makes it more likely that | other ubiquitous network protocols makes it more likely that | |||
encryption offload for RPC is practicable. | encryption offload for RPC is practicable. | |||
Securing AUTH_SYS: Most critically, transport encryption can | Securing AUTH_SYS: Most critically, transport encryption can | |||
skipping to change at page 4, line 46 ¶ | skipping to change at line 165 ¶ | |||
GIDs generated by an unauthenticated client). | GIDs generated by an unauthenticated client). | |||
Decoupled User and Host Identities: TLS can be used to authenticate | Decoupled User and Host Identities: TLS can be used to authenticate | |||
peer hosts while other security mechanisms can handle user | peer hosts while other security mechanisms can handle user | |||
authentication. | authentication. | |||
Compatibility: The imposition of encryption at the transport layer | Compatibility: The imposition of encryption at the transport layer | |||
protects any upper-layer protocol that employs RPC, without | protects any upper-layer protocol that employs RPC, without | |||
alteration of the upper-layer protocol. | alteration of the upper-layer protocol. | |||
Further, Section 7 of the current document defines policies in line | Further, Section 6 of the current document defines policies in line | |||
with [RFC7435] which enable RPC-over-TLS to be deployed | with [RFC7435] that enable RPC-with-TLS to be deployed | |||
opportunistically in environments that contain RPC implementations | opportunistically in environments that contain RPC implementations | |||
that do not support TLS. However, specifications for RPC-based | that do not support TLS. However, specifications for RPC-based | |||
upper-layer protocols should choose to require even stricter policies | upper-layer protocols should choose to require even stricter policies | |||
that guarantee encryption and host authentication is used for all RPC | that guarantee encryption and host authentication are used for all | |||
transactions to mitigate against pervasive monitoring attacks | RPC transactions to mitigate against pervasive monitoring attacks | |||
[RFC7258]. Enforcing the use of RPC-with-TLS is of particular | ||||
[RFC7258]. Enforcing the use of RPC-over-TLS is of particular | ||||
importance for existing upper-layer protocols whose security | importance for existing upper-layer protocols whose security | |||
infrastructure is weak. | infrastructure is weak. | |||
The protocol specification in the current document assumes that | The protocol specification in the current document assumes that | |||
support for ONC RPC [RFC5531], TLS [RFC8446], PKIX [RFC5280], DNSSEC/ | support for ONC RPC [RFC5531], TLS [RFC8446], PKIX [RFC5280], DNSSEC/ | |||
DANE [RFC6698], and optionally RPCSEC_GSS [RFC2203] is available | DNS-Based Authentication of Named Entities (DANE) [RFC6698], and | |||
within the platform where RPC-over-TLS support is to be added. | optionally RPCSEC_GSS [RFC2203] is available within the platform | |||
where RPC-with-TLS support is to be added. | ||||
2. Requirements Language | 2. Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
3. Terminology | 3. Terminology | |||
This document adopts the terminology introduced in Section 3 of | This document adopts the terminology introduced in Section 3 of | |||
[RFC6973] and assumes a working knowledge of the Remote Procedure | [RFC6973] and assumes a working knowledge of the RPC version 2 | |||
Call (RPC) version 2 protocol [RFC5531] and the Transport Layer | protocol [RFC5531] and the TLS version 1.3 protocol [RFC8446]. | |||
Security (TLS) version 1.3 protocol [RFC8446]. | ||||
Note also that the NFS community long ago adopted the use of the term | Note also that the NFS community long ago adopted the use of the term | |||
"privacy" from documents such as [RFC2203]. In the current document, | "privacy" from documents such as [RFC2203]. In the current document, | |||
the authors use the term "privacy" only when referring specifically | the authors use the term "privacy" only when referring specifically | |||
to the historic GSS privacy service defined in [RFC2203]. Otherwise, | to the historic GSS privacy service defined in [RFC2203]. Otherwise, | |||
the authors use the term "confidentiality", following the practices | the authors use the term "confidentiality", following the practices | |||
of contemporary security communities. | of contemporary security communities. | |||
We adhere to the convention that a "client" is a network host that | We adhere to the convention that a "client" is a network host that | |||
actively initiates an association, and a "server" is a network host | actively initiates an association, and a "server" is a network host | |||
that passively accepts an association request. | that passively accepts an association request. | |||
RPC documentation historically refers to the authentication of a | RPC documentation historically refers to the authentication of a | |||
connecting host as "machine authentication" or "host authentication". | connecting host as "machine authentication" or "host authentication". | |||
TLS documentation refers to the same as "peer authentication". In | TLS documentation refers to the same as "peer authentication". In | |||
the current document there is little distinction between these terms. | the current document, there is little distinction between these | |||
terms. | ||||
The term "user authentication" in the current document refers | The term "user authentication" in the current document refers | |||
specifically to the RPC caller's credential, provided in the "cred" | specifically to the RPC caller's credential, provided in the "cred" | |||
and "verf" fields in each RPC Call. | and "verf" fields in each RPC Call. | |||
4. RPC-Over-TLS in Operation | 4. RPC-with-TLS in Operation | |||
4.1. Discovering Server-side TLS Support | ||||
4.1. Discovering Server-Side TLS Support | ||||
The mechanism described in the current document interoperates fully | The mechanism described in the current document interoperates fully | |||
with RPC implementations that do not support RPC-over-TLS. When an | with RPC implementations that do not support RPC-with-TLS. When an | |||
RPC-over-TLS-enabled peer encounters a peer that does not support | RPC-with-TLS-enabled peer encounters a peer that does not support | |||
RPC-over-TLS, policy settings on the RPC-over-TLS-enabled peer | RPC-with-TLS, policy settings on the RPC-with-TLS-enabled peer | |||
determine whether RPC operation continues without the use of TLS, or | determine whether RPC operation continues without the use of TLS or | |||
RPC operation is not permitted. | is discontinued altogether. | |||
To achieve this interoperability, we introduce a new RPC | To achieve this interoperability, we introduce a new RPC | |||
authentication flavor called AUTH_TLS. The AUTH_TLS authentication | authentication flavor called AUTH_TLS. The AUTH_TLS authentication | |||
flavor signals that the client wants to initiate TLS negotiation if | flavor signals that the client wants to initiate TLS negotiation if | |||
the server supports it. Except for the modifications described in | the server supports it. Except for the modifications described in | |||
this section, the RPC protocol is unaware of security encapsulation | this section, the RPC protocol is unaware of security encapsulation | |||
at the transport layer. The value of AUTH_TLS is defined in | at the transport layer. The value of AUTH_TLS is defined in | |||
Section 8.1. | Section 7.1. | |||
An RPC client begins its communication with an RPC server by | An RPC client begins its communication with an RPC server by | |||
selecting a transport and destination port. The choice of transport | selecting a transport and destination port. The choice of transport | |||
and port is typically based on the RPC program that is to be used. | and port is typically based on the RPC program that is to be used. | |||
The RPC client might query the RPC server's RPCBIND service to make | The RPC client might query the RPC server's RPCBIND service to make | |||
this selection (The RPCBIND service is described in [RFC1833]). The | this selection (The RPCBIND service is described in [RFC1833]). The | |||
mechanism described in the current document does not support RPC | mechanism described in the current document does not support RPC | |||
transports other than TCP and UDP. In all cases, an RPC server MUST | transports other than TCP and UDP. In all cases, an RPC server MUST | |||
listen on the same ports for (D)TLS-protected RPC programs as the | listen on the same ports for (D)TLS-protected RPC programs as the | |||
ports used when (D)TLS is not available. | ports used when (D)TLS is not available. | |||
skipping to change at page 7, line 5 ¶ | skipping to change at line 267 ¶ | |||
verifier of length zero. | verifier of length zero. | |||
* The flavor value of the verifier in the RPC Reply message received | * The flavor value of the verifier in the RPC Reply message received | |||
from the server MUST be AUTH_NONE. | from the server MUST be AUTH_NONE. | |||
* The length of the verifier's body field is eight. | * The length of the verifier's body field is eight. | |||
* The bytes of the verifier's body field encode the ASCII characters | * The bytes of the verifier's body field encode the ASCII characters | |||
"STARTTLS" as a fixed-length opaque. | "STARTTLS" as a fixed-length opaque. | |||
The RPC server signals its corresponding support for RPC-over-TLS by | The RPC server signals its corresponding support for RPC-with-TLS by | |||
replying with a reply_stat of MSG_ACCEPTED and an AUTH_NONE verifier | replying with a reply_stat of MSG_ACCEPTED and an AUTH_NONE verifier | |||
containing the "STARTTLS" token. The client SHOULD proceed with TLS | containing the "STARTTLS" token. The client SHOULD proceed with TLS | |||
session establishment, even if the Reply's accept_stat is not | session establishment, even if the Reply's accept_stat is not | |||
SUCCESS. If the AUTH_TLS probe was done via TCP, the RPC client MUST | SUCCESS. If the AUTH_TLS probe was done via TCP, the RPC client MUST | |||
send the "ClientHello" message on the same connection. If the | send the "ClientHello" message on the same connection. If the | |||
AUTH_TLS probe was done via UDP, the RPC client MUST send the | AUTH_TLS probe was done via UDP, the RPC client MUST send the | |||
"ClientHello" message to the same UDP destination port. | "ClientHello" message to the same UDP destination port. | |||
Conversely, if the Reply's reply_stat is not MSG_ACCEPTED, if its | Conversely, if the Reply's reply_stat is not MSG_ACCEPTED, if its | |||
verifier flavor is not AUTH_NONE, or if its verifier does not contain | verifier flavor is not AUTH_NONE, or if its verifier does not contain | |||
skipping to change at page 7, line 35 ¶ | skipping to change at line 297 ¶ | |||
If an RPC client uses the AUTH_TLS authentication flavor on any | If an RPC client uses the AUTH_TLS authentication flavor on any | |||
procedure other than the NULL procedure, or an RPC client sends an | procedure other than the NULL procedure, or an RPC client sends an | |||
RPC AUTH_TLS probe within an existing (D)TLS session, the RPC server | RPC AUTH_TLS probe within an existing (D)TLS session, the RPC server | |||
MUST reject that RPC Call by returning a reply_stat of MSG_DENIED | MUST reject that RPC Call by returning a reply_stat of MSG_DENIED | |||
with a reject_stat of AUTH_ERROR and an auth_stat of AUTH_BADCRED. | with a reject_stat of AUTH_ERROR and an auth_stat of AUTH_BADCRED. | |||
Once the TLS session handshake is complete, the RPC client and server | Once the TLS session handshake is complete, the RPC client and server | |||
have established a secure channel for exchanging RPC transactions. A | have established a secure channel for exchanging RPC transactions. A | |||
successful AUTH_TLS probe on one particular port/transport tuple does | successful AUTH_TLS probe on one particular port/transport tuple does | |||
not imply that RPC-over-TLS is available on that same server using a | not imply that RPC-with-TLS is available on that same server using a | |||
different port/transport tuple, nor does it imply that RPC-over-TLS | different port/transport tuple, nor does it imply that RPC-with-TLS | |||
will be available in the future using the successfully probed port. | will be available in the future using the successfully probed port. | |||
4.2. Authentication | 4.2. Authentication | |||
There is some overlap between the authentication capabilities of RPC | There is some overlap between the authentication capabilities of RPC | |||
and TLS. The goal of interoperability with implementations that do | and TLS. The goal of interoperability with implementations that do | |||
not support TLS requires limiting the combinations that are allowed | not support TLS requires limiting the combinations that are allowed | |||
and precisely specifying the role that each layer plays. | and precisely specifying the role that each layer plays. | |||
Each RPC server that supports RPC-over-TLS MUST possess a unique | Each RPC server that supports RPC-with-TLS MUST possess a unique | |||
global identity (e.g., a certificate that is signed by a well-known | global identity (e.g., a certificate that is signed by a well-known | |||
trust anchor). Such an RPC server MUST request a TLS peer identity | trust anchor). Such an RPC server MUST request a TLS peer identity | |||
from each client upon first contact. There are two different modes | from each client upon first contact. There are two different modes | |||
of client deployment: | of client deployment: | |||
Server-only Host Authentication | Server-Only Host Authentication | |||
In this type of deployment, the client can authenticate the server | In this type of deployment, the client can authenticate the server | |||
host using the presented server peer TLS identity, but the server | host using the presented server peer TLS identity, but the server | |||
cannot authenticate the client. In this situation, RPC-over-TLS | cannot authenticate the client. In this situation, RPC-with-TLS | |||
clients are anonymous. They present no globally unique identifier | clients are anonymous. They present no globally unique identifier | |||
to the server peer. | to the server peer. | |||
Mutual Host Authentication | Mutual Host Authentication | |||
In this type of deployment, the client possesses an identity that | In this type of deployment, the client possesses an identity that | |||
is backed by a trusted entity (e.g. a pre-shared key or a | is backed by a trusted entity (e.g., a pre-shared key or a | |||
certificate validated with a certification path). As part of the | certificate validated with a certification path). As part of the | |||
TLS handshake, both peers authenticate using the presented TLS | TLS handshake, both peers authenticate using the presented TLS | |||
identities. If authentication of either peer fails, or if | identities. If authentication of either peer fails, or if | |||
authorization based on those identities blocks access to the | authorization based on those identities blocks access to the | |||
server, the peers MUST reject the association. Further | server, the peers MUST reject the association. Further | |||
explanation appears in Section 5.2. | explanation appears in Section 5.2. | |||
In either of these modes, RPC user authentication is not affected by | In either of these modes, RPC user authentication is not affected by | |||
the use of transport layer security. When a client presents a TLS | the use of transport layer security. When a client presents a TLS | |||
peer identity to an RPC server, the protocol extension described in | peer identity to an RPC server, the protocol extension described in | |||
the current document provides no way for the server to know whether | the current document provides no way for the server to know whether | |||
that identity represents one RPC user on that client, or is shared | that identity represents one RPC user on that client or is shared | |||
amongst many RPC users. Therefore, a server implementation cannot | amongst many RPC users. Therefore, a server implementation cannot | |||
utilize the remote TLS peer identity to authenticate RPC users. | utilize the remote TLS peer identity to authenticate RPC users. | |||
4.2.1. Using TLS with RPCSEC GSS | 4.2.1. Using TLS with RPCSEC_GSS | |||
To use GSS, an RPC server has to possess a GSS service principal. On | To use GSS, an RPC server has to possess a GSS service principal. On | |||
a TLS session, GSS mutual (peer) authentication occurs as usual, but | a TLS session, GSS mutual (peer) authentication occurs as usual, but | |||
only after a TLS session has been established for communication. | only after a TLS session has been established for communication. | |||
Authentication of RPCSEC GSS users is unchanged by the use of TLS. | Authentication of RPCSEC_GSS users is unchanged by the use of TLS. | |||
RPCSEC GSS can also perform per-request integrity or confidentiality | RPCSEC_GSS can also perform per-request integrity or confidentiality | |||
protection. When operating over a TLS session, these GSS services | protection. When operating over a TLS session, these GSS services | |||
become largely redundant. An RPC implementation capable of | become largely redundant. An RPC implementation capable of | |||
concurrently using TLS and RPCSEC GSS MUST use GSS-API channel | concurrently using TLS and RPCSEC_GSS MUST use Generic Security | |||
binding, as defined in [RFC5056], to determine when an underlying | Service Application Program Interface (GSS-API) channel binding, as | |||
transport provides a sufficient degree of confidentiality. RPC-over- | defined in [RFC5056], to determine when an underlying transport | |||
TLS implementations MUST provide the "tls-exporter" channel binding | provides a sufficient degree of confidentiality. RPC-with-TLS | |||
type, as defined in [I-D.ietf-kitten-tls-channel-bindings-for-tls13]. | implementations MUST provide the "tls-exporter" channel binding type, | |||
as defined in [RFC9266]. | ||||
5. TLS Requirements | 5. TLS Requirements | |||
When peers negotiate a TLS session that is to transport RPC, the | When peers negotiate a TLS session that is to transport RPC, the | |||
following restrictions apply: | following restrictions apply: | |||
* Implementations MUST NOT negotiate TLS versions prior to v1.3 (for | * Implementations MUST NOT negotiate TLS versions prior to 1.3 (for | |||
TLS [RFC8446] or DTLS [I-D.ietf-tls-dtls13] respectively). | TLS [RFC8446] or DTLS [RFC9147], respectively). Support for | |||
Support for mandatory-to-implement ciphersuites for the negotiated | mandatory-to-implement cipher suites for the negotiated TLS | |||
TLS version is REQUIRED. | version is REQUIRED. | |||
* Implementations MUST conform to the recommendations for TLS usage | * Implementations MUST conform to the recommendations for TLS usage | |||
specified in BCP 195 [RFC7525]. Although RFC 7525 permits the use | specified in BCP 195 [RFC7525]. Although RFC 7525 permits the use | |||
of TLS v1.2, the requirement to use TLS v1.3 or later for RPC- | of TLS 1.2, the requirement to use TLS 1.3 or later for RPC-with- | |||
over-TLS takes precedence. Further, because TLS v1.3 ciphers are | TLS takes precedence. Further, because TLS 1.3 ciphers are | |||
qualitatively different than cipher suites in previous versions of | qualitatively different than cipher suites in previous versions of | |||
TLS and RFC 7525 predates TLS v1.3, the cipher suite | TLS, and RFC 7525 predates TLS 1.3, the cipher suite | |||
recommendations in RFC 7525 do not apply to RPC-over-(D)TLS. A | recommendations in RFC 7525 do not apply to RPC-with-(D)TLS. A | |||
strict TLS mode for RPC-over-TLS that protects against STRIPTLS | strict TLS mode for RPC-with-TLS that protects against STRIPTLS | |||
attacks is discussed in detail in Section 7.1.1. | attacks is discussed in detail in Section 6.1.1. | |||
* Implementations MUST support certificate-based mutual | * Implementations MUST support certificate-based mutual | |||
authentication. Support for PSK mutual authentication is | authentication. Support for Pre-Shared Key (PSK) mutual | |||
OPTIONAL; see Section 5.2.2 for further details. | authentication is OPTIONAL; see Section 5.2.2 for further details. | |||
* Negotiation of a ciphersuite providing confidentiality as well as | * Negotiation of a cipher suite providing confidentiality as well as | |||
integrity protection is REQUIRED. | integrity protection is REQUIRED. | |||
Client implementations MUST include the | Client implementations MUST include the | |||
"application_layer_protocol_negotiation(16)" extension [RFC7301] in | "application_layer_protocol_negotiation(16)" extension [RFC7301] in | |||
their "ClientHello" message and MUST include the protocol identifier | their "ClientHello" message and MUST include the protocol identifier | |||
defined in Section 8.2 in that message's ProtocolNameList value. | defined in Section 7.2 in that message's ProtocolNameList value. | |||
Similarly, in response to the "ClientHello" message, server | Similarly, in response to the "ClientHello" message, server | |||
implementations MUST include the | implementations MUST include the | |||
"application_layer_protocol_negotiation(16)" extension [RFC7301] in | "application_layer_protocol_negotiation(16)" extension [RFC7301] in | |||
their "ServerHello" message and MUST include only the protocol | their "ServerHello" message and MUST include only the protocol | |||
identifier defined in Section 8.2 in that message's ProtocolNameList | identifier defined in Section 7.2 in that message's ProtocolNameList | |||
value. | value. | |||
If the server responds incorrectly (for instance, if the | If the server responds incorrectly (for instance, if the | |||
"ServerHello" message does not conform to the above requirements), | "ServerHello" message does not conform to the above requirements), | |||
the client MUST NOT establish a TLS session for use with RPC on this | the client MUST NOT establish a TLS session for use with RPC on this | |||
connection. See [RFC7301] for further details about how to form | connection. See [RFC7301] for further details about how to form | |||
these messages properly. | these messages properly. | |||
5.1. Base Transport Considerations | 5.1. Base Transport Considerations | |||
There is traditionally a strong association between an RPC program | There is frequently a strong association between an RPC program and a | |||
and a destination port number. The use of TLS or DTLS does not | particular destination port number. The use of TLS or DTLS does not | |||
change that association. Thus it is frequently -- though not always | change that association. Thus, it is frequently, though not always, | |||
-- the case that a single TLS session carries traffic for only one | the case that a single TLS session carries traffic for only one RPC | |||
RPC program. | program. | |||
5.1.1. Protected Operation on TCP | 5.1.1. Protected Operation on TCP | |||
The use of the Transport Layer Security (TLS) protocol [RFC8446] | The use of the TLS protocol [RFC8446] protects RPC on TCP | |||
protects RPC on TCP connections. Typically, once an RPC client | connections. Typically, once an RPC client completes the TCP | |||
completes the TCP handshake, it uses the mechanism described in | handshake, it uses the mechanism described in Section 4.1 to discover | |||
Section 4.1 to discover RPC-over-TLS support for that RPC program on | RPC-with-TLS support for that RPC program on that connection. Until | |||
that connection. Until an AUTH_TLS probe is done on a connection, | an AUTH_TLS probe is done on a connection, the RPC server treats all | |||
the RPC server treats all traffic as RPC messages. If spurious | traffic as RPC messages. If spurious traffic appears on a TCP | |||
traffic appears on a TCP connection between the initial clear-text | connection between the initial cleartext AUTH_TLS probe and the TLS | |||
AUTH_TLS probe and the TLS session handshake, receivers MUST discard | session handshake, receivers MUST discard that data without response | |||
that data without response and then SHOULD drop the connection. | and then SHOULD drop the connection. | |||
The protocol convention specified in the current document assumes | The protocol convention specified in the current document assumes | |||
there can be no more than one concurrent TLS session per TCP | there can be no more than one concurrent TLS session per TCP | |||
connection. This is true of current generations of TLS, but might be | connection. This is true of current generations of TLS, but might be | |||
different in a future version of TLS. | different in a future version of TLS. | |||
Once a TLS session is established on a TCP connection, no further | Once a TLS session is established on a TCP connection, no further | |||
clear-text communication can occur on that connection until the | cleartext communication can occur on that connection until the | |||
session is terminated. The use of TLS does not alter RPC record | session is terminated. The use of TLS does not alter RPC record | |||
framing used on TCP transports. | framing used on TCP transports. | |||
Furthermore, if an RPC server responds with PROG_UNAVAIL to an RPC | Furthermore, if an RPC server responds with PROG_UNAVAIL to an RPC | |||
Call within an established TLS session, that does not imply that RPC | Call within an established TLS session, that does not imply that RPC | |||
server will subsequently reject the same RPC program on a different | server will subsequently reject the same RPC program on a different | |||
TCP connection. | TCP connection. | |||
Reverse-direction operation occurs only on connected transports such | Reverse-direction operation occurs only on connected transports such | |||
as TCP (see Section 2 of [RFC8167]). To protect reverse-direction | as TCP (see Section 2 of [RFC8167]). To protect reverse-direction | |||
RPC operations, the RPC server does not establish a separate TLS | RPC operations, the RPC server does not establish a separate TLS | |||
session on the TCP connection, but instead uses the existing TLS | session on the TCP connection but instead uses the existing TLS | |||
session on that connection to protect these operations. | session on that connection to protect these operations. | |||
When operation is complete, an RPC peer terminates a TLS session by | When operation is complete, an RPC peer terminates a TLS session by | |||
sending a TLS Closure Alert. It may then close the TCP connection. | sending a TLS closure alert. It may then close the TCP connection. | |||
5.1.2. Protected Operation on UDP | 5.1.2. Protected Operation on UDP | |||
RFC Editor: In the following section, please replace TBD with the | The use of the DTLS protocol [RFC9147] protects RPC carried in UDP | |||
connection_id extension number that is to be assigned in | datagrams. As soon as a client initializes a UDP socket for use with | |||
[I-D.ietf-tls-dtls-connection-id]. And, please remove this Editor's | an RPC service, it uses the mechanism described in Section 4.1 to | |||
Note before this document is published. | discover RPC-with-DTLS support for that RPC program on that port. If | |||
spurious traffic appears on a 5-tuple between the initial cleartext | ||||
The use of the Datagram Transport Layer Security (DTLS) protocol | AUTH_TLS probe and the DTLS association handshake, receivers MUST | |||
[I-D.ietf-tls-dtls13] protects RPC carried in UDP datagrams. As soon | discard that traffic without response. | |||
as a client initializes a UDP socket for use with an RPC service, it | ||||
uses the mechanism described in Section 4.1 to discover RPC-over-DTLS | ||||
support for that RPC program on that port. If spurious traffic | ||||
appears on a 5-tuple between the initial clear-text AUTH_TLS probe | ||||
and the DTLS association handshake, receivers MUST discard that | ||||
traffic without response. | ||||
Using DTLS does not introduce reliable or in-order semantics to RPC | Using DTLS does not introduce reliable or in-order semantics to RPC | |||
on UDP. The use of DTLS record replay protection is REQUIRED when | on UDP. The use of DTLS record replay protection is REQUIRED when | |||
transporting RPC traffic. | transporting RPC traffic. | |||
Each RPC message MUST fit in a single DTLS record. DTLS | Each RPC message MUST fit in a single DTLS record. DTLS | |||
encapsulation has overhead, which reduces the Packetization Layer | encapsulation has overhead, which reduces the Packetization Layer | |||
Path MTU (PLPMTU) and thus the maximum RPC payload size. A possible | Path MTU (PLPMTU) and thus the maximum RPC payload size. A possible | |||
PLPMTU discovery mechanism is offered in [RFC8899]. | PLPMTU discovery mechanism is offered in [RFC8899]. | |||
The current document does not specify a mechanism that enables a | The current document does not specify a mechanism that enables a | |||
server to distinguish between DTLS traffic and unprotected RPC | server to distinguish between DTLS traffic and unprotected RPC | |||
traffic directed to the same port. To make this distinction, each | traffic directed to the same port. To make this distinction, each | |||
peer matches ingress datagrams that appear to be DTLS traffic to | peer matches ingress datagrams that appear to be DTLS traffic to | |||
existing DTLS session state. A peer treats any datagram that fails | existing DTLS session state. A peer treats any datagram that fails | |||
the matching process as an RPC message. | the matching process as an RPC message. | |||
Multi-homed RPC clients and servers may send protected RPC messages | Multihomed RPC clients and servers may send protected RPC messages | |||
via network interfaces that were not involved in the handshake that | via network interfaces that were not involved in the handshake that | |||
established the DTLS session. Therefore, when protecting RPC | established the DTLS session. Therefore, when protecting RPC | |||
traffic, each DTLS handshake MUST include the "connection_id(TBD)" | traffic, each DTLS handshake MUST include the "connection_id(54)" | |||
extension described in Section 9 of [I-D.ietf-tls-dtls13], and RPC- | extension described in Section 9 of [RFC9147], and RPC-with-DTLS peer | |||
over-DTLS peer endpoints MUST provide a ConnectionID with a non-zero | endpoints MUST provide a ConnectionID with a nonzero length. | |||
length. Endpoints implementing RPC programs that expect a | Endpoints implementing RPC programs that expect a significant number | |||
significant number of concurrent clients SHOULD employ ConnectionIDs | of concurrent clients SHOULD employ ConnectionIDs of at least 4 bytes | |||
of at least 4 bytes in length. | in length. | |||
Sending a TLS Closure Alert terminates a DTLS session. Because | Sending a TLS closure alert terminates a DTLS session. Because | |||
neither DTLS nor UDP provide in-order delivery, after session closure | neither DTLS nor UDP provide in-order delivery, after session closure | |||
there can be ambiguity as to whether a datagram should be interpreted | there can be ambiguity as to whether a datagram should be interpreted | |||
as DTLS protected or not. Therefore receivers MUST discard datagrams | as DTLS protected or not. Therefore, receivers MUST discard | |||
exchanged using the same 5-tuple that just terminated the DTLS | datagrams exchanged using the same 5-tuple that just terminated the | |||
session for a sufficient length of time to ensure that | DTLS session for a sufficient length of time to ensure that | |||
retransmissions have ceased and packets already in the network have | retransmissions have ceased and packets already in the network have | |||
been delivered. In the absence of more specific data, a period of 60 | been delivered. In the absence of more specific data, a period of 60 | |||
seconds is expected to suffice. | seconds is expected to suffice. | |||
5.1.3. Protected Operation on Other Transports | 5.1.3. Protected Operation on Other Transports | |||
Transports that provide intrinsic TLS-level security (e.g., QUIC) | Transports that provide intrinsic TLS-level security (e.g., QUIC) | |||
need to be addressed separately from the current document. In such | need to be addressed separately from the current document. In such | |||
cases, the use of TLS is not opportunistic as it can be for TCP or | cases, the use of TLS is not opportunistic as it can be for TCP or | |||
UDP. | UDP. | |||
skipping to change at page 12, line 20 ¶ | skipping to change at line 513 ¶ | |||
version of the RPC-over-RDMA transport protocol. | version of the RPC-over-RDMA transport protocol. | |||
5.2. TLS Peer Authentication | 5.2. TLS Peer Authentication | |||
TLS can perform peer authentication using any of the following | TLS can perform peer authentication using any of the following | |||
mechanisms. | mechanisms. | |||
5.2.1. X.509 Certificates Using PKIX Trust | 5.2.1. X.509 Certificates Using PKIX Trust | |||
X.509 certificates are specified in [X.509]. [RFC5280] provides a | X.509 certificates are specified in [X.509]. [RFC5280] provides a | |||
profile of Internet PKI X.509 public key infrastructure. RPC-over- | profile of Internet PKI X.509 public key infrastructure. RPC-with- | |||
TLS implementations are REQUIRED to support the PKIX mechanism | TLS implementations are REQUIRED to support the PKIX mechanism | |||
described in [RFC5280]. | described in [RFC5280]. | |||
The rules and guidelines defined in [RFC6125] apply to RPC-over-TLS | The rules and guidelines defined in [RFC6125] apply to RPC-with-TLS | |||
certificates with the following considerations: | certificates with the following considerations: | |||
* The DNS-ID identifier type is a subjectAltName extension that | * The DNS-ID identifier type is a subjectAltName extension that | |||
contains a dNSName, as defined in Section 4.2.1.6 of [RFC5280]. | contains a dNSName, as defined in Section 4.2.1.6 of [RFC5280]. | |||
Support for the DNS-ID identifier type is REQUIRED in RPC-over-TLS | Support for the DNS-ID identifier type is REQUIRED in RPC-with-TLS | |||
client and server implementations. Certification authorities that | client and server implementations. Certification authorities that | |||
issue such certificates MUST support the DNS-ID identifier type. | issue such certificates MUST support the DNS-ID identifier type. | |||
* To specify the identity of an RPC peer as a domain name, the | * To specify the identity of an RPC peer as a domain name, the | |||
certificate MUST contain a subjectAltName extension that contains | certificate MUST contain a subjectAltName extension that contains | |||
a dNSName. DNS domain names in RPC-over-TLS certificates MUST NOT | a dNSName. DNS domain names in RPC-with-TLS certificates MUST NOT | |||
contain the wildcard character '*' within the identifier. | contain the wildcard character '*' within the identifier. | |||
* To specify the identity of an RPC peer as a network identifier | * To specify the identity of an RPC peer as a network identifier | |||
(netid) or a universal network address (uaddr), the certificate | (netid) or a universal network address (uaddr), the certificate | |||
MUST contain a subjectAltName extension that contains an | MUST contain a subjectAltName extension that contains an | |||
iPAddress. | iPAddress. | |||
When validating a server certificate, an RPC-over-TLS client | When validating a server certificate, an RPC-with-TLS client | |||
implementation takes the following into account: | implementation takes the following into account: | |||
* Certificate validation MUST include the verification rules as per | * Certificate validation MUST include the verification rules as per | |||
Section 6 of [RFC5280] and Section 6 of [RFC6125]. | Section 6 of [RFC5280] and Section 6 of [RFC6125]. | |||
* Server certificate validation MUST include a check on whether the | * Server certificate validation MUST include a check on whether the | |||
locally configured expected DNS-ID or iPAddress subjectAltName of | locally configured expected DNS-ID or iPAddress subjectAltName of | |||
the server that is contacted matches its presented certificate. | the server that is contacted matches its presented certificate. | |||
* For RPC services accessed by their network identifiers (netids) | * For RPC services accessed by their netids and uaddrs, the | |||
and universal network addresses (uaddr), the iPAddress | iPAddress subjectAltName MUST be present in the certificate and | |||
subjectAltName MUST be present in the certificate and MUST exactly | MUST exactly match the address represented by the universal | |||
match the address represented by the universal network address. | network address. | |||
An RPC client's domain name and IP address are often assigned | An RPC client's domain name and IP address are often assigned | |||
dynamically, thus RPC servers cannot rely on those to verify client | dynamically; thus, RPC servers cannot rely on those to verify client | |||
certificates. Therefore, when an RPC-over-TLS client presents a | certificates. Therefore, when an RPC-with-TLS client presents a | |||
certificate to an RPC-over-TLS server, the server takes the following | certificate to an RPC-with-TLS server, the server takes the following | |||
into account: | into account: | |||
* The server MUST use a procedure conformant to Section 6 of | * The server MUST use a procedure conformant to Section 6 of | |||
[RFC5280]) to validate the client certificate's certification | [RFC5280] to validate the client certificate's certification path. | |||
path. | ||||
* The tuple (serial number of the presented certificate; Issuer) | * The tuple (serial number of the presented certificate; Issuer) | |||
uniquely identifies the RPC client. The meaning and syntax of | uniquely identifies the RPC client. The meaning and syntax of | |||
these fields is defined in Section 4 of [RFC5280]). | these fields is defined in Section 4 of [RFC5280]. | |||
RPC-over-TLS implementations MAY allow the configuration of a set of | RPC-with-TLS implementations MAY allow the configuration of a set of | |||
additional properties of the certificate to check for a peer's | additional properties of the certificate to check for a peer's | |||
authorization to communicate (e.g., a set of allowed values in | authorization to communicate (e.g., a set of allowed values in | |||
subjectAltName:URI, a set of allowed X.509v3 Certificate Policies, or | subjectAltName:URI, a set of allowed X.509v3 Certificate Policies, or | |||
a set of extended key usages). | a set of extended key usages). | |||
When the configured set of trust anchors changes (e.g., removal of a | When the configured set of trust anchors changes (e.g., removal of a | |||
CA from the list of trusted CAs; issuance of a new CRL for a given | Certification Authority (CA) from the list of trusted CAs; issuance | |||
CA), implementations SHOULD reevaluate the certificate originally | of a new Certificate Revocation List (CRL) for a given CA), | |||
implementations SHOULD reevaluate the certificate originally | ||||
presented in the context of the new configuration and terminate the | presented in the context of the new configuration and terminate the | |||
TLS session if the certificate is no longer trustworthy. | TLS session if the certificate is no longer trustworthy. | |||
5.2.1.1. Extended Key Usage Values | 5.2.1.1. Extended Key Usage Values | |||
Section 4.2.1.12 of [RFC5280] specifies the extended key usage X.509 | Section 4.2.1.12 of [RFC5280] specifies the extended key usage X.509 | |||
certificate extension. This extension, which may appear in end- | certificate extension. This extension, which may appear in end- | |||
entity certificates, indicates one or more purposes for which the | entity certificates, indicates one or more purposes for which the | |||
certified public key may be used in addition to or in place of the | certified public key may be used in addition to or in place of the | |||
basic purposes indicated in the key usage extension. | basic purposes indicated in the key usage extension. | |||
The current document defines two new KeyPurposeId values: one that | The current document defines two new KeyPurposeId values: one that | |||
identifies the RPC-over-TLS peer as an RPC client, and one that | identifies the RPC-with-TLS peer as an RPC client, and one that | |||
identifies the RPC-over-TLS peer as an RPC server. | identifies the RPC-with-TLS peer as an RPC server. | |||
The inclusion of the RPC server value (id-kp-rpcTLSServer) indicates | The inclusion of the RPC server value (id-kp-rpcTLSServer) indicates | |||
that the certificate has been issued for allowing the holder to | that the certificate has been issued for allowing the holder to | |||
process RPC transactions. | process RPC transactions. | |||
The inclusion of the RPC client value (id-kp-rpcTLSClient) indicates | The inclusion of the RPC client value (id-kp-rpcTLSClient) indicates | |||
that the certificate has been issued for allowing the holder to | that the certificate has been issued for allowing the holder to | |||
request RPC transactions. | request RPC transactions. | |||
5.2.2. Pre-Shared Keys | 5.2.2. Pre-shared Keys | |||
This mechanism is OPTIONAL to implement. In this mode, the RPC peer | This mechanism is OPTIONAL to implement. In this mode, the RPC peer | |||
can be uniquely identified by keying material that has been shared | can be uniquely identified by keying material that has been shared | |||
out-of-band (see Section 2.2 of [RFC8446]). The PSK Identifier | out of band (see Section 2.2 of [RFC8446]). The PSK Identifier | |||
SHOULD be exposed at the RPC layer. | SHOULD be exposed at the RPC layer. | |||
6. Implementation Status | 6. Security Considerations | |||
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 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. | ||||
6.1. DESY NFS server | ||||
Organization: DESY | ||||
URL: https://desy.de | ||||
Maturity: Implementation will be based on mature versions of the | ||||
current document. | ||||
Coverage: The bulk of this specification is implemented including | ||||
DTLS. | ||||
Licensing: LGPL | ||||
Implementation experience: The implementer has read and commented on | ||||
the current document. | ||||
6.2. Hammerspace NFS server | ||||
Organization: Hammerspace | ||||
URL: https://hammerspace.com | ||||
Maturity: Prototype software based on early versions of the current | ||||
document. | ||||
Coverage: The bulk of this specification is implemented. The use of | ||||
DTLS functionality is not implemented. | ||||
Licensing: Proprietary | ||||
Implementation experience: No comments from implementors. | ||||
6.3. Linux NFS server and client | ||||
Organization: The Linux Foundation | ||||
URL: https://www.kernel.org | ||||
Maturity: Not complete. | ||||
Coverage: The bulk of this specification has yet to be implemented. | ||||
The use of DTLS functionality is not planned. | ||||
Licensing: GPLv2 | ||||
Implementation experience: A Linux in-kernel prototype is underway, | ||||
but implementation delays have resulted from the | ||||
challenges of handling a TLS handshake in a kernel | ||||
environment. Those issues stem from the architecture of | ||||
TLS and the kernel, not from the design of the RPC-over- | ||||
TLS protocol. | ||||
6.4. FreeBSD NFS server and client | ||||
Organization: The FreeBSD Project | ||||
URL: https://www.freebsd.org | ||||
Maturity: Prototype software based on early versions of the current | ||||
document. | ||||
Coverage: The bulk of this specification is implemented. The use of | ||||
DTLS functionality is not planned. | ||||
Licensing: BSD | ||||
Implementation experience: Implementers have read and commented on | ||||
the current document. | ||||
7. Security Considerations | ||||
One purpose of the mechanism described in the current document is to | One purpose of the mechanism described in the current document is to | |||
protect RPC-based applications against threats to the confidentiality | protect RPC-based applications against threats to the confidentiality | |||
of RPC transactions and RPC user identities. A taxonomy of these | of RPC transactions and RPC user identities. A taxonomy of these | |||
threats appears in Section 5 of [RFC6973]. Also, Section 6 of | threats appears in Section 5 of [RFC6973]. Also, Section 6 of | |||
[RFC7525] contains a detailed discussion of technologies used in | [RFC7525] contains a detailed discussion of technologies used in | |||
conjunction with TLS. Section 8 of [RFC5280] covers important | conjunction with TLS. Section 8 of [RFC5280] covers important | |||
considerations about handling certificate material securely. | considerations about handling certificate material securely. | |||
Implementers should familiarize themselves with these materials. | Implementers should familiarize themselves with these materials. | |||
Once a TLS session is established, the RPC payload carried on TLS | Once a TLS session is established, the RPC payload carried on TLS | |||
version 1.3 is forward-secure. However, implementers need to be | version 1.3 is forward secure. However, implementers need to be | |||
aware that replay attacks can occur during session establishment. | aware that replay attacks can occur during session establishment. | |||
Remedies for such attacks are discussed in detail in Section 8 of | Remedies for such attacks are discussed in detail in Section 8 of | |||
[RFC8446]. Further, the current document does not provide a profile | [RFC8446]. Further, the current document does not provide a profile | |||
that defines the use of 0-RTT data (see Appendix E.5 of [RFC8446]). | that defines the use of 0-RTT data (see Appendix E.5 of [RFC8446]). | |||
Therefore, RPC-over-TLS implementations MUST NOT use 0-RTT data. | Therefore, RPC-with-TLS implementations MUST NOT use 0-RTT data. | |||
7.1. The Limitations of Opportunistic Security | 6.1. The Limitations of Opportunistic Security | |||
Readers can find the definition of Opportunistic Security in | Readers can find the definition of Opportunistic Security in | |||
[RFC7435]. A discussion of its underlying principals appears in | [RFC7435]. A discussion of its underlying principles appears in | |||
Section 3 of that document. | Section 3 of that document. | |||
The purpose of using an explicitly opportunistic approach is to | The purpose of using an explicitly opportunistic approach is to | |||
enable interoperation with implementations that do not support RPC- | enable interoperation with implementations that do not support RPC- | |||
over-TLS. A range of options is allowed by this approach, from "no | with-TLS. A range of options is allowed by this approach, from "no | |||
peer authentication or encryption" to "server-only authentication | peer authentication or encryption" to "server-only authentication | |||
with encryption" to "mutual authentication with encryption". The | with encryption" to "mutual authentication with encryption". The | |||
actual security level may indeed be selected based on policy and | actual security level may indeed be selected based on policy and | |||
without user intervention. | without user intervention. | |||
In environments where interoperability is a priority, the security | In environments where interoperability is a priority, the security | |||
benefits of TLS are partially or entirely waived. Implementations of | benefits of TLS are partially or entirely waived. Implementations of | |||
the mechanism described in the current document must take care to | the mechanism described in the current document must take care to | |||
accurately represent to all RPC consumers the level of security that | accurately represent to all RPC consumers the level of security that | |||
is actually in effect, and are REQUIRED to provide an audit log of | is actually in effect, and are REQUIRED to provide an audit log of | |||
RPC-over-TLS security mode selection. | RPC-with-TLS security mode selection. | |||
In all other cases, the adoption, implementation, and deployment of | In all other cases, the adoption, implementation, and deployment of | |||
RPC-based upper-layer protocols that enforce the use of TLS | RPC-based upper-layer protocols that enforce the use of TLS | |||
authentication and encryption (when similar RPCSEC GSS services are | authentication and encryption (when similar RPCSEC_GSS services are | |||
not in use) is strongly encouraged. | not in use) is strongly encouraged. | |||
7.1.1. STRIPTLS Attacks | 6.1.1. STRIPTLS Attacks | |||
A classic form of attack on network protocols that initiate an | The initial AUTH_TLS probe occurs in cleartext. An on-path attacker | |||
association in plain-text to discover support for TLS is a man-in- | can alter a cleartext handshake to make it appear as though TLS | |||
the-middle that alters the plain-text handshake to make it appear as | support is not available on one or both peers. Client implementers | |||
though TLS support is not available on one or both peers. Client | can choose from the following to mitigate STRIPTLS attacks: | |||
implementers can choose from the following to mitigate STRIPTLS | ||||
attacks: | ||||
* A TLSA record [RFC6698] can alert clients that TLS is expected to | * A TLSA record [RFC6698] can alert clients that TLS is expected to | |||
work, and provide a binding of hostname to X.509 identity. If TLS | work, and provide a binding of a hostname to the X.509 identity. | |||
cannot be negotiated or authentication fails, the client | If TLS cannot be negotiated or authentication fails, the client | |||
disconnects and reports the problem. When an opportunistic | disconnects and reports the problem. When an opportunistic | |||
security policy is in place, a client SHOULD check for the | security policy is in place, a client SHOULD check for the | |||
existence of a TLSA record for the target server before initiating | existence of a TLSA record for the target server before initiating | |||
an RPC-over-TLS association. | an RPC-with-TLS association. | |||
* Client security policy can require that a TLS session is | * Client security policy can require that a TLS session is | |||
established on every connection. If an attacker spoofs the | established on every connection. If an attacker spoofs the | |||
handshake, the client disconnects and reports the problem. This | handshake, the client disconnects and reports the problem. This | |||
policy prevents an attacker from causing the client to silently | policy prevents an attacker from causing the association to fall | |||
fall back to plaintext. If TLSA records are not available, this | back to cleartext silently. If TLSA records are not available, | |||
approach is strongly encouraged. | this approach is strongly encouraged. | |||
7.1.2. Privacy Leakage Before Session Establishment | 6.1.2. Privacy Leakage before Session Establishment | |||
As mentioned earlier, communication between an RPC client and server | As mentioned earlier, communication between an RPC client and server | |||
appears in the clear on the network prior to the establishment of a | appears in the clear on the network prior to the establishment of a | |||
TLS session. This clear-text information usually includes transport | TLS session. This cleartext information usually includes transport | |||
connection handshake exchanges, the RPC NULL procedure probing | connection handshake exchanges, the RPC NULL procedure probing | |||
support for TLS, and the initial parts of TLS session establishment. | support for TLS, and the initial parts of TLS session establishment. | |||
Appendix C of [RFC8446] discusses precautions that can mitigate | Appendix C of [RFC8446] discusses precautions that can mitigate | |||
exposure during the exchange of connection handshake information and | exposure during the exchange of connection handshake information and | |||
TLS certificate material that might enable attackers to track the RPC | TLS certificate material that might enable attackers to track the RPC | |||
client. Note that when PSK authentication is used, the PSK | client. Note that when PSK authentication is used, the PSK | |||
identifier is exposed during the TLS handshake, and can be used to | identifier is exposed during the TLS handshake and can be used to | |||
track the RPC client. | track the RPC client. | |||
Any RPC traffic that appears on the network before a TLS session has | Any RPC traffic that appears on the network before a TLS session has | |||
been established is vulnerable to monitoring or undetected | been established is vulnerable to monitoring or undetected | |||
modification. A secure client implementation limits or prevents any | modification. A secure client implementation limits or prevents any | |||
RPC exchanges that are not protected. | RPC exchanges that are not protected. | |||
The exception to this edict is the initial RPC NULL procedure that | The exception to this edict is the initial RPC NULL procedure that | |||
acts as a STARTTLS message, which cannot be protected. This RPC NULL | acts as a STARTTLS message, which cannot be protected. This RPC NULL | |||
procedure contains no arguments or results, and the AUTH_TLS | procedure contains no arguments or results, and the AUTH_TLS | |||
authentication flavor it uses does not contain user information, so | authentication flavor it uses does not contain user information, so | |||
there is negligible privacy impact from this exception. | there is negligible privacy impact from this exception. | |||
7.2. TLS Identity Management on Clients | 6.2. TLS Identity Management on Clients | |||
The goal of the RPC-over-TLS protocol extension is to hide the | The goal of RPC-with-TLS is to hide the content of RPC requests while | |||
content of RPC requests while they are in transit. The RPC-over-TLS | they are in transit. RPC-with-TLS protocol by itself cannot protect | |||
protocol by itself cannot protect against exposure of a user's RPC | against exposure of a user's RPC requests to other users on the same | |||
requests to other users on the same client. | client. | |||
Moreover, client implementations are free to transmit RPC requests | Moreover, client implementations are free to transmit RPC requests | |||
for more than one RPC user using the same TLS session. Depending on | for more than one RPC user using the same TLS session. Depending on | |||
the details of the client RPC implementation, this means that the | the details of the client RPC implementation, this means that the | |||
client's TLS credentials are potentially visible to every RPC user | client's TLS credentials are potentially visible to every RPC user | |||
that shares a TLS session. Privileged users may also be able to | that shares a TLS session. Privileged users may also be able to | |||
access this TLS identity. | access this TLS identity. | |||
As a result, client implementations need to carefully segregate TLS | As a result, client implementations need to carefully segregate TLS | |||
credentials so that local access to it is restricted to only the | credentials so that local access to it is restricted to only the | |||
local users that are authorized to perform operations on the remote | local users that are authorized to perform operations on the remote | |||
RPC server. | RPC server. | |||
7.3. Security Considerations for AUTH_SYS on TLS | 6.3. Security Considerations for AUTH_SYS on TLS | |||
Using a TLS-protected transport when the AUTH_SYS authentication | Using a TLS-protected transport when the AUTH_SYS authentication | |||
flavor is in use addresses several longstanding weaknesses in | flavor is in use addresses several longstanding weaknesses in | |||
AUTH_SYS (as detailed in Appendix A). TLS augments AUTH_SYS by | AUTH_SYS (as detailed in Appendix A). TLS augments AUTH_SYS by | |||
providing both integrity protection and confidentiality that AUTH_SYS | providing both integrity protection and confidentiality that AUTH_SYS | |||
lacks. TLS protects data payloads, RPC headers, and user identities | lacks. TLS protects data payloads, RPC headers, and user identities | |||
against monitoring and alteration while in transit. | against monitoring and alteration while in transit. | |||
TLS guards against in-transit insertion and deletion of RPC messages, | TLS guards against in-transit insertion and deletion of RPC messages, | |||
thus ensuring the integrity of the message stream between RPC client | thus ensuring the integrity of the message stream between RPC client | |||
and server. DTLS does not provide full message stream protection, | and server. DTLS does not provide full message stream protection, | |||
but it does enable receivers to reject non-participant messages. In | but it does enable receivers to reject nonparticipant messages. In | |||
particular, transport layer encryption plus peer authentication | particular, transport-layer encryption plus peer authentication | |||
protects receiving XDR decoders from deserializing untrusted data, a | protects receiving eXternal Data Representation (XDR) decoders from | |||
common coding vulnerability. However, these decoders would still be | deserializing untrusted data, a common coding vulnerability. | |||
exposed to untrusted input in the case of the compromise of a trusted | However, these decoders would still be exposed to untrusted input in | |||
peer or Certificate Authority. | the case of the compromise of a trusted peer or Certification | |||
Authority. | ||||
The use of TLS enables strong authentication of the communicating RPC | The use of TLS enables strong authentication of the communicating RPC | |||
peers, providing a degree of non-repudiation. When AUTH_SYS is used | peers, providing a degree of non-repudiation. When AUTH_SYS is used | |||
with TLS, but the RPC client is unauthenticated, the RPC server still | with TLS, but the RPC client is unauthenticated, the RPC server still | |||
acts on RPC requests for which there is no trustworthy | acts on RPC requests for which there is no trustworthy | |||
authentication. In-transit traffic is protected, but the RPC client | authentication. In-transit traffic is protected, but the RPC client | |||
itself can still misrepresent user identity without server detection. | itself can still misrepresent user identity without server detection. | |||
TLS without authentication is an improvement from AUTH_SYS without | TLS without authentication is an improvement from AUTH_SYS without | |||
encryption, but it leaves a critical security exposure. | encryption, but it leaves a critical security exposure. | |||
skipping to change at page 19, line 20 ¶ | skipping to change at line 755 ¶ | |||
authentication mechanism is RECOMMENDED to prove that the RPC client | authentication mechanism is RECOMMENDED to prove that the RPC client | |||
is known to the RPC server. The server can then determine whether | is known to the RPC server. The server can then determine whether | |||
the UIDs and GIDs in AUTH_SYS requests from that client can be | the UIDs and GIDs in AUTH_SYS requests from that client can be | |||
accepted, based on the authenticated identity of the client. | accepted, based on the authenticated identity of the client. | |||
The use of TLS does not enable RPC clients to detect compromise that | The use of TLS does not enable RPC clients to detect compromise that | |||
leads to the impersonation of RPC users. Also, there continues to be | leads to the impersonation of RPC users. Also, there continues to be | |||
a requirement that the mapping of 32-bit user and group ID values to | a requirement that the mapping of 32-bit user and group ID values to | |||
user identities is the same on both the RPC client and server. | user identities is the same on both the RPC client and server. | |||
7.4. Best Security Policy Practices | 6.4. Best Security Policy Practices | |||
RPC-over-TLS implementations and deployments are strongly encouraged | RPC-with-TLS implementations and deployments are strongly encouraged | |||
to adhere to the following policies to achieve the strongest possible | to adhere to the following policies to achieve the strongest possible | |||
security with RPC-over-TLS. | security with RPC-with-TLS. | |||
* When using AUTH_NULL or AUTH_SYS, both peers are RECOMMENDED to | * When using AUTH_NULL or AUTH_SYS, both peers are RECOMMENDED to | |||
have DNSSEC TLSA records, keys with which to perform mutual peer | have DNSSEC TLSA records, keys with which to perform mutual peer | |||
authentication using one of the methods described in Section 5.2, | authentication using one of the methods described in Section 5.2, | |||
and a security policy that requires mutual peer authentication and | and a security policy that requires mutual peer authentication and | |||
rejection of a connection when host authentication fails. | rejection of a connection when host authentication fails. | |||
* RPCSEC GSS provides integrity and privacy services which are | * RPCSEC_GSS provides integrity and privacy services that are | |||
largely redundant when TLS is in use. These services SHOULD be | largely redundant when TLS is in use. These services SHOULD be | |||
disabled in that case. | disabled in that case. | |||
8. IANA Considerations | 7. IANA Considerations | |||
RFC Editor: In the following subsections, please replace RFC-TBD with | ||||
the RFC number assigned to this document. And, please remove this | ||||
Editor's Note before this document is published. | ||||
8.1. RPC Authentication Flavor | 7.1. RPC Authentication Flavor | |||
Following Appendix B of [RFC5531], the authors request a single new | Following Appendix B of [RFC5531], an entry has been added to the | |||
entry in the RPC Authentication Flavor Numbers registry. The purpose | "RPC Authentication Flavor Numbers" registry. The purpose of the new | |||
of the new authentication flavor is to signal the use of TLS with | authentication flavor is to signal the use of TLS with RPC. This new | |||
RPC. This new flavor is not a pseudo-flavor. | flavor is not a pseudo-flavor. | |||
The fields in the new entry are assigned as follows: | The fields in the new entry have been assigned as follows: | |||
Identifier String: AUTH_TLS | Identifier String: AUTH_TLS | |||
Flavor Name: TLS | Flavor Name: TLS | |||
Value: 7 (to be confirmed by IANA) | Value: 7 | |||
Description: Indicates support for RPC-over-TLS. | Description: Indicates support for RPC-with-TLS | |||
Reference: RFC-TBD | Reference: RFC 9289 | |||
8.2. ALPN Identifier for SUNRPC | 7.2. ALPN Identifier for SunRPC | |||
Following Section 6 of [RFC7301], the authors request the allocation | Following Section 6 of [RFC7301], the following value has been | |||
of the following value in the "Application-Layer Protocol Negotiation | allocated in the "TLS Application-Layer Protocol Negotiation (ALPN) | |||
(ALPN) Protocol IDs" registry. The "sunrpc" string identifies SunRPC | Protocol IDs" registry. The "sunrpc" string identifies SunRPC when | |||
when used over TLS. | used over TLS. | |||
Protocol: SunRPC | Protocol: SunRPC | |||
Identification Sequence: 0x73 0x75 0x6e 0x72 0x70 0x63 ("sunrpc") | Identification Sequence: 0x73 0x75 0x6e 0x72 0x70 0x63 ("sunrpc") | |||
Reference: RFC-TBD | Reference: RFC 9289 | |||
8.3. Object Identifier for PKIX Extended Key Usage | ||||
RFC Editor: In the following subsection, please replace XXX and YYY | 7.3. Object Identifier for PKIX Extended Key Usage | |||
with the IANA numbers assigned to these new entries. And, please | ||||
remove this Editor's Note before this document is published. | ||||
Per the Specification Required policy as defined in Section 4.6 of | Per the Specification Required policy defined in Section 4.6 of | |||
[RFC8126], the authors request the reservation of the following new | [RFC8126], the following new values have been registered in the "SMI | |||
values: | Security for PKIX Extended Key Purpose" registry (1.3.6.1.5.5.7.3) | |||
(see Section 5.2.1.1 and Appendix B). | ||||
* The RPC-over-TLS ASN.1 module in the "SMI Security for PKIX | +=========+====================+===========+ | |||
Extended Key Purpose" registry (1.3.6.1.5.5.7.3) (see | | Decimal | Description | Reference | | |||
Section 5.2.1.1 and Appendix B. | +=========+====================+===========+ | |||
| 33 | id-kp-rpcTLSClient | RFC 9289 | | ||||
+---------+--------------------+-----------+ | ||||
| 34 | id-kp-rpcTLSServer | RFC 9289 | | ||||
+---------+--------------------+-----------+ | ||||
* The RPC-over-TLS client certificate extended key usage | Table 1 | |||
(1.3.6.1.5.5.7.3.XXX). The description of this new entry should | ||||
be "id-kp-rpcTLSClient". | ||||
* The RPC-over-TLS server certificate extended key usage | 7.4. Object Identifier for ASN.1 Module | |||
(1.3.6.1.5.5.7.3.YYY). The description of this new entry should | ||||
be "id-kp-rpcTLSServer". | ||||
IANA should use the current document (RFC-TBD) as the reference for | Per the Specification Required policy defined in Section 4.6 of | |||
the new entries. | [RFC8126], the following new value has been registered in the "SMI | |||
Security for PKIX Module Identifier" registry (1.3.6.1.5.5.7.0) (see | ||||
Appendix B). | ||||
9. References | +=========+========================+===========+ | |||
9.1. Normative References | | Decimal | Description | Reference | | |||
+=========+========================+===========+ | ||||
| 105 | id-mod-rpcWithTLS-2021 | RFC 9289 | | ||||
+---------+------------------------+-----------+ | ||||
[I-D.ietf-kitten-tls-channel-bindings-for-tls13] | Table 2 | |||
Whited, S., "Channel Bindings for TLS 1.3", Work in | ||||
Progress, Internet-Draft, draft-ietf-kitten-tls-channel- | ||||
bindings-for-tls13-00, 11 June 2020, | ||||
<https://tools.ietf.org/html/draft-ietf-kitten-tls- | ||||
channel-bindings-for-tls13-00>. | ||||
[I-D.ietf-tls-dtls-connection-id] | 8. References | |||
Rescorla, E., Tschofenig, H., and T. Fossati, "Connection | ||||
Identifiers for DTLS 1.2", Work in Progress, Internet- | ||||
Draft, draft-ietf-tls-dtls-connection-id-07, 21 October | ||||
2019, <https://tools.ietf.org/html/draft-ietf-tls-dtls- | ||||
connection-id-07>. | ||||
[I-D.ietf-tls-dtls13] | 8.1. Normative References | |||
Rescorla, E., Tschofenig, H., and N. Modadugu, "The | ||||
Datagram Transport Layer Security (DTLS) Protocol Version | ||||
1.3", Work in Progress, Internet-Draft, draft-ietf-tls- | ||||
dtls13-38, 29 May 2020, | ||||
<https://tools.ietf.org/html/draft-ietf-tls-dtls13-38>. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC5056] Williams, N., "On the Use of Channel Bindings to Secure | [RFC5056] Williams, N., "On the Use of Channel Bindings to Secure | |||
Channels", RFC 5056, DOI 10.17487/RFC5056, November 2007, | Channels", RFC 5056, DOI 10.17487/RFC5056, November 2007, | |||
<https://www.rfc-editor.org/info/rfc5056>. | <https://www.rfc-editor.org/info/rfc5056>. | |||
skipping to change at page 22, line 16 ¶ | skipping to change at line 878 ¶ | |||
"Transport Layer Security (TLS) Application-Layer Protocol | "Transport Layer Security (TLS) Application-Layer Protocol | |||
Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301, | Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301, | |||
July 2014, <https://www.rfc-editor.org/info/rfc7301>. | July 2014, <https://www.rfc-editor.org/info/rfc7301>. | |||
[RFC7525] Sheffer, Y., Holz, R., and P. Saint-Andre, | [RFC7525] Sheffer, Y., Holz, R., and P. Saint-Andre, | |||
"Recommendations for Secure Use of Transport Layer | "Recommendations for Secure Use of Transport Layer | |||
Security (TLS) and Datagram Transport Layer Security | Security (TLS) and Datagram Transport Layer Security | |||
(DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May | (DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May | |||
2015, <https://www.rfc-editor.org/info/rfc7525>. | 2015, <https://www.rfc-editor.org/info/rfc7525>. | |||
[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/info/rfc7942>. | ||||
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
<https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
<https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
[X.509] International Telephone and Telegraph Consultative | [RFC9147] Rescorla, E., Tschofenig, H., and N. Modadugu, "The | |||
Committee, "ITU-T X.509 - Information technology - The | Datagram Transport Layer Security (DTLS) Protocol Version | |||
Directory: Public-key and attribute certificate | 1.3", RFC 9147, DOI 10.17487/RFC9147, April 2022, | |||
frameworks.", ISO/IEC 9594-8, CCITT Recommendation X.509, | <https://www.rfc-editor.org/info/rfc9147>. | |||
October 2019. | ||||
9.2. Informative References | [RFC9266] Whited, S., "Channel Bindings for TLS 1.3", RFC 9266, | |||
DOI 10.17487/RFC9266, July 2022, | ||||
<https://www.rfc-editor.org/info/rfc9266>. | ||||
[X.509] International Telecommunication Union, "Information | ||||
technology – Open Systems Interconnection – The Directory: | ||||
Public-key and attribute certificate frameworks", ISO/ | ||||
IEC 9594-8, ITU-T Recommendation X.509, October 2019. | ||||
[X.680] ITU-T, "Information technology - Abstract Syntax Notation | ||||
One (ASN.1): Specification of basic notation", ITU-T | ||||
Recommendation X.680, February 2021, | ||||
<https://www.itu.int/rec/T-REC-X.680>. | ||||
[X.690] ITU-T, "Information technology - ASN.1 encoding rules: | ||||
Specification of Basic Encoding Rules (BER), Canonical | ||||
Encoding Rules (CER) and Distinguished Encoding Rules | ||||
(DER)", ITU-T Recommendation X.690, February 2021, | ||||
<https://www.itu.int/rec/T-REC-X.690>. | ||||
8.2. Informative References | ||||
[RFC1833] Srinivasan, R., "Binding Protocols for ONC RPC Version 2", | [RFC1833] Srinivasan, R., "Binding Protocols for ONC RPC Version 2", | |||
RFC 1833, DOI 10.17487/RFC1833, August 1995, | RFC 1833, DOI 10.17487/RFC1833, August 1995, | |||
<https://www.rfc-editor.org/info/rfc1833>. | <https://www.rfc-editor.org/info/rfc1833>. | |||
[RFC2203] Eisler, M., Chiu, A., and L. Ling, "RPCSEC_GSS Protocol | [RFC2203] Eisler, M., Chiu, A., and L. Ling, "RPCSEC_GSS Protocol | |||
Specification", RFC 2203, DOI 10.17487/RFC2203, September | Specification", RFC 2203, DOI 10.17487/RFC2203, September | |||
1997, <https://www.rfc-editor.org/info/rfc2203>. | 1997, <https://www.rfc-editor.org/info/rfc2203>. | |||
[RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, | ||||
DOI 10.17487/RFC2818, May 2000, | ||||
<https://www.rfc-editor.org/info/rfc2818>. | ||||
[RFC6698] Hoffman, P. and J. Schlyter, "The DNS-Based Authentication | [RFC6698] Hoffman, P. and J. Schlyter, "The DNS-Based Authentication | |||
of Named Entities (DANE) Transport Layer Security (TLS) | of Named Entities (DANE) Transport Layer Security (TLS) | |||
Protocol: TLSA", RFC 6698, DOI 10.17487/RFC6698, August | Protocol: TLSA", RFC 6698, DOI 10.17487/RFC6698, August | |||
2012, <https://www.rfc-editor.org/info/rfc6698>. | 2012, <https://www.rfc-editor.org/info/rfc6698>. | |||
[RFC6973] Cooper, A., Tschofenig, H., Aboba, B., Peterson, J., | [RFC6973] Cooper, A., Tschofenig, H., Aboba, B., Peterson, J., | |||
Morris, J., Hansen, M., and R. Smith, "Privacy | Morris, J., Hansen, M., and R. Smith, "Privacy | |||
Considerations for Internet Protocols", RFC 6973, | Considerations for Internet Protocols", RFC 6973, | |||
DOI 10.17487/RFC6973, July 2013, | DOI 10.17487/RFC6973, July 2013, | |||
<https://www.rfc-editor.org/info/rfc6973>. | <https://www.rfc-editor.org/info/rfc6973>. | |||
skipping to change at page 23, line 38 ¶ | skipping to change at line 959 ¶ | |||
[RFC8167] Lever, C., "Bidirectional Remote Procedure Call on RPC- | [RFC8167] Lever, C., "Bidirectional Remote Procedure Call on RPC- | |||
over-RDMA Transports", RFC 8167, DOI 10.17487/RFC8167, | over-RDMA Transports", RFC 8167, DOI 10.17487/RFC8167, | |||
June 2017, <https://www.rfc-editor.org/info/rfc8167>. | June 2017, <https://www.rfc-editor.org/info/rfc8167>. | |||
[RFC8899] Fairhurst, G., Jones, T., Tüxen, M., Rüngeler, I., and T. | [RFC8899] Fairhurst, G., Jones, T., Tüxen, M., Rüngeler, I., and T. | |||
Völker, "Packetization Layer Path MTU Discovery for | Völker, "Packetization Layer Path MTU Discovery for | |||
Datagram Transports", RFC 8899, DOI 10.17487/RFC8899, | Datagram Transports", RFC 8899, DOI 10.17487/RFC8899, | |||
September 2020, <https://www.rfc-editor.org/info/rfc8899>. | September 2020, <https://www.rfc-editor.org/info/rfc8899>. | |||
[RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | ||||
Ed., "HTTP Semantics", STD 97, RFC 9110, | ||||
DOI 10.17487/RFC9110, June 2022, | ||||
<https://www.rfc-editor.org/info/rfc9110>. | ||||
Appendix A. Known Weaknesses of the AUTH_SYS Authentication Flavor | Appendix A. Known Weaknesses of the AUTH_SYS Authentication Flavor | |||
The ONC RPC protocol, as specified in [RFC5531], provides several | The ONC RPC protocol, as specified in [RFC5531], provides several | |||
modes of security, traditionally referred to as "authentication | modes of security, commonly referred to as "authentication flavors". | |||
flavors". Some of these flavors provide much more than an | Some of these flavors provide much more than an authentication | |||
authentication service. We refer to these as authentication flavors, | service. We refer to these as authentication flavors, security | |||
security flavors, or simply, flavors. One of the earliest and most | flavors, or simply, flavors. One of the earliest and most basic | |||
basic flavors is AUTH_SYS, also known as AUTH_UNIX. Appendix A of | flavors is AUTH_SYS, also known as AUTH_UNIX. Appendix A of | |||
[RFC5531] specifies AUTH_SYS. | [RFC5531] specifies AUTH_SYS. | |||
AUTH_SYS assumes that the RPC client and server both use POSIX-style | AUTH_SYS assumes that the RPC client and server both use POSIX-style | |||
user and group identifiers (each user and group can be distinctly | user and group identifiers (each user and group can be distinctly | |||
represented as a 32-bit unsigned integer). It also assumes that the | represented as a 32-bit unsigned integer). It also assumes that the | |||
client and server both use the same mapping of user and group to an | client and server both use the same mapping of user and group to an | |||
integer. One user ID, one primary group ID, and up to 16 | integer. One user ID, one primary group ID, and up to 16 | |||
supplemental group IDs are associated with each RPC request. The | supplemental group IDs are associated with each RPC request. The | |||
combination of these identifies the entity on the client that is | combination of these identifies the entity on the client that is | |||
making the request. | making the request. | |||
A string identifies peers (hosts) in each RPC request. [RFC5531] | A string identifies peers (hosts) in each RPC request. [RFC5531] | |||
does not specify any requirements for this string other than that is | does not specify any requirements for this string other than that it | |||
no longer than 255 octets. It does not have to be the same from | is no longer than 255 octets. It does not have to be the same from | |||
request to request. Also, it does not have to match the DNS hostname | request to request. Also, it does not have to match the DNS hostname | |||
of the sending host. For these reasons, even though most | of the sending host. For these reasons, even though most | |||
implementations fill in their hostname in this field, receivers | implementations fill in their hostname in this field, receivers | |||
typically ignore its content. | typically ignore its content. | |||
Appendix A of [RFC5531] contains a brief explanation of security | Appendix A of [RFC5531] contains a brief explanation of security | |||
considerations: | considerations: | |||
| It should be noted that use of this flavor of authentication does | | It should be noted that use of this flavor of authentication does | |||
| not guarantee any security for the users or providers of a | | not guarantee any security for the users or providers of a | |||
skipping to change at page 24, line 46 ¶ | skipping to change at line 1021 ¶ | |||
2. It does not provide authentication of RPC peer machines, other | 2. It does not provide authentication of RPC peer machines, other | |||
than inclusion of an unprotected domain name. | than inclusion of an unprotected domain name. | |||
3. The use of 32-bit unsigned integers as user and group identifiers | 3. The use of 32-bit unsigned integers as user and group identifiers | |||
is problematic because these data types are not cryptographically | is problematic because these data types are not cryptographically | |||
signed or otherwise verified by any authority. In addition, the | signed or otherwise verified by any authority. In addition, the | |||
mapping of these integers to users and groups has to be | mapping of these integers to users and groups has to be | |||
consistent amongst a server and its cohort of clients. | consistent amongst a server and its cohort of clients. | |||
4. Because the user and group ID fields are not integrity-protected, | 4. Because the user and group ID fields are not integrity protected, | |||
AUTH_SYS does not provide non-repudiation. | AUTH_SYS does not provide non-repudiation. | |||
Appendix B. ASN.1 Module | Appendix B. ASN.1 Module | |||
RFC Editor: In the following section, please replace XXX and YYY with | The following module adheres to ASN.1 specifications [X.680] and | |||
the IANA numbers assigned to these new entries. And, please remove | [X.690]. | |||
this Editor's Note before this document is published. | ||||
<CODE BEGINS> | <CODE BEGINS> | |||
RPCwithTLS-2021 | ||||
{ iso(1) identified-organization(3) dod(6) internet(1) | ||||
security(5) mechanisms(5) pkix(7) id-mod(0) | ||||
id-mod-rpcWithTLS-2021(105) } | ||||
DEFINITIONS IMPLICIT TAGS ::= | ||||
BEGIN | ||||
-- OID Arc | -- OID Arc | |||
id-kp OBJECT IDENTIFIER ::= | id-kp OBJECT IDENTIFIER ::= | |||
{ iso(1) identified-organization(3) dod(6) internet(1) | { iso(1) identified-organization(3) dod(6) internet(1) | |||
security(5) mechanisms(5) pkix(7) kp(3) } | security(5) mechanisms(5) pkix(7) kp(3) } | |||
-- Extended Key Usage Values | -- Extended Key Usage Values | |||
id-kp-rpcTLSClient OBJECT IDENTIFIER ::= { id-kp XXX } | id-kp-rpcTLSClient OBJECT IDENTIFIER ::= { id-kp 33 } | |||
id-kp-rpcTLSServer OBJECT IDENTIFIER ::= { id-kp YYY } | id-kp-rpcTLSServer OBJECT IDENTIFIER ::= { id-kp 34 } | |||
END | ||||
<CODE ENDS> | <CODE ENDS> | |||
Acknowledgments | Acknowledgments | |||
Special mention goes to Charles Fisher, author of "Encrypting NFSv4 | Special mention goes to Charles Fisher, author of "Encrypting NFSv4 | |||
with Stunnel TLS" (https://www.linuxjournal.com/content/encrypting- | with Stunnel TLS" <https://www.linuxjournal.com/content/encrypting- | |||
nfsv4-stunnel-tls). His article inspired the mechanism described in | nfsv4-stunnel-tls>. His article inspired the mechanism described in | |||
the current document. | the current document. | |||
Many thanks to Tigran Mkrtchyan and Rick Macklem for their work on | Many thanks to Benjamin Coddington, Tigran Mkrtchyan, and Rick | |||
prototype implementations and feedback on the current document. | Macklem for their work on prototype implementations and feedback on | |||
the current document. Also, thanks to Benjamin Kaduk for his expert | ||||
guidance on the use of PKIX and TLS and to Russ Housley for his ASN.1 | ||||
expertise and for providing other proper finishing touches. In | ||||
addition, the authors thank the other members of the IESG for their | ||||
astute review comments. These contributors made this a significantly | ||||
better document. | ||||
Thanks to Derrell Piper for numerous suggestions that improved both | Thanks to Derrell Piper for numerous suggestions that improved both | |||
this simple mechanism and the current document's security-related | this simple mechanism and the current document's security-related | |||
discussion. | discussion. | |||
Many thanks to Transport Area Director Magnus Westerlund for his | Many thanks to Transport Area Director Magnus Westerlund for his | |||
sharp questions and careful reading of the final revisions of the | sharp questions and careful reading of the final revisions of the | |||
current document. The text of Section 5.1.2 is mostly his | current document. The text of Section 5.1.2 is mostly his | |||
contribution. Also, thanks to Benjamin Kaduk for his expert guidance | contribution. | |||
on the use of PKIX and TLS. In addition, the authors thank the other | ||||
members of the IESG for their astute review comments. These | ||||
contributors made this a significantly better document. | ||||
The authors are additionally grateful to Bill Baker, David Black, | The authors are additionally grateful to Bill Baker, David Black, | |||
Alan DeKok, Lars Eggert, Olga Kornievskaia, Greg Marsden, Alex | Alan DeKok, Lars Eggert, Olga Kornievskaia, Greg Marsden, Alex | |||
McDonald, Justin Mazzola Paluska, Tom Talpey, Martin Thomson, and | McDonald, Justin Mazzola Paluska, Tom Talpey, Martin Thomson, and | |||
Nico Williams, for their input and support of this work. | Nico Williams for their input and support of this work. | |||
Finally, special thanks to NFSV4 Working Group Chair and document | Finally, special thanks to NFSV4 Working Group Chair and document | |||
shepherd David Noveck, NFSV4 Working Group Chairs Spencer Shepler and | shepherd David Noveck, NFSV4 Working Group Chairs Spencer Shepler and | |||
Brian Pawlowski, and NFSV4 Working Group Secretary Thomas Haynes for | Brian Pawlowski, and NFSV4 Working Group Secretary Thomas Haynes for | |||
their guidance and oversight. | their guidance and oversight. | |||
Authors' Addresses | Authors' Addresses | |||
Trond Myklebust | Trond Myklebust | |||
Hammerspace Inc | Hammerspace Inc. | |||
4300 El Camino Real Ste 105 | 4300 El Camino Real, Suite 105 | |||
Los Altos, CA 94022 | Los Altos, CA 94022 | |||
United States of America | United States of America | |||
Email: trond.myklebust@hammerspace.com | Email: trond.myklebust@hammerspace.com | |||
Charles Lever (editor) | Charles Lever (editor) | |||
Oracle Corporation | Oracle Corporation | |||
United States of America | United States of America | |||
Email: chuck.lever@oracle.com | Email: chuck.lever@oracle.com | |||
End of changes. 131 change blocks. | ||||
445 lines changed or deleted | 341 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |