| 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. | ||||