RFC 5734

Extensible Provisioning Protocol (EPP) Transport over TCP

๐Ÿ“… published August 2009, from ietf

๐Ÿ“ฎ RFC 5734: Extensible Provisioning Protocol (EPP) Transport over TCP โœจ

Network Working Group ๐ŸŽ€ Author: S. Hollenbeck, VeriSign, Inc. ๐Ÿ’… Date: August 2009 ๐Ÿ“… Category: Standards Track (STD 69) ๐Ÿ‘‘ Obsoletes: RFC 4934 ๐Ÿฆ‹

Bestie, this is the spec for how EPP sessions ride on a single TCP connection. It's giving very structured, very important, and it's a must-read if you're building anything with EPP ๐Ÿ’–

Abstract ๐ŸŒธ

Okay so this doc explains how one EPP session gets mapped onto a single Transmission Control Protocol (TCP) connection ๐Ÿ”Œ. The main thing to know is that this mapping requires use of the Transport Layer Security (TLS) protocol to protect the info moving between an EPP client and an EPP server ๐Ÿ”. And yes, this document obsoletes RFC 4934 ๐Ÿ’…

Status of This Memo ๐Ÿงš

This document specifies an Internet standards track protocol for the Internet community, and it requests discussion and suggestions for improvements ๐Ÿ’ฌ. For the standardization state and status of this protocol, check the current edition of the "Internet Official Protocol Standards" (STD 1) โœจ. Distribution of this memo is unlimited ๐ŸŒˆ

Copyright (c) 2009 IETF Trust and the persons identified as the document authors. All rights reserved ๐Ÿ’œ

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents in effect on the date of publication of this document (http://trustee.ietf.org/license-info). Please review these documents carefully, because they describe your rights and restrictions with respect to this document ๐Ÿ™ˆ

Table of Contents ๐Ÿ“

1. Introduction ....................................................2
   1.1. Conventions Used in This Document ..........................2
2. Session Management ..............................................2
3. Message Exchange ................................................3
4. Data Unit Format ................................................6
5. Transport Considerations ........................................6
6. Internationalization Considerations .............................7
7. IANA Considerations .............................................7
8. Security Considerations .........................................7
9. TLS Usage Profile ...............................................8
10. Acknowledgements ..............................................11
11. References ....................................................11
   11.1. Normative References .....................................11
   11.2. Informative References ...................................12
Appendix A.  Changes from RFC 4934 ................................13

1. Introduction โœจ

Okay so this document describes how the Extensible Provisioning Protocol (EPP) gets mapped onto a single client-server TCP connection ๐Ÿ”Œ. Security services beyond the ones EPP already defines come from the Transport Layer Security (TLS) Protocol [RFC2246] ๐Ÿ”. EPP itself is described in [RFC5730], and TCP is described in [RFC0793]. And this document obsoletes RFC 4934 [RFC4934], which is the whole reason this version exists ๐Ÿ’…

1.1. Conventions Used in This Document ๐Ÿ“–

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119]. These are the official requirement words, so bestie, pay attention to every single one ๐Ÿ‘‘

2. Session Management ๐Ÿฆ‹

Mapping EPP session management onto the TCP service is honestly super straightforward ๐Ÿ’–. An EPP session starts with creating a TCP connection between two peers. One peer initiates the connection request, and the other peer responds to it. The initiating peer is called the "client", and the responding peer is called the "server". An EPP server MUST listen for TCP connection requests on a standard TCP port assigned by IANA ๐ŸŽ€

The client MUST issue an active OPEN call, specifying the TCP port number on which the server is listening for EPP connection attempts ๐Ÿ“ž. Once the TCP session is established, the EPP server MUST return an EPP <greeting> to the client ๐Ÿ‘‹

An EPP session is normally ended when the client issues an EPP <logout> command ๐Ÿšช. A server that receives an EPP <logout> command MUST end the EPP session and close the TCP connection with a CLOSE call ๐Ÿ’…. A client MAY end an EPP session by issuing a CLOSE call too ๐ŸŒธ

A server MAY limit the life span of an established TCP connection โณ. EPP sessions that stay inactive for longer than a server-defined period MAY be ended by a server issuing a CLOSE call ๐Ÿ’ค. A server MAY also close TCP connections that have been open and active for longer than a server-defined period ๐Ÿซถ

3. Message Exchange ๐Ÿ’Œ

Except for the EPP server greeting, EPP messages are initiated by the EPP client in the form of EPP commands ๐Ÿ“จ. An EPP server MUST return an EPP response to an EPP command on the same TCP connection that carried the command ๐Ÿ”. Now here's the spicy part: if the TCP connection gets closed after a server receives and successfully processes a command, but before the response can make it back to the client, the server MAY attempt to undo the effects of the command. The goal is a consistent state between the client and the server ๐Ÿ˜ญ. EPP commands are idempotent, so processing a command more than once produces the same net effect on the repository as processing it once โœจ

An EPP client streams EPP commands to an EPP server over an established TCP connection ๐ŸŒŠ. A client MUST NOT distribute commands from a single EPP session over multiple TCP connections ๐Ÿ™…โ€โ™€๏ธ. A client MAY establish multiple TCP connections to support multiple EPP sessions, with each session mapped to a single connection ๐Ÿงš. A server SHOULD limit a client to a maximum number of TCP connections, based on server capabilities and operational load ๐Ÿ’…

EPP describes client-server interaction as a command-response exchange, where the client sends one command to the server and the server returns one response to the client ๐ŸŽ€. A client might be able to get a slight performance gain by pipelining commands with TCP transport (sending more than one command before the response to the first command arrives) ๐Ÿš€. But this feature does not change the basic single command, single response operating mode of the core protocol ๐Ÿฆ‹

Each EPP data unit MUST contain a single EPP message ๐Ÿ“ฆ. Commands MUST be processed independently and in the same order in which the client sent them ๐Ÿ”ข

A server SHOULD impose a limit on the amount of time a client has to issue a well-formed EPP command โฐ. A server SHOULD end an EPP session and close an open TCP connection if a well-formed command is not received within that time limit ๐Ÿ’€

A general state machine for an EPP server is described in Section 2 of [RFC5730] ๐Ÿ—บ๏ธ. General client-server message exchange using TCP transport is illustrated in Figure 1 below ๐Ÿ‘‡

                  Client                  Server
             |                                     |
             |                Connect              |
             | >>------------------------------->> |
             |                                     |
             |             Send Greeting           |
             | <<-------------------------------<< |
             |                                     |
             |             Send <login>            |
             | >>------------------------------->> |
             |                                     |
             |             Send Response           |
             | <<-------------------------------<< |
             |                                     |
             |             Send Command            |
             | >>------------------------------->> |
             |                                     |
             |             Send Response           |
             | <<-------------------------------<< |
             |                                     |
             |            Send Command X           |
             | >>------------------------------->> |
             |                                     |
             |    Send Command Y                   |
             | >>---------------+                  |
             |                  |                  |
             |                  |                  |
             |            Send Response X          |
             | <<---------------(---------------<< |
             |                  |                  |
             |                  |                  |
             |                  +--------------->> |
             |                                     |
             |            Send Response Y          |
             | <<-------------------------------<< |
             |                                     |
             |             Send <logout>           |
             | >>------------------------------->> |
             |                                     |
             |     Send Response & Disconnect      |
             | <<-------------------------------<< |
             |                                     |

Figure 1: TCP Client-Server Message Exchange ๐Ÿ“Š

4. Data Unit Format ๐Ÿงฉ

The EPP data unit has two fields: a 32-bit header that describes the total length of the data unit, and the EPP XML instance ๐ŸŽ. The length of the EPP XML instance is found by subtracting four octets from the total length of the data unit. A receiver must successfully read that many octets to retrieve the complete EPP XML instance before processing the EPP message ๐Ÿ”

Here's what the EPP Data Unit Format looks like. One tick mark stands for one bit position ๐Ÿ–ผ๏ธ:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           Total Length                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         EPP XML Instance                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Total Length (32 bits) is the total length of the EPP data unit, measured in octets in network (big endian) byte order ๐Ÿ“. The octets contained in this field MUST be included in the total length calculation ๐Ÿซถ

EPP XML Instance (variable length) is the EPP XML instance carried in the data unit ๐Ÿ“„

5. Transport Considerations ๐Ÿšš

Section 2.1 of the EPP core protocol specification [RFC5730] describes the considerations that protocol transport mappings need to address ๐Ÿ“‹. This document handles each of those considerations with a mix of its own features and features that TCP provides, as follows ๐Ÿ’…

  • TCP includes features for reliability, flow control, ordered delivery, and congestion control ๐ŸŒŠ. Section 1.5 of RFC 793 [RFC0793] describes these features in detail, and the congestion control principles are described further in RFC 2581 [RFC2581] and RFC 2914 [RFC2914] โœจ. TCP is a connection-oriented protocol, and Section 2 of this document describes how EPP sessions are mapped to TCP connections ๐Ÿฆ‹
  • Sections 2 and 3 of this document describe how the stateful nature of EPP is preserved through managed sessions and controlled message exchanges ๐Ÿ”
  • Section 3 of this document notes that command pipelining is possible with TCP ๐Ÿš€. Batch-oriented processing, meaning combining multiple EPP commands in a single data unit, is not permitted ๐Ÿ™…โ€โ™€๏ธ
  • Section 4 of this document describes features that frame data units by explicitly specifying the number of octets used to represent a data unit ๐Ÿง

6. Internationalization Considerations ๐ŸŒธ

Okay so this one's a quick one, bestie. This document doesn't introduce or present any internationalization or localization issues. โœจ

7. IANA Considerations ๐Ÿงš

System port number 700 has been assigned by the IANA for mapping EPP onto TCP. ๐Ÿ’–

User port number 3121 (which was used for development and test purposes) has been reclaimed by the IANA. ๐Ÿ“

8. Security Considerations ๐Ÿ’€

Okay, this section is SERIOUS, so get ready. ๐Ÿ˜ญ EPP as-is only has super basic client authentication, which means identifiers plus plain text passwords. A passive attack is enough to recover client identifiers and passwords, and then command forgery is trivial. Protection against most other common attacks MUST be provided by other layered protocols. ๐Ÿ”ฅ

When EPP sits on top of TCP, the Transport Layer Security (TLS) Protocol version 1.0 [RFC2246] or its successors (such as TLS 1.2 [RFC5246]) MUST be used to provide integrity, confidentiality, and mutual strong client-server authentication. You use the latest version that both parties support. ๐Ÿ”’ TLS implementations often have a weak cryptographic mode that SHOULD NOT be used to protect EPP, so clients and servers who want high security SHOULD use TLS with cryptographic algorithms that are less susceptible to compromise. Not that weak mode, periodt. ๐Ÿ’…

Authentication using the TLS Handshake Protocol confirms the identity of the client and server machines. EPP then adds its own client identifier and password to identify and authenticate the client's user identity to the server, on top of the machine authentication from TLS. ๐Ÿซถ The identity in the client certificate and the identity in the EPP client identifier can be different, because a server can assign multiple user identities for use from any particular client machine. Acceptable certificate identities MUST be negotiated between client operators and server operators using an out-of-band mechanism. Presented certificate identities MUST match negotiated identities before EPP service is granted. โœจ

There's a real risk of login credential compromise if a client doesn't properly identify a server before trying to set up an EPP session. ๐Ÿ™ˆ Before sending login credentials, a client needs to confirm that the server certificate received in the TLS handshake is an expected certificate for the server. A client also needs to confirm that the greeting from the server contains expected identification information. After setting up a TLS session and receiving an EPP greeting on a protected TCP connection, clients MUST compare the certificate subject and/or subjectAltName to expected server identification information and abort processing if a mismatch is detected. If certificate validation succeeds, the client then needs to make sure the information in the received certificate and greeting is consistent and appropriate. As described above, both checks typically need an out-of-band exchange of information between client and server to figure out the expected values before in-band connections are attempted. ๐Ÿ‘‘

EPP TCP servers are vulnerable to common TCP denial-of-service attacks, including TCP SYN flooding. ๐Ÿ’€ Servers SHOULD take steps to minimize the impact of a denial-of-service attack, using combinations of easy-to-implement solutions such as firewall technology and border router filters that restrict inbound server access to known, trusted clients. ๐Ÿ›ก๏ธ

9. TLS Usage Profile ๐ŸŽ€

So the client should start a connection to the server and then send the TLS Client Hello to kick off the TLS handshake. Once the handshake finishes, the client can send the first EPP message. ๐Ÿฆ‹

TLS implementations are REQUIRED to support the mandatory cipher suite specified in the implemented version: ๐Ÿ”

  • TLS 1.0 [RFC2246]: TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
  • TLS 1.1 [RFC4346]: TLS_RSA_WITH_3DES_EDE_CBC_SHA
  • TLS 1.2 [RFC5246]: TLS_RSA_WITH_AES_128_CBC_SHA

This document is assumed to apply to future versions of TLS too, and in that case the mandatory cipher suite for the implemented version MUST be supported. ๐ŸŒˆ

Mutual client and server authentication using the TLS Handshake Protocol is REQUIRED. ๐Ÿ’œ Signatures on the complete certification path for both the client machine and the server machine MUST be validated as part of the TLS handshake. Information in the client and server certificates, like validity periods and machine names, MUST also be validated. For all the gory details on certification path validation, check out RFC 5280 [RFC5280]. EPP service MUST NOT be granted until the TLS handshake and certificate validation finish successfully, which makes sure both machines are authenticated and cryptographic protections are in place. ๐Ÿ”ฅ

If the client has external information about the expected identity of the server, the server name check MAY be omitted. For example, a client might be connecting to a machine whose address and server name are dynamic, but the client knows the certificate the server will present. ๐Ÿงš In cases like that, it's important to narrow the scope of acceptable certificates as much as possible to prevent man-in-the-middle attacks. In special cases, it might be appropriate for the client to simply ignore the server's identity, but it needs to be understood that this leaves the connection open to active attack. ๐Ÿ˜ฌ

During the TLS negotiation, the EPP client MUST check its understanding of the server name / IP address against the server's identity as presented in the server Certificate message, to prevent man-in-the-middle attacks. In this section, the client's understanding of the server's identity is called the "reference identity". Checking follows the rules below, in the specified order. โš ๏ธ
  • If the reference identity is a server name:
    • If a subjectAltName extension of the dNSName [CCITT.X509.1988] type is present in the server's certificate, then it SHOULD be used as the source of the server's identity. Matching is performed as described in Section 7.2 of [RFC5280], with the exception that wildcard matching (see below) is allowed for dNSName type. If the certificate contains multiple names (for example, more than one dNSName field), then a match with any one of the fields is considered acceptable. ๐ŸŒธ
    • The '*' (ASCII 42) wildcard character is allowed in subjectAltName values of type dNSName, and then only as the left-most (least significant) DNS label in that value. This wildcard matches any left-most DNS label in the server name. So the subject *.example.com matches the server names a.example.com and b.example.com, but does not match example.com or a.b.example.com. ๐Ÿ’…
    • The server's identity MAY also be verified by comparing the reference identity to the Common Name (CN) [RFC4519] value in the leaf Relative Distinguished Name (RDN) of the subjectName field of the server's certificate. This comparison is performed using the rules for comparison of DNS names in bullet 1 above (including wildcard matching). Although using the Common Name value is existing practice, it is deprecated, and Certification Authorities are encouraged to provide subjectAltName values instead. Note that the TLS implementation may represent DNs in certificates according to X.500 or other conventions. For example, some X.500 implementations order the RDNs in a DN using a left-to-right (most significant to least significant) convention instead of LDAP's right-to-left convention. ๐Ÿ™ˆ
  • If the reference identity is an IP address:
    • The iPAddress subjectAltName SHOULD be used by the client for comparison. In that case, the reference identity MUST be converted to the "network byte order" octet string representation. For IP Version 4 (as specified in RFC 791 [RFC0791]), the octet string will contain exactly four octets. For IP Version 6 (as specified in RFC 2460 [RFC2460]), the octet string will contain exactly sixteen octets. This octet string is then compared against subjectAltName values of type iPAddress. A match occurs if the reference identity octet string and value octet strings are identical. ๐Ÿ”ข

If the server identity check fails, user-oriented clients SHOULD either notify the user (clients MAY give the user the opportunity to continue with the EPP session in this case) or close the transport connection and indicate that the server's identity is suspect. ๐Ÿšจ Automated clients SHOULD return or log an error indicating that the server's identity is suspect and/or SHOULD close the transport connection. Automated clients MAY provide a configuration setting that disables this check, but MUST provide a setting that enables it. ๐Ÿค–

During the TLS negotiation, the EPP server MUST verify that the client certificate matches the reference identity previously negotiated out of band, as specified in Section 8. The server should match the entire subject name or the subjectAltName as described in RFC 5280. The server MAY enforce other restrictions on the subjectAltName, for example if it knows that a particular client always connects from a particular hostname / IP address. ๐Ÿง 

All EPP messages MUST be sent as TLS "application data". ๐Ÿ“จ It's possible for multiple EPP messages to be contained in one TLS record, or for an EPP message to be transferred across multiple TLS records. ๐ŸŽˆ

When no data has been received from a connection for a long time (where the application decides what "long" means), a server MAY close the connection. The server MUST attempt to start an exchange of close_notify alerts with the client before closing the connection. Servers that aren't ready to receive any more data MAY close the connection after sending the close_notify alert, which generates an incomplete close on the client side. ๐Ÿ‘‹

10. Acknowledgements ๐Ÿซถ

RFC 3734 is a product of the PROVREG working group, which suggested improvements and gave many invaluable comments. The author wants to thank WG chairs Edward Lewis and Jaap Akkerhuis for their process and editorial contributions. RFC 4934 and this document are individual submissions, based on the work done in RFC 3734. ๐ŸŒŸ

Specific suggestions that went into this document came from Chris Bason, Randy Bush, Patrik Faltstrom, Ned Freed, James Gould, Dan Manley, and John Immordino. Iconic group of people, honestly. ๐Ÿ‘‘

11. References ๐Ÿ“š

11.1. Normative References โœจ

okay so these are the docs this spec literally can't work without, bestie ๐Ÿ“š they're the must-reads ๐Ÿ’…

  • [CCITT.X509.1988] International Telephone and Telegraph Consultative Committee, "Information Technology - Open Systems Interconnection - The Directory: Authentication Framework", CCITT Recommendation X.509, November 1988.
  • [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, September 1981. ๐ŸŒธ
  • [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, RFC 793, September 1981. ๐Ÿฆ‹
  • [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. ๐Ÿ’–
  • [RFC2246] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", RFC 2246, January 1999. ๐ŸŽ€
  • [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) Specification", RFC 2460, December 1998. ๐Ÿงš
  • [RFC4519] Sciberras, A., "Lightweight Directory Access Protocol (LDAP): Schema for User Applications", RFC 4519, June 2006. โญ
  • [RFC5730] Hollenbeck, S., "Extensible Provisioning Protocol (EPP)", STD 69, RFC 5730, August 2009. ๐Ÿ‘‘

11.2. Informative References ๐ŸŒˆ

these ones are more like bonus reading, but honestly still worth it ๐Ÿค“

  • [RFC2581] Allman, M., Paxson, V., and W. Stevens, "TCP Congestion Control", RFC 2581, April 1999. ๐Ÿ“
  • [RFC2914] Floyd, S., "Congestion Control Principles", BCP 41, RFC 2914, September 2000. ๐Ÿ’œ
  • [RFC4346] Dierks, T. and E. Rescorla, "The Transport Layer Security (TLS) Protocol Version 1.1", RFC 4346, April 2006. ๐Ÿซถ
  • [RFC4934] Hollenbeck, S., "Extensible Provisioning Protocol (EPP) Transport Over TCP", RFC 4934, May 2007. ๐Ÿ”ฅ
  • [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security (TLS) Protocol Version 1.2", RFC 5246, August 2008. โœจ
  • [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., Housley, R., and W. Polk, "Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 5280, May 2008. ๐ŸŽ€

Appendix A. Changes from RFC 4934 ๐Ÿ’…

this is the glow-up log! here's everything that changed since the last version ๐Ÿฆ‹

  1. Changed "This document obsoletes RFC 3734" to "This document obsoletes RFC 4934".
  2. Replaced references to RFC 3280 with references to 5280.
  3. Replaced references to RFC 3734 with references to 4934.
  4. Updated references to RFC 4346 and TLS 1.1 with references to 5246 and TLS 1.2.
  5. Replaced references to RFC 4930 with references to 5730.
  6. Added clarifying TLS Usage Profile section and included references.
  7. Moved the paragraph that begins with "Mutual client and server authentication" from the Security Considerations section to the TLS Usage Profile section.

Author's Address ๐Ÿงš

and that's the whole vibe, periodt ๐Ÿ’– here's who wrote it:

Scott Hollenbeck
VeriSign, Inc.
21345 Ridgetop Circle
Dulles, VA  20166-6503
US

EMail: shollenbeck@verisign.com

the end, bestie!! ๐ŸŒˆ๐Ÿ’œ๐Ÿฆ‹โœจ

๐Ÿ“ฆ where this page comes from