This extension defines additional elements to extend the EPP <login> command and response to be used in conjunction with [
RFC 5730].
The EPP <login> command is used to establish a session with an EPP server. This extension overrides the password that is passed with the [
RFC 5730] <pw> or the <newPW> element, as defined in
Section 3.2. A <loginSec:loginSec> element is sent along with the [
RFC 5730] <login> command and
MUST contain at least one of the following child elements:
-
<loginSec:userAgent>:
-
OPTIONAL client user-agent information that identifies the client application software, technology, and operating system used by the server to identify functional or security constraints, current security issues, and potential future functional or security issues for the client. The server may use the information for real-time identification and client notification of security issues, such as keying off of the client application software for executing security rule checks. The server may capture the information to identify future security policy issues, such as deprecating or removing TLS cipher suites or TLS protocols. The <loginSec:userAgent> element MUST contain at least one of the following child elements:
-
-
-
<loginSec:app>:
-
OPTIONAL name of the client application software with version if available, such as the name of the client SDK "EPP SDK 1.0.0". The <loginSec:app> element value can be created by appending the version number to the name of the application software, such as the Augmented Backus-Naur Form (ABNF) grammar [RFC 5234] format:
app = name SP version
name = 1*VCHAR
version = 1*VCHAR
-
<loginSec:tech>:
-
OPTIONAL technology used for the client software with version if available, such as "Vendor Java 11.0.6". The <loginSec:tech> element value can be created by including the technology vendor, technology name, and technology version, such as the Augmented Backus-Naur Form (ABNF) grammar [RFC 5234] format:
tech = vendor SP name SP version
vendor = 1*VCHAR
name = 1*VCHAR
version = 1*VCHAR
-
<loginSec:os>:
-
OPTIONAL client operating system used with version if available, such as "x86_64 Mac OS X 10.15.2". The <loginSec:os> element value can be created by including the operating system architecture, operating system name, and operating system version, such as the Augmented Backus-Naur Form (ABNF) grammar [RFC 5234] format:
os = arch SP name SP version
arch = 1*VCHAR
name = 1*VCHAR
version = 1*VCHAR
-
<loginSec:pw>:
-
OPTIONAL plain text password that is case sensitive, has a minimum length of 6 characters, and has a maximum length that is up to server policy. All leading and trailing whitespace is removed, and all internal contiguous whitespace that includes #x9 (tab), #xA (linefeed), #xD (carriage return), and #x20 (space) is replaced with a single #x20 (space). This element MUST only be set if the [RFC 5730] <pw> element is set to the "[LOGIN-SECURITY]" value.
-
<loginSec:newPW>:
-
OPTIONAL plain text new password that is case sensitive, has a minimum length of 6 characters, and has a maximum length that is up to server policy. All leading and trailing whitespace is removed, and all internal contiguous whitespace that includes #x9 (tab), #xA (linefeed), #xD (carriage return), and #x20 (space) is replaced with a single #x20 (space). This element MUST only be set if the [RFC 5730] <newPW> element is set to the "[LOGIN-SECURITY]" value.
It is
RECOMMENDED that the plain text password in the <loginSec:pw> and <loginSec:newPw> elements use printable ASCII characters #x20 (space) - #x7E (~) with high entropy, such as 128 bits. If non-ASCII characters are supported with the plain text password, then use a standard for passwords with international characters; the OpaqueString PRECIS profile in [
RFC 8265] is recommended in the absence of other considerations.
Example login command that uses the <loginSec:pw> element instead of the <pw> element ([
RFC 5730]) to establish the session and includes the <loginSec:userAgent> 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: <login>
C: <clID>ClientX</clID>
C: <pw>[LOGIN-SECURITY]</pw>
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>urn:ietf:params:xml:ns:epp:loginSec-1.0</extURI>
C: </svcExtension>
C: </svcs>
C: </login>
C: <extension>
C: <loginSec:loginSec
C: xmlns:loginSec=
C: "urn:ietf:params:xml:ns:epp:loginSec-1.0">
C: <loginSec:userAgent>
C: <loginSec:app>EPP SDK 1.0.0</loginSec:app>
C: <loginSec:tech>Vendor Java 11.0.6</loginSec:tech>
C: <loginSec:os>x86_64 Mac OS X 10.15.2</loginSec:os>
C: </loginSec:userAgent>
C: <loginSec:pw>this is a long password</loginSec:pw>
C: </loginSec:loginSec>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
Example login command that uses the <loginSec:pw> element instead of the <pw> element ([
RFC 5730]) to establish the session and that uses the <loginSec:newPW> element instead of the <newPW> element ([
RFC 5730]) to set the new password:
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>[LOGIN-SECURITY]</pw>
C: <newPW>[LOGIN-SECURITY]</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>urn:ietf:params:xml:ns:epp:loginSec-1.0</extURI>
C: </svcExtension>
C: </svcs>
C: </login>
C: <extension>
C: <loginSec:loginSec
C: xmlns:loginSec=
C: "urn:ietf:params:xml:ns:epp:loginSec-1.0">
C: <loginSec:pw>this is a long password
C: </loginSec:pw>
C: <loginSec:newPW>new password that is still long
C: </loginSec:newPW>
C: </loginSec:loginSec>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
Example login command that uses the <pw> element ([
RFC 5730]) to establish the session and that uses the <loginSec:newPW> element instead of the <newPW> element ([
RFC 5730]) to set the new password:
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>shortpassword</pw>
C: <newPW>[LOGIN-SECURITY]</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>urn:ietf:params:xml:ns:epp:loginSec-1.0</extURI>
C: </svcExtension>
C: </svcs>
C: </login>
C: <extension>
C: <loginSec:loginSec
C: xmlns:loginSec=
C: "urn:ietf:params:xml:ns:epp:loginSec-1.0">
C: <loginSec:newPW>new password that is still long
C: </loginSec:newPW>
C: </loginSec:loginSec>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
Upon a completed login command (success or failed), the extension
MUST be included in the response when both of the following conditions hold:
-
Client supports extension:
-
The client supports the extension based on the <svcExtension> element of the <login> command.
-
At least one login security event:
-
The server has identified at least one login security event to communicate to the client.
The extension to the EPP response uses the <loginSec:loginSecData> element that contains the following child elements:
-
<loginSec:event>:
-
One or more <loginSec:event> elements defined in Section 3.1.
Example EPP response to a successful login command on 2020-03-25, where the password will expire in a week:
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: <extension>
S: <loginSec:loginSecData
S: xmlns:loginSec=
S: "urn:ietf:params:xml:ns:epp:loginSec-1.0">
S: <loginSec:event
S: type="password"
S: level="warning"
S: exDate="2020-04-01T22:00:00.0Z"
S: lang="en">
S: Password expiring in a week
S: </loginSec:event>
S: </loginSec:loginSecData>
S: </extension>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54321-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
Example EPP response to a failed login command where the password has expired and the new password does not meet the server complexity requirements:
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="2200">
S: <msg>Authentication error</msg>
S: </result>
S: <extension>
S: <loginSec:loginSecData
S: xmlns:loginSec=
S: "urn:ietf:params:xml:ns:epp:loginSec-1.0">
S: <loginSec:event
S: type="password"
S: level="error"
S: exDate="2020-03-24T22:00:00.0Z">
S: Password has expired
S: </loginSec:event>
S: <loginSec:event
S: type="newPW"
S: level="error">
S: New password does not meet complexity requirements
S: </loginSec:event>
S: </loginSec:loginSecData>
S: </extension>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54321-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
Example EPP response to a successful login command where there is a set of login security events:
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: <extension>
S: <loginSec:loginSecData
S: xmlns:loginSec=
S: "urn:ietf:params:xml:ns:epp:loginSec-1.0">
S: <loginSec:event
S: type="password"
S: level="warning"
S: exDate="2020-04-01T22:00:00.0Z"
S: lang="en">
S: Password expiration soon
S: </loginSec:event>
S: <loginSec:event
S: type="certificate"
S: level="warning"
S: exDate="2020-04-02T22:00:00.0Z"/>
S: <loginSec:event
S: type="cipher"
S: level="warning"
S: value="TLS_RSA_WITH_AES_128_CBC_SHA">
S: Non-PFS Cipher negotiated
S: </loginSec:event>
S: <loginSec:event
S: type="tlsProtocol"
S: level="warning"
S: value="TLSv1.0">
S: Insecure TLS protocol negotiated
S: </loginSec:event>
S: <loginSec:event
S: type="stat"
S: name="failedLogins"
S: level="warning"
S: value="100"
S: duration="P1D">
S: Excessive invalid daily logins
S: </loginSec:event>
S: <loginSec:event
S: type="custom"
S: name="myCustomEvent"
S: level="warning">
S: A custom login security event occurred
S: </loginSec:event>
S: </loginSec:loginSecData>
S: </extension>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54321-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>