文章目录

  • 1. 引言
  • 2. 协议描述
    • 2.1 传输映射 注意事项
    • 2.2 协议识别
    • 2.3 Hello 格式
    • 2.4 Greeting 格式
    • 2.5 Command 格式
    • 2.6 Response 格式
    • 2.7 可扩展的框架
      • 2.7.1 协议 扩展
      • 2.7.2 对象 扩展
      • 2.7.3 命令-响应 扩展
    • 2.8 对象识别
    • 2.9 协议命令
      • 2.9.1 会话管理命令
        • 2.9.1.1 < login >
        • 2.9.1.2 < logout >
      • 2.9.2 查询命令-Query
        • 2.9.2.1 < check >
        • 2.9.2.2 < info >
        • 2.9.2.3 < poll >
        • 2.9.2.4 < transfer >
      • 2.9.3 对象转换命令-Transform
        • 2.9.3.1 < create >
        • 2.9.3.2 < delete >
        • 2.9.3.3 < renew >
        • 2.9.3.4 < transfer >
        • 2.9.3.5 < update >
  • 3. 响应码
  • 4. 格式语法
    • 4.1 基本 Schema
    • 4.2 共享架构 Schema
  • 7. 安全注意事项
  • 参考文献

本文档描述用于提供(provisioning)和管理存储在 共享中心存储库(shared central repository)中的对象的应用层客户端-服务器协议。在XML中指定的协议定义了通用对象管理操作和一个可扩展框架,该框架将协议操作映射到对象。该文档包括协议规范、对象映射模板和XML媒体类型注册。本文件废止RFC 4930。

1. 引言

本文档描述了可扩展配置协议(Extensible Provisioning Protocol, EPP) 1.0版的规范,该版本是一个XML文本协议,允许多个服务提供者使用共享的中央对象存储库执行对象配置操作。EPP是使用[W3C.REC-xml-20040204]中描述的可扩展标记语言(XML) 1.0和在[W3C.REC-xmlschema-1-20041028]、[W3C.REC-xmlschema-2-20041028]中描述的XML Schema notion。EPP满足并超过了[RFC3375]中描述的一般注册局注册协议的要求。本文件废止RFC4930 [RFC4930]。

EPP内容由MIME媒体类型application/ EPP +xml标识。此媒体类型的注册信息包含在本文档的附录中。

EPP适用于传输和安全需求差异很大的各种操作环境。单一的传输或安全规范不太可能满足所有预期运营商的需求,因此EPP被设计用于分层协议环境。绑定到特定传输和安全协议不在此规范的范围内。

该协议的初衷是提供一个标准的互联网域名注册协议,供域名注册局和域名注册商之间使用。该协议提供了注册局应用程序和注册商应用程序之间的交互方式。除了域名注册之外,该协议还可以在域名之外的其他方面应用

XML是区分大小写的。除非另有说明,否则本文档中提供的XML规范和示例必须用所提供的字符来解释,以开发符合规范的实现。

被授权具有管理现有对象的协议客户端在整个文档中被描述为“sponsoring”客户端

2. 协议描述

EPP是一种有状态的XML协议,可以跨多个传输协议分层。在底层安全协议的保护下,客户端交换标识、身份验证和选项信息,然后进行一系列客户端发起的命令-响应交换。所有EPP命令都是原子性的(不存在部分成功或部分失败),其设计目的是使它们具有幂等性(多次执行命令对系统状态的净影响与成功执行命令一次相同)。

EPP提供了四个基本的服务单元:服务发现、命令、响应和一个扩展框架,该框架支持托管对象的定义以及协议请求和对这些对象的响应之间的关系。

EPP服务器必须通过向客户端返回问询来响应客户端发起的通信(可以是低层连接请求,也可以是EPP服务发现消息)。服务器必须立即响应每个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 +-----------------+|    |       Timeout                         ||    +-------------------------------+       | Auth OK|                                    |       V|   +-----------------+  <hello>  +-----------------+|   |     Prepare     |<----------|   Waiting for   ||   |     Greeting    |---------->|   Command or    ||   +-----------------+   Send    |     <hello>     || Send x5xx             Greeting  +-----------------+| Response  +-----------------+  Send    ^  |+-----------|     Prepare     | Response |  | Command|     Response    |----------+  | Received+-----------------+             V^          +-----------------+Command |          |   Processing    |Processed +----------|     Command     |+-----------------+图1:EPP服务器状态机

EPP命令分为三类:

  • 会话管理命令(session management commands):使用EPP服务器建立和结束持久会话。
  • 查询命令(query commands):执行只读对象信息检索操作。
  • 对象事物命令(object transform commands):执行读写对象管理操作。

命令由服务器按照从客户端接收命令的顺序处理。虽然服务器生成一个确认接收和处理命令的即时响应,但是该协议包含允许在实际完成请求的操作之前离线检查事物命令的功能。在这种情况下,服务器的响应必须清楚地注意到已经接收和处理了命令,但是请求的操作正在等待执行。对应对象的状态必须清楚地反映挂起操作的处理。当离线处理完成时,服务器还必须通知客户端。对象映射应该描述描述离线处理完成的通知的标准格式。

EPP使用XML namespace来提供可扩展的对象管理框架和识别XML实例和验证所需的 schema 文件。这些 namespace和schema定义用于标识基本协议模式和托管对象的模式。示例中使用的XML名称空间前缀(例如“xmlns:foo”中的字符串“foo”)仅用于说明目的。符合规范的实现必须不要求必须使用这些或任何其他特定名称空间前缀。

所有XML必须以<?xml?>声明开始,易识别 XML 的版本,并选择性地说明使用的字符编码以及是否需要外部 schema 文件。一致的XML解析器可以识别UTF-8(在RFC3629 [RFC3629]中定义)和UTF-16(在RFC2781 [RFC2781]中定义);根据RFC2277 [RFC2277], UTF-8是EPP使用的推荐字符编码。

XML允许UTF-8和UTF-16之外的字符编码。UTF-8是XML在没有“编码”属性或字节顺序标记(byte order mark, BOM)的情况下假定的默认编码;因此,如果使用UTF-8编码,XML声明中的“encoding”属性是可选的。如果存在,EPP客户端和服务器必须接受UTF-8 BOM,但不建议发出UTF-8 BOM。

XML 声明的示例:

   <?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml version="1.0" standalone="no"?><?xml version="1.0" encoding="UTF-8"?><?xml version="1.0"?>

2.1 传输映射 注意事项

如前所述,EPP可以基于多种传输协议使用。然而,为EPP定义的任何传输映射(Transport Mapping)都必须遵从一组常见的注意事项:

  • 传输映射必须保持命令顺序。
  • 传输映射必须处理会话和客户端-服务器连接概念之间的关系。
  • 传输映射必须保持协议的有状态性。
  • 传输映射必须帧数据单元。
  • 传输映射必须在传输上,如TCP [RFC0793]或流控制传输协议(SCTP) [RFC4960],它提供了RFC2914 [RFC2914]之后的拥塞避免;或者,如果它映射到SMTP [RFC5321]或Blocks Extensible Exchange protocol (BEEP) [RFC3080]等协议,那么性能问题需要考虑过载、服务器可用性等问题。
  • 传输映射必须确保可靠性。
  • 传输映射必须显式地允许或禁止管道。

pipelining,流水线,也称为命令流,是指客户端向服务器发送多个命令,而不需要等待每个相应的响应。发送命令之后,客户端等待响应按照与完成的命令对应的顺序到达。有时可以使用管道来实现性能提升,特别是使用高延迟传输,但是在定义支持管道的传输映射时还需要考虑其他一些问题:

  • 命令必须相互独立处理。
  • 根据传输的不同,管道可能以发送定义良好的“批处理”中的完整会话的形式存在。
  • 传输映射必须描述处理命令中的错误如何影响会话的继续操作。

考虑到传输协议用于交换数据,传输映射必须解释如何满足所有这些需求。

2.2 协议识别

所有EPP XML实例都必须以< EPP >元素开始。此元素标识EPP协议元素的开始和协议中使用的名称空间。<epp>开始元素和相关的</epp>结束元素必须应用于客户端和服务器发送的所有结构。

Example "start" and "end" EPP elements:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"></epp>

2.3 Hello 格式

EPP可以基于面向连接无连接的传输协议进行传输。EPP客户端可以通过向服务器发送<hello>,在成功的<login>命令和<logout>命令之间的任何时间,请求EPP服务器发送<greeting>。在无连接的环境中,如果服务器无法返回<greeting>来响应客户端发起的连接,那么使用这个元素是必不可少的。EPP <hello>必须是一个没有子元素的空元素。

  Example <hello>:C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">C:  <hello/>C:</epp>

2.4 Greeting 格式

EPP服务器通过向客户端返回一个<greeting>元素来响应一个成功的连接和<hello>元素。一个EPP greeting 包括以下元素:

元素 含义
< svID> 服务器名字
< svDate > 服务器当前的UTC时间和日期
< svcMenu > 服务器支持的服务,包括:
< version > :服务器支持的协议版本
< lang>:服务器可识别的文本响应语言
< objURI>:名称空间uri表示服务器能够管理的对象。服务器可能在每个客户机的基础上限制对象管理特权。
< svcExtension> :包含≥1个表示服务器支持的对象扩展的名称空间uri的< extURI>元素
< dcp>:data collection policy,数据收集策略。包含用于描述用于数据收集和管理的服务器隐私策略的子元素。策略含义通常扩展到客户机-服务器关系之外。客户端和服务器都可以与其他实体建立关系,这些实体需要知道服务器操作员的数据收集策略,以便做出明智的供应决策。策略信息必须向供应实体公开,尽管在直接协议交互之外公开策略数据的方法超出了本规范的范围。包括:
- < access>:描述 服务器代表原始数据源向客户机提供的访问
+ < all/>
+ < none/>
+ < null/>
+ < personal/>
+ < personalAndOther/>
+ < other/>
- < statement>:描述数据收集目的、数据接收者和数据保留。每个必须包含一个元素,一个元素和一个< retention>元素。< purpose>元素必须必须包含一个或多个如下的子元素:
+ < admin/>
+ < contact/>
+ < prov/>
+ < other/>
- < recipient>
+ < other/>
+ < ours>
+ < public/>
+ < same/>
+ < unrelated/>
- < retention>
+ < business/>
+ < indefinite/>
+ < legal/>
+ < none/>
+ < stated/>
- < expiry>:描述策略的策略的使用期
+ < absolute/>
+ < relative/>

数据收集策略元素基于万维网联盟的隐私首选项平台[W3C]中描述的工作。rec - p3p - 20020416]规范。

例子:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <greeting>S:    <svID>Example EPP server epp.example.com</svID>S:    <svDate>2000-06-08T22:00:00.0Z</svDate>S:    <svcMenu>S:      <version>1.0</version>S:      <lang>en</lang>S:      <lang>fr</lang>S:      <objURI>urn:ietf:params:xml:ns:obj1</objURI>S:      <objURI>urn:ietf:params:xml:ns:obj2</objURI>S:      <objURI>urn:ietf:params:xml:ns:obj3</objURI>S:      <svcExtension>S:        <extURI>http://custom/obj1ext-1.0</extURI>S:      </svcExtension>S:    </svcMenu>S:    <dcp>S:      <access><all/></access>S:      <statement>S:        <purpose><admin/><prov/></purpose>S:        <recipient><ours/><public/></recipient>S:        <retention><stated/></retention>S:      </statement>S:    </dcp>S:  </greeting>S:</epp>

2.5 Command 格式

EPP客户端通过向服务器发送命令并从服务器接收响应来与EPP服务器进行交互。

除了标准的EPP元素,一个EPP命令还包含以下元素:

  • 一个命令元素,其tag对应于本文档中描述的一个有效EPP命令。command元素可以包含协议指定的或对象指定的子元素。
  • 可选的< extension>元素,可用于服务器定义的命令扩展。
  • 一个可选的< clTRID>(client transaction identifier,客户端事物标识符)元素,可用于唯一地向客户端标识命令。客户端负责维护自己的事务标识符空间,以确保唯一性。

带有对象指定子元素的示例命令:

   C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">C:  <command>C:    <info>C:      <obj:info xmlns:obj="urn:ietf:params:xml:ns:obj">C:        <obj:name>example</obj:name>C:      </obj:info>C:    </info>C:    <clTRID>ABC-12345</clTRID>C:  </command>C:</epp>

2.6 Response 格式

EPP服务器通过向客户端返回响应来响应客户端命令。EPP命令是原子性的,因此命令要么完全成功,要么完全失败。成功和失败的结果不能混为一谈。

除了标准的EPP元素,一个EPP response包含以下元素:

  • < result> :描述命令的成败。如果命令执行成功,则< result>返回且必须返回一个,否则,可能会返回来多个< result>元素,用于描述失败的情况。每个< result> 元素包含以下属性和元素:

    o  A "code" attribute whose value is a four-digit, decimal numberthat describes the success or failure of the command.o  A <msg> element containing a human-readable description of theresponse code.  The language of the response is identified viaan OPTIONAL "lang" attribute.  If not specified, the defaultattribute value MUST be "en" (English).o  Zero or more OPTIONAL <value> elements that identify a client-provided element (including XML tag and value) or otherinformation that caused a server error condition.o  Zero or more OPTIONAL <extValue> elements that can be used toprovide additional error diagnostic information, including:*  A <value> element that identifies a client-provided element(including XML tag and value) that caused a server errorcondition.*  A <reason> element containing a human-readable message thatdescribes the reason for the error.  The language of theresponse is identified via an OPTIONAL "lang" attribute.  Ifnot specified, the default attribute value MUST be "en"(English).
    
  • < msgQ> :描述客户端检索的消息队列。如果没有客户端检索的消息队列,< msgQ>元素不能出现。如果消息排队等待检索,则< msgQ>元素一定会在响应EPP < poll>命令时显示,可能会在其他非< poll>命令中响应。< msgQ>元素包含以下属性:

      o  A "count" attribute that describes the number of messages thatexist in the queue.o  An "id" attribute used to uniquely identify the message at thehead of the <msgQ>元素在响应且只有在响应<poll>命令时,必须包含下列可选子元素:      o  A <qDate> element that contains the date and time that themessage was enqueued.o  A <msg> element containing a human-readable message.  Thelanguage of the response is identified via an OPTIONAL "lang"attribute.  If not specified, the default attribute value MUSTbe "en" (English).  This element MAY contain XML content forformatting purposes, but the XML content is not specified bythe protocol and will thus not be processed for validity.
    
  • < resData> (response data,响应数据) element that contains child
    elements specific to the command and associated object.

  • < extension>:可以用于服务器定义的响应扩展。

  • < trID> (transaction identifier, ID)。服务器为返回响应的命令分配的事物ID 。这个事物ID使用< clTRID>和< svTRID>(server transaction identifier,服务器事务标识符)组成,如果客户端提供该命令,则使用与该命令关联的< clTRID>,而< svTRID>(服务器事务标识符)是由服务器分配的,并且是唯一的。

事务标识符提供命令-响应同步完整性。应该对它们进行记录、保留和保护,以确保客户端和服务器都具有一致的时间和状态管理记录。

没有< value> 或 < resData>的响应示例:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1000">S:      <msg lang="en">Command completed successfully</msg>S:    </result>S:    <trID>S:      <clTRID>ABC-12345</clTRID>S:      <svTRID>54321-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

带有< resData>的响应的示例:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1000">S:      <msg>Command completed successfully</msg>S:    </result>S:    <resData>S:      <obj:creData xmlns:obj="urn:ietf:params:xml:ns:obj">S:        <obj:name>example</obj:name>S:      </obj:creData>S:    </resData>S:    <trID>S:      <clTRID>ABC-12345</clTRID>S:      <svTRID>54321-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

带有错误值元素的响应的示例:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="2004">S:      <msg>Parameter value range error</msg>S:      <value xmlns:obj="urn:ietf:params:xml:ns:obj">S:        <obj:elem1>2525</obj:elem1>S:      </value>S:    </result>S:    <result code="2005">S:      <msg>Parameter value syntax error</msg>S:      <value xmlns:obj="urn:ietf:params:xml:ns:obj">S:        <obj:elem2>ex(ample</obj:elem2>S:      </value>S:      <extValue>S:        <value xmlns:obj="urn:ietf:params:xml:ns:obj">S:          <obj:elem3>abc.ex(ample</obj:elem3>S:        </value>S:        <reason>Invalid character found.</reason>S:      </extValue>   S:    </result>S:    <trID>S:      <clTRID>ABC-12345</clTRID>S:      <svTRID>54321-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

带有等待服务器消息通知的响应的示例:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1000">S:      <msg>Command completed successfully</msg>S:    </result>S:    <msgQ count="5" id="12345"/>S:    <trID>S:      <clTRID>ABC-12345</clTRID>S:      <svTRID>54321-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

如果没有返回响应或返回的响应格式不正确,则不能假定命令成功或失败。协议的等幂性确保了在响应传递失败的情况下重试命令的安全性。

2.7 可扩展的框架

EPP提供了一个扩展框架,允许在协议、对象和命令-响应级别添加特性。

2.7.1 协议 扩展

EPP扩展框架允许定义使用XML名称空间符号标识的新协议元素,并引用定义名称空间的XML模式。标识协议实例开头的< epp>元素包含多个子元素选择,其中一个是< extension>元素,其子元素定义扩展。

   C:<epp>C:  <extension>C:    <!-- One or more extension elements. -->C:    <ext:foo xmlns:ext="urn:ietf:params:xml:ns:ext">C:      <!-- One or more extension child elements. -->C:    </ext:foo>C:  </extension>C:</epp>

2.7.2 对象 扩展

EPP提供了一个可扩展的对象管理框架,该框架定义了应用于托管对象的协议操作的语法和语义。这个框架将每个协议操作的定义推入特定对象的上下文中,提供了为新对象添加映射的能力,而无需修改基本协议。协议元素包含特定于对象的数据,使用XML名称空间符号和定义名称空间的XML模式的引用来标识。EPP模式支持在每个命令和每个响应的基础上使用动态对象模式。

我的理解:对象扩展指的是针对某些对象的命令的扩展。命令是已有命令,对象是自建的对象

   C:<EPPCommandName>C:  <object:command xmlns:object="urn:ietf:params:xml:ns:object">C:    <!-- One or more object-specific command elements. -->C:  </object:command>C:</EPPCommandName>S:<resData>S:  <object:resData xmlns:object="urn:ietf:params:xml:ns:object">S:    <!-- One or more object-specific response elements. -->S:  </object:resData>S:</resData>

2.7.3 命令-响应 扩展

EPP为协议命令和响应扩展提供了一种工具。协议命令和响应可以由一个< extension>元素扩展,该元素包含一些额外的元素,这些元素的语法和语义不是由EPP或EPP对象映射显式定义的。这个元素是可选的。扩展通常由客户端和服务器之间的协议定义,可以用于扩展EPP以满足独特的操作需求。

   C:<command>C:  <!-- EPPCommandName can be "create", "update", etc. -->C:  <EPPCommandName>C:    <object:command xmlns:object="urn:ietf:params:xml:ns:object">C:      <!-- One or more object-specific command elements. -->C:    </object:command>C:  </EPPCommandName>C:  <extension>C:    <!-- One or more server-defined elements. -->C:  </extension>C:</command>S:<response>S:  <result code="1000">S:    <msg lang="en">Command completed successfully</msg>S:  </result>S:  <extension>S:    <!-- One or more server-defined elements. -->S:  </extension>S:  <trID>S:    <clTRID>ABC-12345</clTRID>S:    <svTRID>54321-XYZ</svTRID>S:  </trID>S:</response>

2.8 对象识别

一些对象,如名称服务器和联系人,可以在多个存储库中具有实用程序。然而,在多个存储库中维护对象信息的不一致副本可能导致不一致,从而对Internet产生不利的后果。例如,在一个存储库中更改名称服务器的名称,而不在将该名称服务器用于域名委托的第二个存储库中更改名称服务器的名称,会产生意想不到的DNS查询结果。

全局惟一标识符可以帮助促进存储库之间的对象信息共享。创建对象时,必须为每个对象分配全局惟一标识符;标识符必须作为检索对象的详细属性的任何请求的一部分返回给客户端。特定的标识符值是存储库策略的问题,但是应该按照以下算法构造它们:

a. 将供应存储库世界划分为许多对象存储库类。

b. 类中的每个存储库都被分配一个由IANA维护的标识符。

c. 每个存储库负责为存储库中的每个对象分配唯一的本地标识符。

d. 全局惟一标识符是本地标识符的串联,后跟连字符(“-”,ASCII值0x002D),后跟存储库标识符。

2.9 协议命令

EPP提供管理会话、检索对象信息和对对象执行事物操作的命令。所有EPP命令都是原子性的,它们的设计可以使它们具有等幂性,既可以完全成功,也可以完全失败,并且在重复执行时产生可预测的结果。

2.9.1 会话管理命令

EPP提供了两个用于会话管理的命令:< login>来建立与服务器的会话;< logout>来结束与服务器的会话。< login>命令建立一个正在进行的服务器会话,在会话期间保存客户端标识和授权信息。

2.9.1.1 < login >

EPP < login>命令用于与EPP服务器建立会话,以响应服务器发出的问候语。< login>命令必须在任何其他EPP命令之前发送到服务器,以建立正在进行的会话。服务器操作员可能会限制登录失败的次数N, 1 <= N <=无穷大,在此之后,登录失败将导致关闭到服务器的连接(如果存在连接)。

在客户端成功完成< login>命令之前,必须在服务器上创建客户端标识符和初始密码。客户端标识符和初始密码必须使用带外方法传递给客户端,该方法可以保护标识符和密码不被意外泄露。

除了EPP标准命令,< login>命令还包含一下子元素:

  • 一个< clID>元素,包含由服务器分配给客户机的客户机标识符。

  • 一个< pw>元素,包含客户端的纯文本密码。此元素的值区分大小写。

  • 一个可选的< newPW>元素,其中包含一个新的纯文本密码,将分配给客户端与后续的< login>命令一起使用。此元素的值区分大小写。

  • 包含以下子元素的< options>元素:

    • 包含用于命令或正在进行的服务器会话的协议版本的< version>元素。

    • 一个< lang>元素,包含用于命令或正在运行的服务器会话命令的文本响应语言。

    < version>和< lang>元素的值必须与EPP问询中显示的值完全匹配。

  • 一个< svcs>元素,它包含一个或多个< objURI>元素,这些元素包含表示会话期间要管理的对象的名称空间uri。< svcs>元素可以包含一个可选的< svcExtension>元素,该元素包含一个或多个< extURI>元素,用于标识会话期间使用的对象扩展。

在[RFC4616]中提出的简单身份验证和安全层(SASL)机制描述了将用户标识符、授权标识符和密码作为单一纯文本字符串的一部分提供的格式。EPP身份验证机制与此类似,但EPP不需要会话级别的授权标识符,并且用户标识符和密码被分隔为不同的XML元素。必须在其他协议层提供额外的标识和授权方案,以提供更健壮的安全服务。

< login>命令的示例:

   C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">C:  <command>C:    <login>C:      <clID>ClientX</clID>C:      <pw>foo-BAR2</pw>C:      <newPW>bar-FOO2</newPW>C:      <options>C:        <version>1.0</version>C:        <lang>en</lang>C:      </options>C:      <svcs>C:        <objURI>urn:ietf:params:xml:ns:obj1</objURI>C:        <objURI>urn:ietf:params:xml:ns:obj2</objURI>C:        <objURI>urn:ietf:params:xml:ns:obj3</objURI>C:        <svcExtension>C:          <extURI>http://custom/obj1ext-1.0</extURI>C:        </svcExtension>C:      </svcs>C:    </login>C:    <clTRID>ABC-12345</clTRID>C:  </command>C:</epp>

当< login>命令成功处理后,服务器必须使用没有< resData>元素的EPP响应进行响应。如果成功,服务器将通过创建和维护一个新会话来响应,该会话应该由未来的< logout>命令终止。

< login>响应的示例:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1000">S:      <msg>Command completed successfully</msg>S:    </result>S:    <trID>S:      <clTRID>ABC-12345</clTRID>S:      <svTRID>54321-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

EPP < login>命令用于与EPP服务器建立会话。如果在现有会话的范围内接收到< login>命令,则必须拒绝该命令。此命令必须对所有客户端可用。

2.9.1.2 < logout >

EPP < logout>命令用于结束与EPP服务器的会话。< logout>命令必须表示为没有子元素的空元素。

由于客户机不活动或客户机会话寿命过长,服务器可能会终止会话。确定过多的客户机不活动或会话寿命的参数是服务器策略的问题,本协议没有指定这些参数。

传输映射必须显式地描述在处理< logout>命令并结束会话之后发生的任何面向连接的处理。

< logout>命令的示例:

   C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">C:  <command>C:    <logout/>C:    <clTRID>ABC-12345</clTRID>C:  </command>C:</epp>

当< logout>命令被成功处理后,服务器必须使用没有< resData>元素的EPP响应进行响应。如果成功,服务器还必须结束当前会话。

< logout>响应的示例:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1500">S:      <msg>Command completed successfully; ending session</msg>S:    </result>S:    <trID>S:      <clTRID>ABC-12345</clTRID>S:      <svTRID>54321-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

EPP < logout>命令用于结束与EPP服务器的会话。如果< logout>命令之前没有成功的< login>命令,则必须拒绝该命令。此命令必须对所有客户端可用。

2.9.2 查询命令-Query

2.9.2.1 < check >

EPP < check> 命令用于确定是否可以在存储库中提供对象。它提供了一个提示,允许客户端预测使用< create>命令作为对象提供对象的成功或失败——提供需求最终是服务器策略的问题。

标识对象所需的元素是特定于对象的,因此< check>命令的子元素是使用EPP扩展框架指定的。除了标准的EPP命令元素,< check>命令还包含以下子元素:

  • 特定于对象的< obj:check > 元素,用于标识要查询的对象。同一类型的多个对象可以在一个命令中查询。

< check>命令的例子

   C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">C:  <command>C:    <check>C:      <obj:check xmlns:obj="urn:ietf:params:xml:ns:obj">C:        <obj:name>example1</obj:name>C:        <obj:name>example2</obj:name>C:        <obj:name>example3</obj:name>C:      </obj:check>C:    </check>C:    <clTRID>ABC-12346</clTRID>C:  </command>C:</epp>

< check>命令被成功处理后,服务器必须使用< resData>元素响应,该元素必须包含标识对象名称空间的子元素。< resData>元素的子元素是特定于对象的,尽管EPP < resData>元素必须包含一个子元素< obj:chkData >,该元素包含一个或多个< obj:cd >(检查数据)元素。每个< obj:cd >元素包含以下子元素:

  • 标识查询对象的特定于对象的元素。此元素必须包含一个“avail”属性,其值指示在< check>命令完成时对象的可用性(是否可以提供该属性)。值“1”或“true”表示可以供应对象。值“0”或“false”表示不能供应对象。
  • 一个可选的< obj:reason >元素,它可能在无法供应对象时提供。如果存在,此元素包含特定于服务器的文本,以帮助解释为什么不能供应对象。此文本必须用之前与客户协商过的响应语言表示;如果协商值不是默认值“en”(英语),则可以使用一个可选的“lang”属性来标识语言。

< check>回复命令的示例:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1000">S:      <msg>Command completed successfully</msg>S:    </result>S:    <resData>S:      <obj:chkData xmlns:obj="urn:ietf:params:xml:ns:obj">S:        <obj:cd>S:          <obj:name avail="1">example1</obj:name>S:        </obj:cd>S:        <obj:cd>S:          <obj:name avail="0">example2</obj:name>S:          <obj:reason>In use</obj:reason>S:        </obj:cd>S:        <obj:cd>S:          <obj:name avail="1">example3</obj:name>S:        </obj:cd>S:      </obj:chkData>S:    </resData>S:    <trID>S:      <clTRID>ABC-12346</clTRID>S:      <svTRID>54322-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

EPP < check>命令用于确定是否可以在存储库中提供对象。此操作必须对所有授权客户开放。

2.9.2.2 < info >

EPP < info>命令用于检索与现有对象关联的信息。标识对象所需的元素和与对象关联的信息类型都是特定于对象的,因此< info>命令的子元素是使用EPP扩展框架指定。除了标准的EPP命令元素,< info>命令还包含以下子元素:

  • 一个对象特定的< obj:info >元素,它标识要查询的对象。

< info>命令的示例:

   C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">C:  <command>C:    <info>C:      <obj:info xmlns:obj="urn:ietf:params:xml:ns:obj">C:        <!-- Object-specific elements. -->C:      </obj:info>C:    </info>C:    <clTRID>ABC-12346</clTRID>C:  </command>C:</epp>

当成功处理了< info>命令时,服务器必须使用EPP < resData>元素进行响应,该元素必须包含一个子元素,该子元素标识对象名称空间和创建对象时分配给对象的存储库对象标识符(ROID)。< resData>元素的其他子元素是特定于对象的。

< info>回复的示例

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1000">S:      <msg>Command completed successfully</msg>S:    </result>S:    <resData>S:      <obj:infData xmlns:obj="urn:ietf:params:xml:ns:obj">S:        <obj:roid>EXAMPLE1-REP</obj:roid>S:        <!-- Object-specific elements. -->S:      </obj:infData>S:    </resData>S:    <trID>S:      <clTRID>ABC-12346</clTRID>S:      <svTRID>54322-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

2.9.2.3 < poll >



< poll>命令用于发现和检索服务器中特定客户端的队列服务消息。如果消息队列不是空的,则必须成功响应消息队列中的第一个消息。从服务器返回的每个响应都必须包含一个服务器惟一消息标识符,以及一个指示队列中消息数量的计数器。在客户端收到消息后,客户端必须明确响应消息,以确认消息已经收到。在接收到客户端的接收确认后,服务器必须必须在将消息移出队列,并将队列计数器中的数值减1,这样,队列中的下一个消息(如果有的话)就可以用于检索。

服务器有时可以对不直接响应客户端请求的对象执行操作,或者一个客户端所采取的操作可以间接涉及到另一个客户端。这些操作的例子包括过期删除、过期自动更新和转移协调;其他类型的服务信息可以定义为服务器策略。应该受对象的操作影响的被动客户端创建服务消息。还可以为请求对对象执行操作的活动客户机创建服务消息,不过这些消息不能替代对请求的正常协议响应。例如,< transfer> 操作应该被告知客户端,该客户端有权支持和拒绝转移请求。其他服务器-客户端行为通知方式,如线下报告,可能存在,但是超出了本规范的范围。

如果客户端不定期检索和确认消息,则消息队列可能会消耗服务器资源。如果队列维护需求超过服务器资源消耗限制,服务器可以实现其他机制来退出队列并传递消息。在为服务信息选择交付方法时,服务器操作人员应该考虑时间敏感性和资源管理因素,因为一些消息类型可以使用需要较少服务器资源的非协议方法合理地交付。

响应< poll>命令返回的一些信息可以是特定于对象的,因此可以使用EPP扩展框架指定响应的一些子元素。命令必须表示为没有子元素的空元素。需要一个值为“req”的“op”属性从服务器消息队列检索第一个消息。确认收到消息时,需要一个“op”属性(值为“ack”)和一个“msgID”属性(其值对应于从正在确认的消息中的< msg>元素复制的“id”属性的值)。

< poll>命令的示例:

   C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">C:  <command>C:    <poll op="req"/>C:    <clTRID>ABC-12345</clTRID>C:  </command>C:</epp>

< poll>命令返回的结果码表示已经被移除队列的消息。

服务器对特定对象信息的< poll>响应的示例:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1301">S:      <msg>Command completed successfully; ack to dequeue</msg>S:    </result>S:    <msgQ count="5" id="12345">S:      <qDate>2000-06-08T22:00:00.0Z</qDate>S:      <msg>Transfer requested.</msg>S:    </msgQ>S:    <resData>S:      <obj:trnDataS:       xmlns:obj="urn:ietf:params:xml:ns:obj-1.0">S:        <obj:name>example.com</obj:name>S:        <obj:trStatus>pending</obj:trStatus>S:        <obj:reID>ClientX</obj:reID>S:        <obj:reDate>2000-06-08T22:00:00.0Z</obj:reDate>S:        <obj:acID>ClientY</obj:acID>S:        <obj:acDate>2000-06-13T22:00:00.0Z</obj:acDate>S:        <obj:exDate>2002-09-08T22:00:00.0Z</obj:exDate>S:      </obj:trnData>S:    </resData>S:    <trID>S:      <clTRID>ABC-12345</clTRID>S:      <svTRID>54321-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

客户端必须回应每个服务器响应,从而让服务器将消息从消息队列中移除,以让下一个消息可以检索。

< poll>的客户端回应命令示例:

   C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">C:  <command>C:    <poll op="ack" msgID="12345"/>C:    <clTRID>ABC-12346</clTRID>C:  </command>C:</epp>

< poll>服务器对客户端回应的响应包含已经回应的消息的ID以及消息队列中剩余消息个数。

< poll>的服务器对客户端回应的响应的示例:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1000">S:      <msg>Command completed successfully</msg>S:    </result>S:    <msgQ count="4" id="12345"/>S:    <trID>S:      <clTRID>ABC-12346</clTRID>S:      <svTRID>54322-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

服务消息也可以不带对象信息。

< poll>带有混合消息内容,不带特定对象信息的响应的示例:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1301">S:      <msg>Command completed successfully; ack to dequeue</msg>S:    </result>S:    <msgQ count="4" id="12346">S:      <qDate>2000-06-08T22:10:00.0Z</qDate>S:      <msg lang="en">Credit balance low.S:        <limit>100</limit><bal>5</bal>S:      </msg>S:    </msgQ>S:    <trID>S:      <clTRID>ABC-12346</clTRID>S:      <svTRID>54321-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

返回的结果码和消息被用来识别空服务器消息队列

< poll>服务器对空消息队列的响应

      S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1300">S:      <msg>Command completed successfully; no messages</msg>S:    </result>S:    <trID>S:      <clTRID>ABC-12346</clTRID>S:      <svTRID>54321-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

EPP < poll>命令用于从服务器发现和检索客户端服务消息。这一行动应限于授权客户;建议根据每个客户端对服务消息进行排队并限制队列访问。

2.9.2.4 < transfer >

EPP < transfer>命令提供了一个查询操作,让客户端确定待处理和已完成的转换请求(transfer requests,即2.9.3的transfer命令)的实时状态。用于识别一个转换请求的对象的元素是基于特定对象的,因此< transfer>请求命令的子元素使用EPP扩展框架指定。除了标准的EPP命令元素,< transfer>命令还包含一个“op”属性和值“query”,以及以下子元素:

< obj:transfer >:基于特定对象的元素,用于识别被查询转换状态的对象

转移状态通常被涉及到操作的客户端视为敏感信息。对象映射必须提供一些特性来限制向授权客户端转移查询,例如要求将授权信息作为请求的一部分。

< transfer>请求命令的示例:

   C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">C:  <command>C:    <transfer op="query">C:      <obj:transfer xmlns:obj="urn:ietf:params:xml:ns:obj">C:        <!-- Object-specific elements. -->C:      </obj:transfer>C:    </transfer>C:    <clTRID>ABC-12346</clTRID>C:  </command>C:</epp>

成功处理< transfer>查询命令后,服务器必须使用EPP < resData>元素响应,该元素必须包含标识对象名称空间的子元素。< resData >元素的子元素是特定对象,但他们必须包括元素识别对象,转移的状态,客户端的标识符要求转会,请求的日期和时间,客户标识符的请求的授权法案,预期操作发生的日期和时间,以及一个可选的日期和时间,该日期和时间记录对象的有效期(如果适用)中由于转移而发生的更改。

< transfer>请求响应的示例:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1000">S:      <msg>Command completed successfully</msg>S:    </result>S:    <resData>S:      <obj:trnData xmlns:obj="urn:ietf:params:xml:ns:obj">S:        <obj:name>example</obj:name>S:        <obj:trStatus>pending</obj:trStatus>S:        <obj:reID>ClientX</obj:reID>S:        <obj:reDate>2000-06-08T22:00:00.0Z</obj:reDate>S:        <obj:acID>ClientY</obj:acID>S:        <obj:acDate>2000-06-13T22:00:00.0Z</obj:acDate>S:        <obj:exDate>2002-09-08T22:00:00.0Z</obj:exDate>S:      </obj:trnData>S:    </resData>S:    <trID>S:      <clTRID>ABC-12346</clTRID>S:      <svTRID>54322-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

EPP < transfer>命令提供了一个查询操作,允许客户端确定未决和已完成转移请求的实时状态。这一行动应限于授权客户;建议将查询限制为请求和响应客户端。对象转移可能不可用或受特定于对象的策略的限制。

2.9.3 对象转换命令-Transform

2.9.3.1 < create >

EPP < create>命令用于创建对象的实例。可以无时间限制地创建对象,也可以在特定的有效期内创建对象。
对象的EPP映射必须描述对象相对于时间的状态,以便在使用有效期时包含预期的客户机和服务器行为。

标识对象和相关属性所需的元素是特定于对象的,因此< create>命令的子元素是使用EPP扩展框架指定的。除了标准的EPP命令元素之外,< create>命令还包含以下子元素:

  • 一个特定于对象的< obj:create > element,它标识要创建的对象和创建对象所需的元素。

创建命令的例子:

   C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">C:  <command>C:    <create>C:      <obj:create xmlns:obj="urn:ietf:params:xml:ns:obj">C:        <!-- Object-specific elements. -->C:      </obj:create>C:    </create>C:    <clTRID>ABC-12345</clTRID>C:  </command>C:</epp>

当< create>命令被成功处理时,服务器可能会响应一个EPP < resData>元素,该元素必须包含一个标识对象名称空间的子元素。< resData>元素的子元素是特定于对象的。

带有< resData>元素的< create>响应的例子:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1000">S:      <msg>Command completed successfully</msg>S:    </result>S:    <resData>S:      <obj:creData xmlns:obj="urn:ietf:params:xml:ns:obj">S:        <!-- Object-specific elements. -->S:      </obj:creData>S:    </resData>S:    <trID>S:      <clTRID>ABC-12345</clTRID>S:      <svTRID>54321-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

EPP < create>命令用于创建对象的实例。此操作应该仅限于授权客户端,并且可以针对每个客户端进行限制。

2.9.3.2 < delete >

EPP < delete>命令用于删除现有对象的实例。标识对象所需的元素是特定于对象的,因此< delete>命令的子元素是使用EPP扩展框架指定的。除了标准的EPP命令元素之外,< delete>命令还包含以下子元素:

  • 对象特定的< obj:delete >元素,它标识要删除的对象。

< delete>命令的例子:

   C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">C:  <command>C:    <delete>C:      <obj:delete xmlns:obj="urn:ietf:params:xml:ns:obj">C:        <!-- Object-specific elements. -->C:      </obj:delete>C:    </delete>C:    <clTRID>ABC-12346</clTRID>C:  </command>C:</epp>

当< delete>命令被成功处理时,服务器可能会响应一个EPP < resData>元素,该元素必须包含一个标识对象名称空间的子元素。< resData>元素的子元素是特定于对象的。

不带有< resData>元素的< delete>响应的例子:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1000">S:      <msg>Command completed successfully</msg>S:    </result>S:    <trID>S:      <clTRID>ABC-12346</clTRID>S:      <svTRID>54322-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

EPP < delete>命令用于删除现有对象的实例。此操作应仅限于授权客户;建议将此操作限制到发起客户机。

2.9.3.3 < renew >

EPP < renew>命令用于延长现有对象的有效期。标识和扩展对象有效期所需的元素是特定于对象的,因此< renew>命令的子元素是使用EPP扩展框架指定的。除了标准的EPP命令元素之外,< renew>命令还包含以下子元素:

  • 对象特定的< obj:renew >元素,它标识要更新的对象和需要延长对象有效期的元素。

< renew>命令的例子:

   C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">C:  <command>C:    <renew>C:      <obj:renew xmlns:obj="urn:ietf:params:xml:ns:obj">C:        <!-- Object-specific elements. -->C:      </obj:renew>C:    </renew>C:    <clTRID>ABC-12346</clTRID>C:  </command>C:</epp>

当成功地处理了< renew>命令时,服务器可能使用EPP < resData>元素进行响应,该元素必须包含标识对象名称空间的子元素。< resData>元素的子元素是特定于对象的。

带有< resData>元素的< renew>响应的例子:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1000">S:      <msg>Command completed successfully</msg>S:    </result>S:    <resData>S:      <obj:renData xmlns:obj="urn:ietf:params:xml:ns:obj">S:        <!-- Object-specific elements. -->S:      </obj:renData>S:    </resData>S:    <trID>S:      <clTRID>ABC-12346</clTRID>S:      <svTRID>54322-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

EPP < renew>命令用于延长现有对象的有效期。此操作应仅限于授权客户;建议将此操作限制到发起客户机。对象更新可能不可用或受对象特定策略的限制。

2.9.3.4 < transfer >

管理对象的客户端的注册商的变化。客户端可以使用“op”命令属性发起 initiate转移请求、取消 cancel转移请求、批准 approve转移请求和拒绝 reject转移请求。

想让另一个客户端作为对已知对象的注册商的客户端时,使用< transfer>命令,并将“op”属性的值设置为``“request”。一旦请求了转移,同一个客户端可以使用< transfer>命令取消请求,并将“op”属性的值设置为“cancel”`。取消转移的请求必须在当前注册商客户端批准或拒绝转移请求之前,以及在服务器由于响应客户端不活动而自动处理请求之前发送到服务器。

一旦服务器接收到转移请求,服务器必须将请求的转移通知当前注册商客户端,一种方法是通过< poll>命令对服务消息进行排队以便检索,另一种方式是使用带外机制将请求通知客户端。对于任何对象,可以使用< transfer>查询命令找到挂起的< transfer>命令的当前状态。转移服务消息必须包含为< transfer>命令响应指定的对象特定元素。

当前注册商客户端可以显式地批准或拒绝转移请求。客户端可以使用< transfer>命令批准请求,并将“op”属性值设置为“approve”。客户端可以使用< transfer>命令拒绝请求,并将“op”属性值设置为“reject”

服务器可以在固定的时间内自动批准或拒绝当前注册商客户端未显式批准或拒绝的所有传输请求。等待显式操作和默认服务器行为的时间量是EPP没有指定的本地问题,但是它们应该记录在描述客户端信息的默认服务器行为的特定于服务器的概要文件文档中。

符合传输条件的对象必须具有相关的授权信息,必须提供这些信息才能完成< transfer>命令。所需的授权信息类型是特定于对象的;密码或更复杂的基于公钥加密的机制是典型的。

标识和完成对象传输所需的元素是特定于对象的,因此< transfer>命令的子元素是使用EPP扩展框架指定的。除了标准的EPP命令元素,< transfer>命令还包含以下子元素:

< obj:transfer >:基于特定对象的元素,用于识别被转移的对象以及被请求执行转移命令的元素

< transfer>命令的示例:

   C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">C:  <command>C:    <transfer op="request">C:      <obj:transfer xmlns:obj="urn:ietf:params:xml:ns:obj">C:        <!-- Object-specific elements. -->C:      </obj:transfer>C:    </transfer>C:    <clTRID>ABC-12346</clTRID>C:  </command>C:</epp>

成功处理< transfer>命令后,服务器必须使用EPP < resData>元素响应,该元素必须包含标识对象名称空间的子元素。< resData>元素的子元素是特定对象,但他们必须包括元素识别对象,转移的状态,客户端的标识符要求转会,请求的日期和时间,客户标识符的请求的授权采取行动,预计一个行动的日期和时间,和一个可选的日期和时间,注意对象的有效期(如果适用)中由于转移而发生的变化。

带有< resData>的< transfer>的响应的示例:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1001">S:      <msg>Command completed successfully; action pending</msg>S:    </result>S:    <resData>S:      <obj:trnData xmlns:obj="urn:ietf:params:xml:ns:obj">S:        <obj:name>example</obj:name>S:        <obj:trStatus>pending</obj:trStatus>S:        <obj:reID>ClientX</obj:reID>S:        <obj:reDate>2000-06-08T22:00:00.0Z</obj:reDate>S:        <obj:acID>ClientY</obj:acID>S:        <obj:acDate>2000-06-13T22:00:00.0Z</obj:acDate>S:        <obj:exDate>2002-09-08T22:00:00.0Z</obj:exDate>S:      </obj:trnData>S:    </resData>S:    <trID>S:      <clTRID>ABC-12346</clTRID>S:      <svTRID>54322-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

EPP < transfer>命令用于管理现有对象的客户端注册商的更改。这一行动应限于授权客户;建议将< transfer>请求限制为当前注册商客户以外的客户端,< transfer> approval请求为当前注册商客户端,< transfer> cancel请求为原始请求客户端。对象传输可能不可用或受特定于对象的策略的限制。

2.9.3.5 < update >

EPP < update>命令用于更改与现有对象关联的信息。标识和修改对象所需的元素是特定于对象的,因此< update>命令的子元素是使用EPP扩展框架指定的。除了标准的EPP命令元素之外,< update>命令还包含以下子元素:

  • 对象特定的< obj:update >元素,它标识要更新的对象和修改对象所需的元素。特定于对象的元素必须标识要添加的值、要删除的值或要更改的值。

< update>命令的示例:

   C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">C:  <command>C:    <update>C:      <obj:update xmlns:obj="urn:ietf:params:xml:ns:obj">C:        <!-- Object-specific elements. -->C:      </obj:update>C:    </update>C:    <clTRID>ABC-12346</clTRID>C:  </command>C:</epp>

当成功地处理了< update>命令时,服务器可能使用EPP < resData>元素进行响应,该元素必须包含标识对象名称空间的子元素。< resData>元素的子元素是特定于对象的。

不带有< resData>的< update>的响应的示例:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">S:  <response>S:    <result code="1000">S:      <msg>Command completed successfully</msg>S:    </result>S:    <trID>S:      <clTRID>ABC-12346</clTRID>S:      <svTRID>54322-XYZ</svTRID>S:    </trID>S:  </response>S:</epp>

EPP < update>命令用于更改与现有对象关联的信息。此操作应仅限于授权客户;建议将此操作限制到发起客户机。

3. 响应码

EPP结果码是基于[RFC5321]第4.2.1节描述的应答码理论。EPP使用四个十进制数字来描述每个EPP命令的成功或失败。回复的每个数字都有特殊的意义。
第一个数字表示命令成功或失败。第二个数字表示响应类别,如命令语法或安全性。第三和第四个数字在每个响应类别中提供显式的响应细节。
应答代码的第一个数字有两个值:

  • 1yzz:积极完成回复。该命令被系统接受并正确地处理了。
  • 2yzz:消极完成回复。该命令未被接受,并且请求的操作未发生。

第二个数字将回答分为六类:

  • x0zz Protocol Syntax,协议语法
  • x1zz Implementation-specific Rules,特定于实现的规则
  • x2zz Security,安全
  • x3zz Data Management,数字管理
  • x4zz Server System,服务系统
  • x5zz Connection Management,连接管理

第三和第四位数在第一和第二位数定义的类别中提供响应细节。下面在标准模式中列举了有效结果代码的完整列表。
每个EPP响应必须包括结果代码和人类可读的结果代码描述。用于表示描述的语言可以使用<msg>元素中的“lang”属性实例来标识。如果没有指定,默认语言是英语,标识为“en”。在[RFC4646]中描述了“lang”属性有效值的结构。
响应文本可以翻译成其他语言,但是翻译必须保留这里描述的代码的含义。翻译文本时不能更改响应代码值。
下表中的响应文本用引号括起来,以便清楚地标记每个响应字符串的开头和结尾。当通过协议返回响应文本时,不能使用引号分隔这些字符串。

命令成功的响应:

      Code    Response text in English____    ________________________1000    "Command completed successfully"This is the usual response code for a successfullycompleted command that is not addressed by any other1xxx-series response code.1001    "Command completed successfully; action pending"This response code MUST be returned when responding to acommand that requires offline activity before therequested action can be completed.  See Section 2 for adescription of other processing requirements.1300    "Command completed successfully; no messages"This response code MUST be returned when responding to a<poll> request command and the server message queue isempty.1301    "Command completed successfully; ack to dequeue"This response code MUST be returned when responding to a<poll> request command and a message has been retrievedfrom the server message queue.1500    "Command completed successfully; ending session"This response code MUST be returned when responding to asuccessful <logout> command.

命令失败的响应:

      Code    Response text in English____    ________________________2000    "Unknown command"This response code MUST be returned when a server receivesa command element that is not defined by EPP.2001    "Command syntax error"This response code MUST be returned when a server receivesan improperly formed command element.2002    "Command use error"This response code MUST be returned when a server receivesa properly formed command element but the command cannotbe executed due to a sequencing or context error.  Forexample, a <logout> command cannot be executed withouthaving first completed a <login> command.2003    "Required parameter missing"This response code MUST be returned when a server receivesa command for which a required parameter value has notbeen provided.2004    "Parameter value range error"This response code MUST be returned when a server receivesa command parameter whose value is outside the range ofvalues specified by the protocol.  The error value SHOULDbe returned via a <value> element in the EPP response.2005    "Parameter value syntax error"This response code MUST be returned when a server receivesa command containing a parameter whose value is improperlyformed.  The error value SHOULD be returned via a <value>element in the EPP response.2100    "Unimplemented protocol version"This response code MUST be returned when a server receivesa command element specifying a protocol version that isnot implemented by the server.2101    "Unimplemented command"This response code MUST be returned when a server receivesa valid EPP command element that is not implemented by theserver.  For example, a <transfer> command can beunimplemented for certain object types.2102    "Unimplemented option"This response code MUST be returned when a server receivesa valid EPP command element that contains a protocoloption that is not implemented by the server.2103    "Unimplemented extension"This response code MUST be returned when a server receivesa valid EPP command element that contains a protocolcommand extension that is not implemented by the server.2104    "Billing failure"This response code MUST be returned when a server attemptsto execute a billable operation and the command cannot becompleted due to a client-billing failure.2105    "Object is not eligible for renewal"This response code MUST be returned when a client attemptsto <renew> an object that is not eligible for renewal inaccordance with server policy.2106    "Object is not eligible for transfer"This response code MUST be returned when a client attemptsto <transfer> an object that is not eligible for transferin accordance with server policy.2200    "Authentication error"This response code MUST be returned when a server notes anerror when validating client credentials.2201    "Authorization error"This response code MUST be returned when a server notes aclient-authorization error when executing a command.  Thiserror is used to note that a client lacks privileges toexecute the requested command.2202    "Invalid authorization information"This response code MUST be returned when a server receivesinvalid command authorization information when attemptingto confirm authorization to execute a command.  This erroris used to note that a client has the privileges requiredto execute the requested command, but the authorizationinformation provided by the client does not match theauthorization information archived by the server.2300    "Object pending transfer"This response code MUST be returned when a server receivesa command to transfer of an object that is pendingtransfer due to an earlier transfer request.2301    "Object not pending transfer"This response code MUST be returned when a server receivesa command to confirm, reject, or cancel the transfer of anobject when no command has been made to transfer theobject.2302    "Object exists"This response code MUST be returned when a server receivesa command to create an object that already exists in therepository.2303    "Object does not exist"This response code MUST be returned when a server receivesa command to query or transform an object that does notexist in the repository.2304    "Object status prohibits operation"This response code MUST be returned when a server receivesa command to transform an object that cannot be completeddue to server policy or business practices.  For example,a server can disallow <transfer> commands under terms andconditions that are matters of local policy, or the servermight have received a <delete> command for an object whosestatus prohibits deletion.2305    "Object association prohibits operation"This response code MUST be returned when a server receivesa command to transform an object that cannot be completeddue to dependencies on other objects that are associatedwith the target object.  For example, a server candisallow <delete> commands while an object has activeassociations with other objects.2306    "Parameter value policy error"This response code MUST be returned when a server receivesa command containing a parameter value that issyntactically valid but semantically invalid due to localpolicy.  For example, the server can support a subset of arange of valid protocol parameter values.  The error valueSHOULD be returned via a <value> element in the EPPresponse.2307    "Unimplemented object service"This response code MUST be returned when a server receivesa command to operate on an object service that is notsupported by the server.2308    "Data management policy violation"This response code MUST be returned when a server receivesa command whose execution results in a violation of serverdata management policies.  For example, removing allattribute values or object associations from an objectmight be a violation of a server's data managementpolicies.2400    "Command failed"This response code MUST be returned when a server isunable to execute a command due to an internal servererror that is not related to the protocol.  The failurecan be transient.  The server MUST keep any ongoingsession active.2500    "Command failed; server closing connection"This response code MUST be returned when a server receivesa command that cannot be completed due to an internalserver error that is not related to the protocol.  Thefailure is not transient and will cause other commands tofail as well.  The server MUST end the active session andclose the existing connection.2501    "Authentication error; server closing connection"This response code MUST be returned when a server notes anerror when validating client credentials and aserver-defined limit on the number of allowable failureshas been exceeded.  The server MUST close the existingconnection.2502    "Session limit exceeded; server closing connection"This response code MUST be returned when a server receivesa <login> command and the command cannot be completedbecause the client has exceeded a system-defined limit onthe number of sessions that the client can establish.  Itmight be possible to establish a session by endingexisting unused sessions and closing inactive connections.

4. 格式语法

EPP是用XML Schema 标记的。这里提供的形式化语法是EPP完整 schema 的展示,适用于自动验证EPP XML实例。

这里给出了两种模式。第一个模式是基本EPP Schema。第二个模式定义了基本EPP Schema和对象映射Schema都可以使用的元素和结构。BEGIN和END标签不是模式的一部分;它们用于记录模式的开始和结束,以便进行URI注册。

4.1 基本 Schema

4.2 共享架构 Schema

7. 安全注意事项

EPP只提供简单的客户端身份验证服务。被动攻击足以恢复客户端标识符和密码,导致少量的命令伪造。其他协议层必须提供针对大多数常见攻击和更健壮的安全服务的保护。具体来说,必须使用传输机制或应用程序协议来保护EPP实例,这些传输机制或协议提供完整性、机密性和相互的、强大的客户机-服务器身份验证。

EPP使用[RFC4616]中描述的普通SASL机制的一个变体来提供一个简单的应用层身份验证服务,该服务增强或补充了可能在其他协议层可用的身份验证和标识服务。当普通SASL机制将授权标识符、身份验证标识符和密码指定为由ASCII NUL字符分隔的单个字符串时,EPP将授权和身份验证标识符和密码指定为不同的XML元素。

通过限制在开放连接上尝试< login>尝试的次数,可以阻止重复的密码猜测尝试。如果使用无效的客户端标识符、无效的密码或无效的客户端标识符和无效的密码进行多次< login>尝试,则服务器可以关闭打开的连接。

EPP使用与对象关联的身份验证信息来确认对象传输权限。在EPP客户端和第三方实体之间交换的身份验证信息必须使用一种提供隐私和完整性服务的设施进行交换,以防止在传输过程中意外泄露和修改。

应该使用提供反重放保护的传输机制或应用程序协议来保护EPP实例。EPP通过命令幂等性和客户端发起的事务标识来提供对重播攻击的保护。连续的命令回放不会以任何方式改变对象的状态。但是,如果在中间的命令更改了对象状态之后重播命令,并且不使用客户端标识符来检测重播,则可能出现意外或恶意后果。例如,在< delete>命令之后重播的< create>命令可能会成功,而不需要额外的设施来防止或检测重播。

如第2节所述,EPP包含允许在实际完成请求的操作之前离线检查转换命令的特性。当完成操作的脱机处理时,服务器需要通知客户机。可以使用不受用于提供EPP传输安全性的机制保护的带外机制发送通知。在没有EPP传输安全服务的情况下发送的通知应该使用另一种为通知提供适当级别的保护的机制进行保护。

参考文献

RFC 5730

https://max.book118.com/html/2017/1205/142838109.shtm 命令解读

https://wanwang.aliyun.com/domain/transfers 域名转移流程-阿里云

https://max.book118.com/html/2017/1205/142838109.shtm《CNNIC发布的CN域名EPP接口说明文档》

EPP协议(RFC5730翻译)相关推荐

  1. AMBA协议之AXI协议——中文翻译

    AMBA协议之AXI协议--中文翻译 本规范的编写是为了帮助那些想要熟悉高级微控制器总线架构(AMBA)和设计与AXI协议兼容的系统和模块的硬件和软件工程师. 文章目录 AMBA协议之AXI协议--中 ...

  2. php epp 协议,EPP协议简介

    EPP协议与标准并行口协议兼容且能完成数据的双向传输,它提供了四种数据传送周期:数据写周期:数据读周期:地址写周期:地址读周期.虽然用于域名是EPP最初的动因,但协议设计的目标是可应用于任何订单和执行 ...

  3. Raft协议中文翻译(1)

    #写在前面 一直以来, 对Raft协议的理解感觉都没有非常到位, 本着眼过千遍, 不如手过一遍的原则, 利用空闲时间, 就自己把Raft翻译一遍, 加深自己的理解, 也方便其他同学参考. Raft协议 ...

  4. Raft协议中文翻译(3)

    写在前面 一直以来, 对Raft协议的理解感觉都没有非常到位, 本着眼过千遍, 不如手过一遍的原则, 利用空闲时间, 就自己把Raft翻译一遍, 加深自己的理解, 也方便其他的同学参考. Raft协议 ...

  5. RTMP协议中文翻译(首发)(转)

    Adobe公司的实时消息传输协议 摘要 此备忘录描述了 Adobe公司的实时消息传输协议(RTMP),此协议从属于应用层,被设计用来在适合的传输协议(如TCP)上复用和打包多媒体传输流(如音频.视频和 ...

  6. 【NVMe】NVMe 1.3协议中文翻译——第一章简介

    一.简介 1.1概述 NVMe协议(以前也叫NVMHCI)接口允许主机软件与非易失性存储器子系统通信. 此接口针对企业和客户端固态驱动器进行了优化,通常作为寄存器级接口连接到PCI Express接口 ...

  7. CANopen DS301协议中文翻译V03版

    V0.1版PDF格式供下载参考,只是全面框架翻译,会有大量错误和不确定的地方,希望读者积极参与校对,提供修改意见,完善译文.下载 V0.2版校对提前完成,下载地址 V0.3版使用GitBook编辑(h ...

  8. 旧文备份: CANopen的LSS子协议中文翻译

    有关节点地址和网络波特率的在线设置等:下载 转载于:https://www.cnblogs.com/winshton/p/4897693.html

  9. Twain协议部分翻译

    4.1 性能 应用程序与源进行性能协商的能力使人们能够控制TWAIN兼容的程序.在第四章"应用程序端的高级实现"中,你将看到对CAP_XFERCOUNT性能的协商.性能在并且总是在 ...

最新文章

  1. 2021年春季学期-信号与系统-第四次作业参考答案-第十小题
  2. 如果《赛博朋克2077》走进现实,人类如何摆脱AI的支配?
  3. LESS-Middleware:Node.js 和 LESS 的完美搭配
  4. JavaScript实现depth First Search深度优先搜索算法(附完整源码)
  5. Nginx负载均衡的原理及流程分析
  6. 解决问题的策略-分而治之
  7. P1297-[国家集训队]单选错位【期望概率】
  8. 《C++ Primer 5th》笔记(4 / 19):表达式
  9. 13. GD32F103C8T6入门教程-定时器-3路pwm输出-刹车死区保护
  10. linux系统更新失败处理功能,Proxmox VE升级apt-get update失败处理 | linux运维小站–linux系统架构_服务器运维_Linux运维工程师工作手札...
  11. Java中proc是什么意思,Java PatientProcedureVo.setSignifProc方法代码示例
  12. Vue登录注册,并保持登录状态 1
  13. PC常见故障及解决思路汇总(系统方面)
  14. 计算机安全模式怎么消除计,win10如何解除安全模式,教您如何解除电脑安全模式...
  15. Quartz默认数据库表分析
  16. 苹果平板历史各版本 援引自知乎https://www.zhihu.com/question/315944330
  17. 站长号词库:今日热门长尾关键词挖掘 20221201
  18. Linux ln 命令是什么?C/C++代码实现
  19. 微信小程序留言功能实现
  20. 【表白程序】盛开的玫瑰代码

热门文章

  1. 微信公众号/企业微信插件用python的操作
  2. 技术选型系列 -- Redis VS Memcached
  3. 海报分享功能实现详解
  4. Javascript错误处理——try...catch
  5. Android之——模拟实现检测心率变化的应用实例
  6. 【思考14】量化交易回测中,关于涨跌停的处理方式
  7. 读取BIL格式高光谱数据——C/C++
  8. 读书笔记(五)--公司绝不会告诉你的50大秘密
  9. 相关词挖掘-下拉词挖掘免费工具-用户都在相关搜索的关键词挖掘
  10. java环境变量配置验证,java环境变量配置