RFC 5734
Extensible Provisioning Protocol (EPP) Transport over TCP
๐ฎ 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 Notice ๐
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.commatches the server namesa.example.comandb.example.com, but does not matchexample.comora.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 ๐ฆ
- Changed "This document obsoletes RFC 3734" to "This document obsoletes RFC 4934".
- Replaced references to RFC 3280 with references to 5280.
- Replaced references to RFC 3734 with references to 4934.
- Updated references to RFC 4346 and TLS 1.1 with references to 5246 and TLS 1.2.
- Replaced references to RFC 4930 with references to 5730.
- Added clarifying TLS Usage Profile section and included references.
- 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
- ietf: rfc5734 2009-08
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms