The Extensible Provisioning Protocol

Gavin Brown, CentralNic Ltd

About CentralNic

History

What is EPP?

What is EPP?

* secured by SSL/TLS

What is EPP?

           |
           V
   +-----------------+                  +-----------------+
   |   Waiting for   |     Connected    |     Prepare     |
   |      Client     |----------------->|     Greeting    |
   +-----------------+    or <hello>    +-----------------+
      ^                                           |
      | Close Connection                     Send |
      |     or Idle                      Greeting |
   +-----------------+                            V
   |       End       |     Timeout      +-----------------+
   |     Session     |<-----------------|   Waiting for   |
   +-----------------+                  |      Client     |
      ^    ^    ^        Send +-------->|  Authentication |
      |    |    |    Response |         +-----------------+
      |    |    |     +--------------+            |
      |    |    |     | Prepare Fail |            | <login>
      |    |    +-----|   Response   |            | Received
      |    |    Send  +--------------+            V
      |    |    2501          ^         +-----------------+
      |    |   Response       |         |   Processing    |
      |    |                  +---------|     <login>     |
      |    |                  Auth Fail +-----------------+
      |    |                                       |
      |    |                                       | Auth OK
      |    |                                       V
      |    |              Timeout       +-----------------+
      |    +----------------------------|   Waiting for   |
      |                                 |     Command     |
      | Send x5xx                       +-----------------+
      | Response  +-----------------+  Send    ^  |
      +-----------|     Prepare     | Response |  | Command
                  |     Response    |----------+  | Received
                  +-----------------+             V
                             ^          +-----------------+
                     Command |          |   Processing    |
                   Processed +----------|     Command     |
                                        +-----------------+

What is EPP?

Why should I care?

The guts of EPP

EPP Command Frame

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
  <command>
    <cmdName>
      <objectType:cmdName
        xmlns:contact="objectTypeNameSpace"
        xsi:schemaLocation="objectTypeSchema">
        <objectType:parameter name="foo">bar</objectType:parameter>
      </objectType:check>
    </cmdName>
    <clTRID>ABC-12345</clTRID>
  </command>
</epp>

EPP Response Frame

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
  <response>
     <result code="200">Command completed successfully.</result>
      <resData>
        <objectType:cmdNameData>
          <objectType:parameter name="foo">bar</objectType:parameter>
        </objectType:cmdNameData>
      </resData>
    <trID>
      <clTRID>ABC-12345</clTRID>
      <svTRID>XYZ-54321</svTRID>
    </trID>
  </response>
</epp>

Domain <info> Request Frame

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
  <command>
    <info>
      <domain:info xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
        xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
        <domain:name>example.uk.com</domain:name>
      </domain:info>
    </info>
    <clTRID>ABC-12345</clTRID>
  </command>
</epp>

Domain <info> Response Frame

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
  <response>
    <result code="1000">
      <msg>Command completed successfully.</msg>
    </result>
    <resData>
      <domain:infData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
        xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
        <domain:name>example.uk.com</domain:name>
        <domain:roid>CNIC-DO302520</domain:roid>
        <domain:status r="ok"/>
        <domain:registrant>C11480</domain:registrant>
        <domain:contact type="admin">C11480</domain:contact>
        <domain:contact type="tech">H12345</domain:contact>
        <domain:contact type="billing">C27228</domain:contact>
        <domain:clID>C11480</domain:clID>
        <domain:crDate>1995-01-01T00:00:00.0Z</domain:crDate>
        <domain:exDate>2037-01-01T23:59:59.0Z</domain:exDate>
        <domain:upDate>2006-09-06T15:43:19.0Z</domain:upDate>
        <domain:ns>
          <domain:hostObj>ns0.centralnic.net</domain:hostObj>
          <domain:hostObj>ns1.centralnic.net</domain:hostObj>
        </domain:ns>
        <domain:authInfo>
          <domain:pw>a893cd40c2bfa7d0</domain:pw>
        </domain:authInfo>
      </domain:infData>
    </resData>
    <trID>
      <clTRID>ABC-12345</clTRID>
      <svTRID>XYZ-54321</svTRID>
    </trID>
  </response>
</epp>

Other commands

Idempotency

Object Types

Domains

Hosts

Contacts

Status Codes

authInfo

Extensions

EPP Clients

Not many off-the-shelf client implementations

EPP Client Libraries

Plenty of libraries:

Preppi

Preppi

Preppi

Client scalability

Net::EPP::Proxy

EPP Servers

mod_epp

mod_epp Configuration

Listen 700
LoadModule epp_module modules/mod_epp.so

<VirtualHost *:700>
  ServerName epp.centralnic.com

  EPPEngine On
  EPPCommandRoot /epp/command # <create> maps to /epp/command/create
  EPPSessionRoot /epp/session # <login> maps to /epp/session/login
  EPPErrorRoot   /epp/error
  EPPAuthURI     /epp/auth

  Alias /epp /var/lib/epp

  <Location "/epp/auth">
    AuthType      Digest
    AuthName     "EPP"
    AuthUserFile /var/lib/epp/etc/epp.passwd
    require      valid-user
  </Location>
</VirtualHost>

mod_epp Command Processors

Scaling mod_epp implementations

Scaling mod_epp implementations

Nominet's solution

Finishing Up