<?xml version="1.0" encoding="US-ASCII" ?>

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
   <!ENTITY rfc5539 PUBLIC '' 'reference.RFC.5539.xml'>
   <!ENTITY rfc6241 PUBLIC '' 'reference.RFC.6241.xml'>
   <!ENTITY rfc6353 PUBLIC '' 'reference.RFC.6353.xml'>
   <!ENTITY rfc2119 PUBLIC '' 'reference.RFC.2119.xml'>
   <!ENTITY rfc4742 PUBLIC '' 'reference.RFC.4742.xml'>
   <!ENTITY rfc6242 PUBLIC '' 'reference.RFC.6242.xml'>
   <!ENTITY rfc5246 PUBLIC '' 'reference.RFC.5246.xml'>
   <!ENTITY rfc5277 PUBLIC '' 'reference.RFC.5277.xml'>
   <!ENTITY rfc5280 PUBLIC '' 'reference.RFC.5280.xml'>
   <!ENTITY rfc4279 PUBLIC '' 'reference.RFC.4279.xml'>
   <!ENTITY rfc6125 PUBLIC '' 'reference.RFC.6125.xml'>
   <!ENTITY rfc6335 PUBLIC '' 'reference.RFC.6335.xml'>
   <!ENTITY rfc7407 PUBLIC '' 'reference.RFC.7407.xml'>
   <!ENTITY rfc7525 PUBLIC '' 'reference.RFC.7525.xml'>
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>

<?rfc rfcedstyle="yes"?>
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" number="7589" ipr="trust200902" submissionType="IETF" consensus="yes" obsoletes="5539">

<front>
  <title abbrev="NETCONF over TLS">
     Using the NETCONF Protocol over Transport Layer Security (TLS) with&nbsp;Mutual&nbsp;X.509&nbsp;Authentication
  </title>

  <author fullname="Mohamad Badra" initials="M."
            surname="Badra">
    <organization>Zayed University</organization>
    <address>
      <postal>
        <street>P.O. Box 19282</street>
        <city>Dubai</city>
        <region>United Arab Emirates</region>
        <code></code>
        <country></country>
      </postal>
       <phone>+971 4 4021879</phone>
      <email>mohamad.badra@zu.ac.ae</email>
      <uri>http://www.zu.ac.ae</uri>
    </address>
  </author>

  <author fullname="Alan Luchuk" initials="A."
            surname="Luchuk">
    <organization>SNMP Research, Inc.</organization>
    <address>
      <postal>
        <street>3001 Kimberlin Heights Road</street>
        <city>Knoxville</city>
        <region>TN</region>
        <code>37920</code>
        <country>United States</country>
      </postal>
      <phone>+1 865 573 1434</phone>
      <email>luchuk@snmp.com</email>
      <uri>http://www.snmp.com/</uri>
    </address>
  </author>

  <author fullname="Juergen Schoenwaelder" initials="J."
            surname="Schoenwaelder">
    <organization>Jacobs University Bremen</organization>
    <address>
      <postal>
        <street>Campus Ring 1</street>
        <city>28759 Bremen</city>
        <country>Germany</country>
      </postal>
      <phone>+49 421 200 3587</phone>
      <email>j.schoenwaelder@jacobs-university.de</email>
      <uri>http://www.jacobs-university.de/</uri>
    </address>
  </author>

  <date month="June" year="2015" />
  <area>Management</area>
  <workgroup>NETCONF Working Group</workgroup>

  <keyword>NETCONF</keyword>
  <keyword>TLS</keyword>
  
  <abstract>
    <t>
      The Network Configuration Protocol (NETCONF) provides mechanisms
      to install, manipulate, and delete the configuration of network
      devices.  This document describes how to use the Transport Layer
      Security (TLS) protocol with mutual X.509 authentication to
      secure the exchange of NETCONF messages.  This revision of RFC
      5539 documents the new message framing used by NETCONF 1.1 and
      it obsoletes RFC 5539.
    </t>
  </abstract>
</front>

<middle>

  <section title="Introduction">
    <t>
      The NETCONF protocol <xref target="RFC6241"/> defines a
      mechanism through which a network device can be managed.
      NETCONF is connection-oriented, requiring a persistent
      connection between peers.  This connection must provide
      integrity, confidentiality, peer authentication, and reliable,
      sequenced data delivery.
    </t>
    <t>
      This document defines how NETCONF messages can be exchanged over
      Transport Layer Security (TLS) <xref target="RFC5246"/>.
      Implementations MUST support mutual TLS certificate-based
      authentication <xref target="RFC5246"/>. This assures the
      NETCONF server of the identity of the principal who wishes to
      manipulate the management information.  It also assures the
      NETCONF client of the identity of the server for which it wishes
      to manipulate the management information.
    </t>
    <t>
      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 <xref target="RFC2119"></xref>.
    </t>
  </section>
  
  <section title="Connection Initiation" anchor="initiation">
    <t>
      The peer acting as the NETCONF client MUST act as the TLS
      client.  The TLS client actively opens the TLS connection and
      the TLS server passively listens for the incoming TLS
      connections. The well-known TCP port number 6513 is used by
      NETCONF servers to listen for TCP connections established by
      NETCONF over TLS clients. The TLS client MUST send the TLS
      ClientHello message to begin the TLS handshake. The TLS server
      MUST send a CertificateRequest in order to request a certificate
      from the TLS client. Once the TLS handshake has finished, the
      client and the server MAY begin to exchange NETCONF messages.
      Client and server identity verification is done before the
      NETCONF &lt;hello&gt; message is sent. This means that the
      identity verification is completed before the NETCONF session is
      started.
    </t>
  </section>

  <section title="Message Framing" anchor="framing">
    <t>
      All NETCONF messages MUST be sent as TLS "application data".
      It is possible for multiple NETCONF messages to be contained in
      one TLS record, or for a NETCONF message to be transferred in
      multiple TLS records.
    </t>
    <t>
      The previous version of this specification <xref target="RFC5539"/>
      used the framing sequence defined in <xref target="RFC4742"/>.
      This version aligns with <xref target="RFC6242"/> and adopts the
      framing protocol defined in <xref target="RFC6242"/> as follows:
    </t>
    <t>
      The NETCONF &lt;hello&gt; message MUST be followed by the
      character sequence ]]&gt;]]&gt;.  Upon reception of the
      &lt;hello&gt; message, the peers inspect the announced
      capabilities. If the :base:1.1 capability is advertised by both
      peers, the chunked framing mechanism defined in Section 4.2 of
      <xref target="RFC6242"/> is used for the remainder of the
      NETCONF session. Otherwise, the old end-of-message-based
      mechanism (see Section 4.3 of <xref target="RFC6242"/>) is used.
    </t>
  </section>

  <section title="Connection Closure">
    <t>
      A NETCONF server will process NETCONF messages from the NETCONF
      client in the order in which they are received. A NETCONF
      session is closed using the &lt;close-session&gt; operation.
      When the NETCONF server processes a &lt;close-session&gt;
      operation, the NETCONF server SHALL respond and close the TLS
      session as described in Section 7.2.1 of <xref
      target="RFC5246"/>.
    </t>
  </section>

  <section title="Certificate Validation">
    <t>
      Both peers MUST use X.509 certificate path validation <xref
      target="RFC5280"/> to verify the integrity of the certificate
      presented by the peer. The presented X.509 certificate may also
      be considered valid if it matches one obtained by another
      trusted mechanism, such as using a locally configured
      certificate fingerprint. If X.509 certificate path validation
      fails and the presented X.509 certificate does not match a
      certificate obtained by a trusted mechanism, the connection MUST
      be terminated as defined in <xref target="RFC5246"/>.
    </t>
  </section>
    
  <section title="Server Identity">
    <t>
      The NETCONF client MUST check the identity of the server
      according to Section 6 of <xref target="RFC6125"/>.
    </t>
  </section>
  
  <section title="Client Identity" anchor="identity">
    <t>
      The NETCONF server MUST verify the identity of the NETCONF
      client to ensure that the incoming request to establish a
      NETCONF session is legitimate before the NETCONF session is
      started.
    </t> 
    <t>
      The NETCONF protocol <xref target="RFC6241"/> requires that the
      transport protocol's authentication process results in an
      authenticated NETCONF client identity whose permissions are
      known to the server.  The authenticated identity of a client is
      commonly referred to as the NETCONF username. The following
      algorithm is used by the NETCONF server to derive a NETCONF
      username from a certificate. (Note that the algorithm below is
      the same as the one described in the SNMP&nbhy;TLS&nbhy;TM&nbhy;MIB MIB module
      defined in <xref target="RFC6353"/> and in the
      ietf&nbhy;x509&nbhy;cert&nbhy;to&nbhy;name YANG module defined in <xref
      target="RFC7407"/>.)
      <list style="format (%c)">
	<t>
	  The server maintains an ordered list of mappings of
	  certificates to NETCONF usernames. Each list entry contains
	  <list style="symbols">
	    <t>a certificate fingerprint (used for matching the
	    presented certificate),</t>
	    <t>a map type (indicates how the NETCONF username is
	    derived from the certificate), and</t>
	    <t>optional auxiliary data (used to carry a NETCONF
	    username if the map type indicates the username is
	    explicitly configured).</t>
	  </list>
	</t>
	<t>
	  The NETCONF username is derived by considering each list
	  entry in order. The fingerprint member of the current list
	  entry determines whether the current list entry is a match:
	  <list style="numbers">
	    <t>
	      If the list entry's fingerprint value matches the
	      fingerprint of the presented certificate, then consider
	      the list entry as a successful match.
	    </t>
	    <t>
	      If the list entry's fingerprint value matches that of a
	      locally held copy of a trusted certification authority (CA) 
              certificate, and that
	      CA certificate was part of the CA certificate chain to
	      the presented certificate, then consider the list entry
	      as a successful match.
	    </t>
	  </list>
	</t>
	<t>
	  Once a matching list entry has been found, the map type of
	  the current list entry is used to determine how the username
	  associated with the certificate should be
	  determined. Possible mapping options are:
	  <list style="letters">
	    <t>
	      The username is taken from the auxiliary data of the
	      current list entry. This means the username is
	      explicitly configured (map type 'specified').
	    </t>
	    <t>
	      The subjectAltName's rfc822Name field is mapped to the
	      username (map type 'san-rfc822-name'). The local part of
	      the rfc822Name is used unaltered, but the host-part of
	      the name must be converted to lowercase.
	    </t>
	    <t>
	      The subjectAltName's dNSName is mapped to the username
	      (map type 'san-dns-name'). The characters of the dNSName
	      are converted to lowercase.
	    </t>
	    <t>
	      The subjectAltName's iPAddress is mapped to the username
	      (map type 'san-ip-address'). IPv4 addresses are
	      converted into decimal-dotted quad notation (e.g.,
	      '192.0.2.1'). IPv6 addresses are converted into a
	      32-character all lowercase hexadecimal string without
	      any colon separators.
	    </t>
	    <t>
	      The rfc822Name, dNSName, or iPAddress of the subjectAltName 
              is mapped to the username (map type
	      'san-any'). The first matching subjectAltName value
	      found in the certificate of the above types MUST be used
	      when deriving the name.
	    </t>
	    <t>
	      The certificate's CommonName is mapped to the username
	      (map type 'common-name'). The CommonName is converted to
	      UTF-8 encoding. The usage of CommonNames is deprecated
	      and users are encouraged to use subjectAltName mapping
	      methods instead.
	    </t>
	  </list>
	</t>
	<t>
	  If it is impossible to determine a username from the list
	  entry's data combined with the data presented in the
	  certificate, then additional list entries MUST be searched
	  to look for another potential match. Similarly, if the
	  username does not comply to the NETCONF requirements on
	  usernames <xref target="RFC6241"/>, then additional list
	  entries MUST be searched to look for another potential
	  match.  If there are no further list entries, the TLS
	  session MUST be terminated.
	</t>
      </list>
    </t>
    <t>
      The username provided by the NETCONF over TLS implementation
      will be made available to the NETCONF message layer as the
      NETCONF username without modification.
    </t>
    <t>
      The NETCONF server configuration data model <xref
      target="NETCONF-RESTCONF"/> covers NETCONF over TLS
      and provides further details such as certificate fingerprint
      formats exposed to network configuration systems.
    </t>
  </section>

  <section title="Cipher Suites">
    <t>
      Implementations MUST support TLS 1.2 <xref target="RFC5246"/>
      and are REQUIRED to support the mandatory-to-implement cipher
      suite. Implementations MAY implement additional TLS cipher
      suites that provide mutual authentication <xref
      target="RFC5246"/> and confidentiality as required by NETCONF
      <xref target="RFC6241"/>. Implementations SHOULD follow the
      recommendations given in <xref target="RFC7525"/>.
    </t>
  </section>

  <section title="Security Considerations">
    <t>
      NETCONF is used to access configuration and state information
      and to modify configuration information, so the ability to
      access this protocol should be limited to users and systems that
      are authorized to view the NETCONF server's configuration and
      state or to modify the NETCONF server's configuration.
    </t>
    <t>
      Configuration or state data may include sensitive information,
      such as usernames or security keys.  So, NETCONF requires
      communications channels that provide strong encryption for data
      privacy.  This document defines a NETCONF over TLS mapping that
      provides for support of strong encryption and authentication.
      The security considerations for TLS <xref target="RFC5246"/> and
      NETCONF <xref target="RFC6241"/> apply here as well.
    </t>
    <t>
      NETCONF over TLS requires mutual authentication. Neither side
      should establish a NETCONF over TLS connection with an unknown,
      unexpected, or incorrect identity on the opposite side. Note
      that the decision whether a certificate presented by the client
      is accepted can depend on whether a trusted CA certificate is
      white listed (see <xref target="identity"/>). If deployments
      make use of this option, it is recommended that the white-listed
      CA certificate is used only to issue certificates that are used
      for accessing NETCONF servers. Should the CA certificate be used
      to issue certificates for other purposes, then all certificates
      created for other purposes will be accepted by a NETCONF server
      as well, which is likely not suitable.
    </t>
    <t>
      This document does not support third-party authentication (e.g.,
      backend Authentication, Authorization, and Accounting (AAA)
      servers) due to the fact that TLS does not specify this way of
      authentication and that NETCONF depends on the transport
      protocol for the authentication service. If third-party
      authentication is needed, the Secure Shell (SSH) transport <xref
      target="RFC6242"/> can be used.
    </t> 
    <t>
      RFC 5539 assumes that the end-of-message (EOM) sequence,
      ]]&gt;]]&gt;, cannot appear in any well-formed XML document,
      which turned out to be mistaken.  The EOM sequence can cause
      operational problems and open space for attacks if sent
      deliberately in NETCONF messages.  It is however believed that
      the associated threat is not very high.  This document still
      uses the EOM sequence for the initial &lt;hello&gt; message to
      avoid incompatibility with existing implementations.  When both
      peers implement the :base:1.1 capability, a proper framing protocol
      (chunked framing mechanism; see <xref target="framing"/>) is
      used for the rest of the NETCONF session, to avoid injection
      attacks.
    </t> 
  </section>  

  <section title="IANA Considerations">
    <t>
      Per RFC 5539, IANA
      assigned TCP port number (6513) in the "Registered Port
      Numbers" range with the service name "netconf-tls".  This port
      is the default port for NETCONF over TLS, as defined in
      <xref target="initiation"/>. Below is the registration
      template following the rules in <xref target="RFC6335"/>.
      <figure>
        <artwork>
          <![CDATA[
   Service Name:           netconf-tls
   Transport Protocol(s):  TCP
   Assignee:               IESG <iesg@ietf.org>
   Contact:                IETF Chair <chair@ietf.org>
   Description:            NETCONF over TLS
   Reference:              RFC 7589
   Port Number:            6513
]]>
        </artwork>
      </figure>
    </t>
    <t>
    </t>
  </section>

</middle>

<back>
  <references title="Normative References">
    &rfc2119;
    &rfc6241;
    &rfc6242;
    &rfc5246;
    &rfc5280;
    &rfc6125;
    &rfc6335;
<!--draft-ietf-uta-tls-bcp is now 7525-->
    &rfc7525;

  </references>
  
  <references title="Informative References">
    &rfc4742;
    &rfc5539;
    &rfc6353;
    &rfc7407;

<!--draft-ietf-netconf-server-model, Active - I-D exists-->
<reference anchor='NETCONF-RESTCONF'>
<front>
<title>NETCONF Server and RESTCONF Server Configuration Models</title>
<author initials='K' surname='Watsen' fullname='Kent Watsen'>
    <organization />
</author>
<author initials='J' surname='Schoenwaelder' fullname='Juergen Schoenwaelder'>
    <organization />
</author>
<date month='May' year='2015' />
</front>
<seriesInfo name='Work in Progress,' value='draft-ietf-netconf-server-model-06' />
</reference>
  </references>

  <section title="Changes from RFC 5539">
    <t>
      This section summarizes major changes between this document and
      RFC 5539.
      <list style="symbols">
	<t>
	  Documented that NETCONF over TLS uses the new message
	  framing if both peers support the :base:1.1 capability.
	</t>
	<t>
	  Removed redundant text that can be found in the TLS and
	  NETCONF specifications and restructured the text. Alignment
	  with <xref target="RFC6125"/>.
	</t>
	<t>
	  Added a high-level description on how NETCONF usernames are
	  derived from certificates.
	</t>
	<t>
	  Removed the reference to BEEP.
	</t>
      </list>
    </t>
  </section>
 <section title="Acknowledgements" numbered="no">
    <t>
      The authors like to acknowledge Martin Bjorklund, Olivier
      Coupelon, Pasi Eronen, Mehmet Ersue, Stephen Farrell, Miao Fuyou, Ibrahim
      Hajjeh, David Harrington, Sam Hartman, Alfred Hoenes, Simon
      Josefsson, Charlie Kaufman, Barry Leiba, Tom Petch, Tim Polk, Eric Rescorla, Dan Romascanu,
      Kent Watsen, Bert Wijnen, Stefan Winter, and the NETCONF mailing
      list members for their comments on this document. 
    </t>
    <t>
      Juergen Schoenwaelder was partly funded by Flamingo, a
      Network of Excellence project (ICT-318488) supported by the
      European Commission under its Seventh Framework Programme.
    </t>
  </section>
  
</back>
</rfc>
