RFC 3734

Extensible Provisioning Protocol (EPP) Transport Over TCP

๐Ÿ“… published March 2004, from ietf

RFC 3734 ๐ŸŽ€ Extensible Provisioning Protocol (EPP) Transport Over TCP

  • Author: S. Hollenbeck, VeriSign, Inc. ๐Ÿ’…
  • Category: Standards Track โœจ
  • Date: March 2004 ๐ŸŒธ
  • Obsoletes / Updates: the header doesn't list any RFCs this one obsoletes or updates ๐Ÿ™ˆ

Status of This Memo

Okay so this document is an Internet standards track protocol ๐Ÿ”ฅ for the whole Internet community, and they literally want your 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) ๐Ÿ“‹. And distribution of this memo is unlimited, so share away ๐Ÿฆ‹.

๐ŸŒˆ Copyright (C) The Internet Society (2004). All Rights Reserved.

Abstract

This doc explains how an Extensible Provisioning Protocol (EPP) session gets mapped onto one single Transmission Control Protocol (TCP) connection ๐Ÿงš. The mapping requires the Transport Layer Security (TLS) protocol to protect the info exchanged between an EPP client and an EPP server ๐Ÿ”. It's giving security-first energy, bestie ๐Ÿ’œ.

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 . . . . . . . . . . . . . . . . . . . . . . .  5
5.  Transport Considerations . . . . . . . . . . . . . . . . . . .  5
6.  Internationalization Considerations. . . . . . . . . . . . . .  6
7.  IANA Considerations. . . . . . . . . . . . . . . . . . . . . .  6
8.  Security Considerations. . . . . . . . . . . . . . . . . . . .  6
9.  Acknowledgements . . . . . . . . . . . . . . . . . . . . . . .  7
10. References . . . . . . . . . . . . . . . . . . . . . . . . . .  7
    10.1.  Normative References. . . . . . . . . . . . . . . . . .  7
    10.2.  Informative References. . . . . . . . . . . . . . . . .  8
11. Author's Address . . . . . . . . . . . . . . . . . . . . . . .  8
12. Full Copyright Statement . . . . . . . . . . . . . . . . . . .  9

1. Introduction โœจ

This doc is the tea on how EPP gets mapped onto one single client-server TCP connection ๐Ÿ“. Security services beyond what EPP already defines come from the Transport Layer Security (TLS) Protocol [RFC2246] ๐Ÿ”’. EPP itself is described in [RFC3730] ๐Ÿ“–, and TCP is described in [RFC793] ๐Ÿง .

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] ๐Ÿ’–.

2. Session Management ๐ŸŽ€

Mapping EPP session management onto the TCP service is straight forward ๐Ÿ’โ€โ™€๏ธ. An EPP session first needs a TCP connection between two peers: one that starts the connection request, and one that answers it. The peer that starts it is called the "client", and the peer that answers 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 the server is listening on for EPP connection attempts ๐Ÿฆ‹. The server MUST respond with a passive OPEN call, and the client MUST acknowledge it to establish the connection ๐Ÿค. Once the TCP session is up, the EPP server MUST return an EPP <greeting> to the client ๐Ÿ‘‹.

An EPP session usually ends 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 through an active CLOSE call ๐Ÿ’€. The client MUST respond with a passive CLOSE call ๐Ÿซถ.

A client MAY end an EPP session by issuing an active CLOSE call ๐ŸŒธ. A server SHOULD respond with a passive CLOSE call ๐Ÿ’….

A server MAY limit how long an established TCP connection lives ๐Ÿงš. EPP sessions that sit inactive for longer than a server-defined period MAY be ended by the server issuing an active CLOSE call ๐Ÿ˜ญ. A server MAY also close TCP connections that have been open and active for longer than a server-defined period ๐Ÿ“.

Peers SHOULD respond to an active CLOSE call with a passive CLOSE call ๐ŸŒˆ. The closing peer MAY issue an ABORT call if the responding peer doesn't respond to the active CLOSE call ๐Ÿ™ˆ.

3. Message Exchange ๐Ÿ“ฌ

Except for the EPP server greeting, EPP messages are started 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 ๐Ÿ”. If the TCP connection closes after the server receives and successfully processes a command but before the response gets back to the client, the server MAY attempt to undo the effects of the command so the client and server stay in a consistent state ๐Ÿซ . EPP commands are idempotent ๐Ÿ’œ, so processing a command more than once produces the same net effect on the repository as processing it successfully once. Iconic behavior, honestly ๐Ÿ‘‘.

An EPP client streams EPP commands to an EPP server over an established TCP connection ๐ŸŒŠ. A client MAY, but SHOULD NOT, establish multiple TCP connections to create multiple command exchange channels ๐Ÿ™…โ€โ™€๏ธ. 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 and the server returns one response ๐ŸŽฏ. A client might get a slight performance boost by pipelining (sending more than one command before the response to the first one arrives) commands over TCP transport ๐Ÿš€. But this doesn't change the basic single command, single response operating mode of the core protocol ๐Ÿ’…. The amount of data that can be outstanding is limited to the current TCP window size ๐ŸชŸ.

Each EPP data unit MUST contain a single EPP message ๐Ÿ“ฆ. Commands MUST be processed independently, and in the same order they were sent from the client โญ.

A server SHOULD put a limit on how long a client can take 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 isn't received within that time limit ๐Ÿ’€.

A general state machine for an EPP server is described in section 2 of [RFC3730] ๐Ÿงฉ. General client-server message exchange using TCP transport is illustrated in Figure 1 ๐Ÿ–ผ๏ธ.

                   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 data field of the TCP header MUST contain an EPP data unit ๐ŸŽ. An EPP data unit has two fields: a 32-bit header that describes the total length of the data unit, and the EPP XML instance ๐Ÿงพ.

Here's the EPP Data Unit Format (one tick mark represents 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): the total length of the EPP data unit, measured in octets in network (big endian) byte order ๐Ÿ”ข. The octets in this field MUST be included in the total length calculation ๐Ÿงฎ.

EPP XML Instance (variable length): the EPP XML instance carried in the data unit ๐Ÿ’–.

5. Transport Considerations ๐Ÿšš

Section 2.1 of the EPP core protocol specification [RFC3730] describes the considerations that protocol transport mappings need to address ๐Ÿ“‹. This mapping handles each of them with a mix of features described in this document and features TCP already provides, like so ๐ŸŽ€:

  • TCP includes features for reliability, flow control, ordered delivery, and congestion control ๐ŸŒŠ. Section 1.5 of RFC 793 [RFC793] describes these features in detail, and congestion control principles are covered further in RFC 2581 [RFC2581] and RFC 2914 [RFC2914] ๐Ÿง . TCP is a connection-oriented protocol, and Section 2 of this mapping describes how EPP sessions map to TCP connections ๐Ÿ”—.
  • Sections 2 and 3 of this mapping describe how the stateful nature of EPP is kept intact through managed sessions and controlled message exchanges ๐Ÿงท.
  • Section 3 of this mapping notes that command pipelining is possible with TCP, though batch-oriented processing (combining multiple EPP commands in a single data unit) is not permitted ๐Ÿšซ.
  • Section 4 of this mapping describes features that frame data units by explicitly specifying the number of octets used to represent a data unit ๐Ÿ“.

6. Internationalization Considerations ๐ŸŒ

This mapping doesn't introduce or present any internationalization or localization issues ๐Ÿ’œ.

7. IANA Considerations โœจ

okay so IANA handed out system port 700 for mapping EPP onto TCP ๐ŸŽ€ and they also reclaimed user port 3121, which had been used for development and testing purposes ๐Ÿงš bestie, that port has officially retired from the test-drive era ๐Ÿ’…

8. Security Considerations ๐Ÿ”’

okay this section is SERIOUS and I need you to hear me ๐Ÿ˜ญ EPP as-is only gives you simple client authentication, using identifiers and plain text passwords ๐Ÿ’€ a passive attack is enough to recover client identifiers and passwords, which makes command forgery trivial. Protection against most other common attacks MUST be provided by other layered protocols ๐Ÿ›ก๏ธ

EPP does protect against replay attacks through command idempotency โœจ a replayed or repeated command will not change the state of any object in any way, though denial of service through consumption of connection resources is still a possibility ๐Ÿ™ˆ

When layered over TCP, the Transport Layer Security (TLS) Protocol described in [RFC2246] MUST be used to prevent eavesdropping, tampering, and command forgery attacks ๐Ÿ” TLS implementations often contain a US-exportable cryptographic mode that SHOULD NOT be used to protect EPP ๐Ÿ™…โ€โ™€๏ธ clients and servers who want high security SHOULD instead use TLS with cryptographic algorithms that are less susceptible to compromise ๐Ÿ’œ

Mutual client and server authentication using the TLS Handshake Protocol is REQUIRED ๐Ÿซถ signatures on the complete certificate chain 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, such as validity periods and machine names, MUST also be validated. EPP service MUST NOT be granted until a TLS handshake and certificate validation have completed successfully, so both machines are authenticated and cryptographic protections are in place ๐Ÿ‘‘

Authentication through the TLS Handshake Protocol confirms the identity of the client and server machines ๐Ÿฆ‹ EPP then uses an additional client identifier and password to identify and authenticate the client's user identity to the server, supplementing the machine authentication from TLS. The identity in the client certificate and the identity in the EPP client identifier can differ, because a server can assign multiple user identities for use from any particular client machine ๐ŸŒˆ

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 easily implemented solutions such as deploying firewall technology and border router filters to restrict inbound server access to known, trusted clients ๐Ÿงฑ

9. Acknowledgements ๐ŸŒธ

this doc was originally an individual Internet-Draft ๐Ÿ“ the provreg working group later adopted it as a working group document and gave tons of invaluable comments and suggested improvements ๐Ÿฅน the author wants to thank WG chairs Edward Lewis and Jaap Akkerhuis for their process and editorial contributions ๐Ÿ‘

specific suggestions that made it into the document came from Chris Bason, Randy Bush, Patrik Faltstrom, Ned Freed, James Gould, Dan Manley, and John Immordino ๐Ÿ’–

10. References ๐Ÿ“š

10.1. Normative References

[RFC793]   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.

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

[RFC3730]  Hollenbeck, S., "Extensible Provisioning Protocol (EPP)",
           RFC 3730, March 2004.

10.2. Informative References

None

11. Author's Address ๐Ÿ–Š๏ธ

Scott Hollenbeck VeriSign Global Registry Services 21345 Ridgetop Circle Dulles, VA 20166-6503 USA

EMail: shollenbeck@verisign.com

Copyright (C) The Internet Society (2004). This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights.

This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Intellectual Property ๐Ÿง 

The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document, or the extent to which any license under such rights might or might not be available. It also does not represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79.

Copies of IPR disclosures made to the IETF Secretariat, any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr.

The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org.

Acknowledgement ๐Ÿ’•

Funding for the RFC Editor function is currently provided by the Internet Society.

๐Ÿ“ฆ where this page comes from