<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-opsawg-secure-tacacs-yang-11" category="std" consensus="true" submissionType="IETF" obsoletes="9105" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="YANG for TACACS+ over TLS">A YANG Data Model for Terminal Access Controller Access-Control System Plus (TACACS+)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-secure-tacacs-yang-11"/>
    <author fullname="Mohamed Boucadair" role="editor">
      <organization>Orange</organization>
      <address>
        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>
    <author fullname="Bo Wu">
      <organization>Huawei Technologies</organization>
      <address>
        <email>mlana.wubo@huawei.com</email>
      </address>
    </author>
    <date year="2025" month="May" day="06"/>
    <area>Operations and Management</area>
    <workgroup>Operations and Management Area Working Group</workgroup>
    <keyword>TLS</keyword>
    <keyword>device management</keyword>
    <keyword>network operator</keyword>
    <keyword>provider network</keyword>
    <keyword>AAA</keyword>
    <keyword>authentication</keyword>
    <keyword>authorization</keyword>
    <abstract>
      <?line 39?>

<t>This document defines a Terminal Access Controller Access-Control
   System Plus (TACACS+) client YANG module that augments the System
   Management data model, defined in RFC 7317, to allow devices to make
   use of TACACS+ servers for centralized Authentication, Authorization,
   and Accounting (AAA). Specifically, this document defines a YANG module for TACACS+ over TLS 1.3.</t>
      <t>This document obsoletes RFC 9105.</t>
    </abstract>
  </front>
  <middle>
    <?line 49?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The System Management data model <xref target="RFC7317"/> defines separate functionality to support local and Remote Authentication Dial In User Service (RADIUS) authentication:</t>
      <dl>
        <dt>User Authentication Model:</dt>
        <dd>
          <t>Defines a list of user names with
associated passwords and a configuration leaf to decide the order
in which local or RADIUS authentication is used.</t>
        </dd>
        <dt>RADIUS Client Model:</dt>
        <dd>
          <t>Defines a list of RADIUS servers used by a
 device for centralized user authentication.</t>
        </dd>
      </dl>
      <t><xref target="RFC9105"/> defines a YANG module ("ietf-system-tacacs-plus") that augments the System Management data model <xref target="RFC7317"/> for the management of Terminal Access Controller Access-Control System Plus (TACACS+) clients as an alternative to RADIUS servers <xref target="RFC2865"/>. Typically, the "ietf-system-tacacs-plus" module is used to configure a TACACS+ client on a device to support deployment scenarios with centralized authentication, authorization, and accounting servers.</t>
      <t>This document defines a YANG module for managing TACACS+ clients (<xref target="sec-module"/>), including TACACS+ over TLS 1.3 clients <xref target="I-D.ietf-opsawg-tacacs-tls13"/>. This document obsoletes <xref target="RFC9105"/>.</t>
      <t>The YANG module in this document conforms to the Network Management
   Datastore Architecture (NMDA) defined in <xref target="RFC8342"/>.</t>
      <section anchor="changes-since-rfc-9105">
        <name>Changes Since RFC 9105</name>
        <t>The following changes have been made to <xref target="RFC9105"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Add support for TLS <xref target="I-D.ietf-opsawg-tacacs-tls13"/></t>
          </li>
          <li>
            <t>Add a constraint to ensure that the list of servers is unique per address/port number</t>
          </li>
          <li>
            <t>Update the description of 'address' to be consistent with the type</t>
          </li>
          <li>
            <t>Fix a must statement under 'tacacs-plus'</t>
          </li>
          <li>
            <t>Fix errors in the example provided in Appendix A of <xref target="RFC9105"/></t>
          </li>
          <li>
            <t>Add an example to illustrate the use of VRF</t>
          </li>
          <li>
            <t>Add new examples to illustrate the use of TACACS+TLS data nodes</t>
          </li>
        </ul>
        <t>Detailed YANG changes are listed in <xref target="sec-module"/>.</t>
      </section>
      <section anchor="editorial-note-to-be-removed-by-rfc-editor">
        <name>Editorial Note (To be removed by RFC Editor)</name>
        <ul empty="true">
          <li>
            <t>Note to the RFC Editor: This section is to be removed prior to publication.</t>
          </li>
        </ul>
        <t>This document contains placeholder values that need to be replaced with finalized values at the time of publication. This note summarizes all of the substitutions that are needed.</t>
        <t>Please apply the following replacements:</t>
        <ul spacing="normal">
          <li>
            <t>XXXX --&gt; the assigned RFC number for this I-D</t>
          </li>
          <li>
            <t>SSSS --&gt; the assigned RFC number for <xref target="I-D.ietf-opsawg-tacacs-tls13"/></t>
          </li>
          <li>
            <t>TBD  --&gt; the assigned port number in <xref section="7" sectionFormat="of" target="I-D.ietf-opsawg-tacacs-tls13"/></t>
          </li>
          <li>
            <t>2024-12-11 --&gt; the actual date of the publication of this document</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>The terminology for describing YANG data models is defined in
   <xref target="RFC7950"/>.</t>
      <t>The document uses the terms defined in <xref section="2" sectionFormat="of" target="I-D.ietf-opsawg-tacacs-tls13"/> and <xref section="3" sectionFormat="of" target="RFC8907"/>.</t>
      <t>'client' refers to TACACS+ client, while 'server' refers to TACACS+ server.</t>
      <section anchor="tree-diagrams">
        <name>Tree Diagrams</name>
        <t>The tree diagram used in this document follows the notation defined
   in <xref target="RFC8340"/>.</t>
      </section>
    </section>
    <section anchor="design-of-the-tacacs-data-model">
      <name>Design of the TACACS+ Data Model</name>
      <t>This module is used to configure a TACACS+ client on a device to
   support deployment scenarios with centralized authentication,
   authorization, and accounting servers.  Authentication is used to
   validate a user's username and password, authorization allows the
   user to access and execute commands at various privilege levels
   assigned to the user, and accounting keeps track of the activity of a
   user who has accessed the device.</t>
      <t>The "ietf-system-tacacs-plus" module augments the '/sys:system' path
   defined in the "ietf-system" module with the contents of the 'tacacs-plus'
   grouping.  Therefore, a device can use local, RADIUS, or
   TACACS+ authentication to validate users who attempt to access the
   device by several mechanisms, e.g., a command line interface or a
   web-based user interface.</t>
      <t>The 'server' list, which is directly under the 'tacacs-plus'
   container, holds a list of TACACS+ servers and uses 'server-type' to
   distinguish between Authentication, Authorization, and Accounting
   (AAA) services. The list of servers is for redundancy.</t>
      <t>When there are multiple interfaces connected to a TACACS+ client or
   server, the source address of outgoing TACACS+ packets could be
   specified, or the source address could be specified through the
   interface IP address setting or derived from the outbound interface
   from the local Forwarding Information Base (FIB). For a TACACS+
   server located in a Virtual Private Network (VPN), a VPN Routing and
   Forwarding (VRF) instance needs to be specified.</t>
      <t>The 'statistics' container under the 'server' list is a collection of
   read-only counters for sent and received messages from a configured
   server.</t>
      <t>The YANG module for TACACS+ client has the structure shown in <xref target="tree-overview"/>.</t>
      <figure anchor="tree-overview">
        <name>Tree Structure Overview</name>
        <artwork><![CDATA[
augment /sys:system:
  +--rw tacacs-plus
     +--rw client-credentials* [id] {credential-reference}?
     |  +--rw id                       string
     |  +--rw (auth-type)?
     |     +--:(certificate)
     |     |  ...
     |     +--:(raw-public-key) {tlsc:client-ident-raw-public-key}?
     |     |  ...
     |     +--:(tls13-epsk) {tlsc:client-ident-tls13-epsk}?
     |        ...
     +--rw server-credentials* [id] {credential-reference}?
     |  +--rw id                 string
     |  +--rw ca-certs!
     |  |  ...
     |  +--rw ee-certs!
     |  |  ...
     |  +--rw raw-public-keys! {tlsc:server-auth-raw-public-key}?
     |  |  ...
     |  +--rw tls13-epsks?       empty
     |          {tlsc:server-auth-tls13-epsk}?
     +--rw server* [name]
        +--rw name                           string
        +--rw server-type
        |       tacacs-plus-server-type
        +--rw domain-name?                   inet:domain-name
        +--rw sni-enabled?                   boolean
        +--rw address                        inet:host
        +--rw port?                          inet:port-number
        +--rw (security)
        |  +--:(tls)
        |  |  +--rw client-identity!
        |  |  |  +--rw (ref-or-explicit)?
        |  |  |     +--:(ref)
        |  |  |     |  +--rw credentials-reference?
        |  |  |     |          sys-tcs-plus:client-credentials-ref
        |  |  |     |          {credential-reference}?
        |  |  |     +--:(explicit)
        |  |  |        +--rw (auth-type)?
        |  |  |           +--:(certificate)
        |  |  |           |  ...
        |  |  |           +--:(raw-public-key)
        |  |  |           |     {tlsc:client-ident-raw-public-key}?
        |  |  |           |  ...
        |  |  |           +--:(tls13-epsk)
        |  |  |                 {tlsc:client-ident-tls13-epsk}?
        |  |  |              ...
        |  |  +--rw server-authentication
        |  |  |  +--rw (ref-or-explicit)?
        |  |  |     +--:(ref)
        |  |  |     |  +--rw credentials-reference?
        |  |  |     |          sys-tcs-plus:server-credentials-ref
        |  |  |     |          {credential-reference}?
        |  |  |     +--:(explicit)
        |  |  |        +--rw ca-certs!
        |  |  |        |  ...
        |  |  |        +--rw ee-certs!
        |  |  |        |  ...
        |  |  |        +--rw raw-public-keys!
        |  |  |        |       {tlsc:server-auth-raw-public-key}?
        |  |  |        |  ...
        |  |  |        +--rw tls13-epsks?             empty
        |  |  |                {tlsc:server-auth-tls13-epsk}
        |  |  +--rw hello-params {tlscmn:hello-params}?
        |  |     +--rw tls-versions
        |  |     |  +--rw min?   identityref
        |  |     |  +--rw max?   identityref
        |  |     +--rw cipher-suites
        |  |        +--rw cipher-suite*
        |  |                tlscsa:tls-cipher-suite-algorithm
        |  +--:(obfuscation)
        |     +--rw shared-secret?           string
        +--rw (source-type)?
        |  +--:(source-ip)
        |  |  +--rw source-ip?               inet:ip-address
        |  +--:(source-interface)
        |     +--rw source-interface?        if:interface-ref
        +--rw vrf-instance?
        |       -> /ni:network-instances/network-instance/name
        +--rw single-connection?             boolean
        +--rw timeout?                       uint16
        +--ro statistics
           +--ro discontinuity-time?    yang:date-and-time
           +--ro connection-opens?      yang:counter64
           +--ro connection-closes?     yang:counter64
           +--ro connection-aborts?     yang:counter64
           +--ro connection-failures?   yang:counter64
           +--ro connection-timeouts?   yang:counter64
           +--ro messages-sent?         yang:counter64
           +--ro messages-received?     yang:counter64
           +--ro errors-received?       yang:counter64
           +--ro sessions?              yang:counter64
           +--ro cert-errors?           yang:counter64
           +--ro rpk-errors?            yang:counter64
                   {tlsc:server-auth-raw-public-key}?
]]></artwork>
      </figure>
      <t>Specifically, the module is designed to cover the following key requirements specified in <xref target="I-D.ietf-opsawg-tacacs-tls13"/>:</t>
      <ul spacing="normal">
        <li>
          <t>TLS 1.3 <xref target="RFC8446"/> <bcp14>MUST</bcp14> be used for transport.</t>
        </li>
        <li>
          <t>Earlier TLS versions <bcp14>MUST NOT</bcp14> be used.</t>
        </li>
        <li>
          <t>The cipher suites offered or accepted <bcp14>SHOULD</bcp14> be configurable.</t>
        </li>
        <li>
          <t>Implementations <bcp14>MAY</bcp14> support Raw Public Keys (RPKs) and Pre-Shared Keys (PSKs).</t>
        </li>
        <li>
          <t>Implementations <bcp14>MUST</bcp14> support the ability to configure the server's domain name, so that it may be included in the TLS Server Name Indication (SNI) extension.</t>
        </li>
      </ul>
      <t>The following new data nodes are supported compared to <xref target="RFC9105"/>:</t>
      <dl>
        <dt>'client-credentials' and 'server-credentials':</dt>
        <dd>
          <t>Defines a set credentials that can be globally provisioned and then referenced under specific servers.</t>
        </dd>
        <dt>'domain-name':</dt>
        <dd>
          <t>Provides a domain name of the server per <xref section="3.3" sectionFormat="of" target="I-D.ietf-opsawg-tacacs-tls13"/>. This is the TLS TACACS+ server's domain name that is  included in the SNI extension. This domain name is distinct from the IP address/hostname used for the underlying transport connection.</t>
        </dd>
        <dt>'sni-enabled':</dt>
        <dd>
          <t>Controls activation of Server Name Indication (SNI) (<xref section="3" sectionFormat="of" target="RFC6066"/>). This parameter can be used only if a domain name is provided.</t>
        </dd>
        <dt>'client-identity':</dt>
        <dd>
          <t>Specifies the identity credentials that the client may present when
establishing a connection to a server. Client identities can be configured at the top level and then referenced for specific server instances. Alternatively, client identities can be configured explicitly under each server instance.</t>
        </dd>
        <dt>'server-authentication':</dt>
        <dd>
          <t>Specifies how a client authenticates servers. Server credentials can be configured at the top level and then referenced for specific server instances. Alternatively, client identities can be configured explicitly under each server instance.</t>
        </dd>
        <dt>'hello-params':</dt>
        <dd>
          <t>Controls TLS versions and cipher suites to be used when establishing TLS sessions.</t>
        </dd>
        <dt>'discontinuity-time':</dt>
        <dd>
          <t>The time on the most recent occasion at which the client suffered a discontinuity
(a configuration action to reset all counters, re-initialization, etc.).</t>
        </dd>
        <dt>'cert-errors':</dt>
        <dd>
          <t>Number of connection failures due to certificate issues.</t>
        </dd>
        <dt>'rpk-errors':</dt>
        <dd>
          <t>Number of raw public key related connection failures.</t>
        </dd>
      </dl>
    </section>
    <section anchor="sec-module">
      <name>TACACS+ Client Module</name>
      <t>This YANG module uses types and groupings defined in <xref target="RFC6991"/>, <xref target="RFC8341"/>, <xref target="RFC8343"/>, <xref target="RFC8529"/>, <xref target="RFC9640"/>, <xref target="RFC9641"/>,
<xref target="RFC9642"/>, and <xref target="RFC9645"/>.</t>
      <t>The module augments <xref target="RFC7317"/>.</t>
      <t>The module also cites <xref target="RFC6520"/>, <xref target="RFC9257"/>, and <xref target="RFC9258"/>.</t>
      <sourcecode type="yang"><![CDATA[
<CODE BEGINS> file "ietf-system-tacacs-plus@2025-01-23.yang"
module ietf-system-tacacs-plus {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-system-tacacs-plus";
  prefix sys-tcs-plus;

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-system {
    prefix sys;
    reference
      "RFC 7317: A YANG Data Model for System Management";
  }
  import ietf-netconf-acm {
    prefix nacm;
    reference
      "RFC 8341: Network Configuration Access Control Model";
  }
  import ietf-interfaces {
    prefix if;
    reference
      "RFC 8343: A YANG Data Model for Interface Management";
  }
  import ietf-network-instance {
    prefix ni;
    reference
      "RFC 8529: YANG Data Model for Network Instances";
  }
  import ietf-crypto-types {
    prefix ct;
    reference
      "RFC 9640: YANG Data Types and Groupings for Cryptography";
  }
  import ietf-truststore {
    prefix ts;
    reference
      "RFC 9641: A YANG Data Model for a Truststore";
  }
  import ietf-keystore {
    prefix ks;
    reference
      "RFC 9642: A YANG Data Model for a Keystore";
  }
  import ietf-tls-common {
    prefix tlscmn;
    reference
      "RFC 9645: YANG Groupings for TLS Clients and TLS Servers";
  }
  import ietf-tls-client {
    prefix tlsc;
    reference
      "RFC 9645: YANG Groupings for TLS Clients and TLS Servers";
  }

  organization
    "IETF OPSAWG (Operations and Management Area Working Group)";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>

     Editor:   Mohamed Boucadair
               <mailto:mohamed.boucadair@orange.com>
     Author:   Bo Wu
               <lana.wubo@huawei.com>
     Author:   Guangying Zheng
               <zhengguangying@huawei.com>";
  description
    "This module provides management of TACACS+ clients.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.

     Copyright (c) 2025 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Revised BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     All revisions of IETF and IANA published modules can be found
     at the YANG Parameters registry
     (https://www.iana.org/assignments/yang-parameters).

     This version of this YANG module is part of RFC XXXX; see the
     RFC itself for full legal notices.";

  revision 2025-01-23 {
    description
      "This revision adds TLS support. Specifically, this revision
       adds:
         - a new feature 'credential-reference'
         - a new container 'client-credentials'
         - a new container 'server-credentials'
         - a new leaf 'domain-name'
         - a new leaf 'sni-enabled'
         - TLS as a new security choice
         - a new leaf 'discontinuity-time' under 'statistics'
         - a new leaf 'cert-errors' under 'statistics'
         - a new leaf 'rpk-errors' under 'statistics'
       Also, this revision:
         - updates the reference of 'tacacs-plus' identity
           to also cite RFC SSSS
         - fixes a must statement under 'tacacs-plus' by adding
           a missing prefix
         - requires that the servers list must be unique per
           address/port number.
         - updates the description of the 'name' under 'server'
           list to better reflect the intended use and clarifies
           the difference with the new domain-name
         - updates the description of the 'address' to be
           consistent with the type
         - removes the default statement for the 'port' under
           'server' list because a distinct default port number
           is used for TACACS+TLS
         - updates the 'port' leaf under 'server' list to enumerate
           the various TACACS+ default port numbers
         - added a constraint on the VRF with 'source-interface'
           is also provided
         - updates the description of timeout to remove redundant
           text with the default statement";
    reference
      "RFC XXXX: A YANG Data Model for Terminal Access Controller
                 Access-Control System Plus (TACACS+)";
  }

  revision 2021-08-05 {
    description
      "Initial revision.";
    reference
      "RFC 9105: A YANG Data Model for Terminal Access Controller
                 Access-Control System Plus (TACACS+)";
  }

  feature credential-reference {
    description
      "Indicates whether service credentials references are
       supported.";
  }

  identity tacacs-plus {
    base sys:authentication-method;
    description
      "Indicates AAA operation using TACACS+.";
    reference
      "RFC SSSS: Terminal Access Controller Access-Control
                 System Plus (TACACS+) over TLS 1.3
       RFC 8907: The TACACS+ Protocol";
  }

  typedef tacacs-plus-server-type {
    type bits {
      bit authentication {
        description
          "Indicates that the TACACS+ server is providing
           authentication services.";
      }
      bit authorization {
        description
          "Indicates that the TACACS+ server is providing
           authorization services.";
      }
      bit accounting {
        description
          "Indicates that the TACACS+ server is providing accounting
           services.";
      }
    }
    description
      "The type can be set to authentication, authorization,
       accounting, or any combination of the three types.";
  }

  typedef client-credentials-ref {
    type leafref {
      path "/sys:system/sys-tcs-plus:tacacs-plus"
         + "/sys-tcs-plus:client-credentials/sys-tcs-plus:id";
    }
    description
      "Defines a type to reference client credentials.";
  }

  typedef server-credentials-ref {
    type leafref {
      path "/sys:system/sys-tcs-plus:tacacs-plus"
         + "/sys-tcs-plus:server-credentials/sys-tcs-plus:id";
    }
    description
      "Defines a type to reference server credentials.";
  }

  grouping statistics {
    description
      "Grouping for TACACS+ statistics attributes, including TLS
       specifics.";
    container statistics {
      config false;
      description
        "A collection of server-related statistics objects.";
      leaf discontinuity-time {
        type yang:date-and-time;
        description
          "The time on the most recent occasion at which the
           TACACS+ client suffered a discontinuity. Examples of 
           discontinuity can be a configuration action to reset
           all counters, re-initialization of the system, or any
           other events that prevent reliable contiguous tracking
           of counters.";
      }
      leaf connection-opens {
        type yang:counter64;
        description
          "Number of new connection requests sent to the server,
           e.g., socket open.";
      }
      leaf connection-closes {
        type yang:counter64;
        description
          "Number of connection close requests sent to the server,
           e.g., socket close.";
      }
      leaf connection-aborts {
        type yang:counter64;
        description
          "Number of aborted connections to the server. These do
           not include connections that are closed gracefully.";
      }
      leaf connection-failures {
        type yang:counter64;
        description
          "Number of connection failures to the server.";
      }
      leaf connection-timeouts {
        type yang:counter64;
        description
          "Number of connection timeouts to the server.";
      }
      leaf messages-sent {
        type yang:counter64;
        description
          "Number of messages sent to the server.";
      }
      leaf messages-received {
        type yang:counter64;
        description
          "Number of messages received from the server.";
      }
      leaf errors-received {
        type yang:counter64;
        description
          "Number of error messages received from the server.";
      }
      leaf sessions {
        type yang:counter64;
        description
          "Number of TACACS+ sessions completed with the server.
           If the Single Connection Mode was not enabled, the number
           of sessions is the same as the number of
           'connection-closes'. If the Single Connection Mode was
           enabled, a single TCP connection may contain multiple
           TACACS+ sessions.";
      }
      leaf cert-errors {
        type yang:counter64;
        description
          "Number of connection failures due to certificate
           issues.";
      }
      leaf rpk-errors {
        if-feature "tlsc:server-auth-raw-public-key";
        type yang:counter64;
        description
          "Number of RPK-related connection failures.";
      }
    }
  }

  grouping certificate {
    description
      "Specifies a certificate that can be used for client
       identity.";
    uses "ks:inline-or-keystore-end-entity-cert-with-key-"
       + "grouping" {
      refine "inline-or-keystore/inline/inline-definition" {
        must 'not(public-key-format) or derived-from-or-self'
           + '(public-key-format, "ct:subject-public-key-'
           + 'info-format")';
      }
      refine "inline-or-keystore/central-keystore/"
           + "central-keystore-reference/asymmetric-key" {
        must 'not(deref(.)/../ks:public-key-format) or '
           + 'derived-from-or-self(deref(.)/../ks:public-'
           + 'key-format, "ct:subject-public-key-info-'
           + 'format")';
      }
    }
  }

  grouping raw-private-key {
    description
      "Specifies raw private key (RPK) that can be used for
       client identity.";
    uses ks:inline-or-keystore-asymmetric-key-grouping {
      refine "inline-or-keystore/inline/inline-definition" {
        must 'not(public-key-format) or derived-from-or-self'
           + '(public-key-format, "ct:subject-public-key-'
           + 'info-format")';
      }
      refine "inline-or-keystore/central-keystore/"
           + "central-keystore-reference" {
        must 'not(deref(.)/../ks:public-key-format) or '
           + 'derived-from-or-self(deref(.)/../ks:public-'
           + 'key-format, "ct:subject-public-key-info-format")';
      }
    }
  }

  grouping tls13-epsk {
    description
      "An External Pre-Shared Key (EPSK) is established or
       provisioned out-of-band, i.e., not from a TLS connection.
       An EPSK is a tuple of (Base Key, External Identity, Hash).
       When Pre-Shared Keys (PSKs) are provisioned out of band,
       the PSK identity and the Key Derivation Function (KDF) hash
       algorithm to be used with the PSK must also be
       provisioned.";
    reference
      "RFC 8446: The Transport Layer Security (TLS) Protocol
                 Version 1.3, Section 4.2.11
       RFC 9257: Guidance for External Pre-Shared Key (PSK) Usage
                 in TLS, Section 6
       RFC 9258: Importing External Pre-Shared Keys (PSKs) for
                 TLS 1.3, Section 5.1";
    uses ks:inline-or-keystore-symmetric-key-grouping;
    leaf external-identity {
      type string;
      mandatory true;
      description
        "A sequence of bytes used to identify an EPSK. A label for
         a pre-shared key established externally.";
      reference
        "RFC 8446: The Transport Layer Security (TLS) Protocol
                   Version 1.3, Section 4.2.11
         RFC 9257: Guidance for External Pre-Shared Key (PSK)
                   Usage in TLS, Section 4.1";
    }
    leaf hash {
      type tlscmn:epsk-supported-hash;
      default "sha-256";
      description
        "For externally established PSKs, the Hash algorithm must be
         set when the PSK is established or default to SHA-256 if no
         such algorithm is defined.";
      reference
        "RFC 8446: The Transport Layer Security (TLS) Protocol
                   Version 1.3, Section 4.2.11";
    }
    leaf context {
      type string;
      description
        "The context used to determine the EPSK, if any exists. For
         example, context may include information about peer roles or
         identities to mitigate Selfie-style reflection attacks.";
      reference
        "RFC 9258: Importing External Pre-Shared Keys (PSKs) for
                   TLS 1.3, Section 5.1 ";
    }
    leaf target-protocol {
      type uint16;
      description
        "Specifies the protocol for which a PSK is imported for
         use.";
      reference
        "RFC 9258: Importing External Pre-Shared Keys (PSKs) for
                   TLS 1.3, Section 3 ";
    }
    leaf target-kdf {
      type uint16;
      description
        "The KDF for which a PSK is imported for use.";
      reference
        "RFC 9258: Importing External Pre-Shared Keys (PSKs) for
                   TLS 1.3, Section 3";
    }
  }

  grouping client-identity {
    description
      "Identity credentials that a TLS client may present when
       establishing a connection to a TLS server. When configured,
       and requested by the TLS server when establishing a TLS
       session, these credentials are passed in the Certificate
       message.";
    reference
      "RFC 8446: The Transport Layer Security (TLS) Protocol
                 Version 1.3, Section 4.4.2";
    choice auth-type {
      description
        "A choice amongst authentication types.";
      case certificate {
        container certificate {
          description
            "Specifies the client identity using a certificate.";
          uses certificate;
        }
      }
      case raw-public-key {
        if-feature "tlsc:client-ident-raw-public-key";
        container raw-private-key {
          description
            "Specifies the client identity using RPK.";
          uses raw-private-key;
        }
      }
      case tls13-epsk {
        if-feature "tlsc:client-ident-tls13-epsk";
        container tls13-epsk {
          description
            "An EPSK is established or provisioned out-of-band.";
          uses tls13-epsk;
        }
      }
    }
  }

  grouping client-identity-with-ref {
    description
      "Identity credentials that the TLS client may present when
       establishing a connection to a TLS server. When configured,
       and requested by the TLS server when establishing a TLS
       session, these credentials are passed in the Certificate
       message.";
    choice ref-or-explicit {
      description
        "A choice between a reference or explicit configuration.";
      case ref {
        description
          "Provides a reference to a client identity.";
        leaf credentials-reference {
          if-feature "credential-reference";
          type sys-tcs-plus:client-credentials-ref;
          description
            "Specifies the client credentials reference.";
        }
      }
      case explicit {
        description
          "Explicit configuration of the client identity.";
        uses client-identity;
      }
    }
  }

  grouping server-authentication {
    description
      "Specifies how a TLS client can authenticate TLS servers.
       Any combination of credentials is additive and unordered.";
    container ca-certs {
      presence "Indicates that Certification Authority (CA) 
                certificates have been configured.
                This statement is present so the mandatory descendant
                nodes do not imply that this node must be 
                configured.";
      description
        "A set of CA certificates used by the TLS client to
         authenticate TLS server certificates.
         A server certificate is authenticated if it has a valid
         chain of trust to a configured CA certificate.";
      reference
        "RFC 9641: A YANG Data Model for a Truststore";
      uses ts:inline-or-truststore-certs-grouping;
    }
    container ee-certs {
      presence "Indicates that End Entity (EE) certificates have been
                configured.
                This statement is present so the mandatory descendant
                nodes do not imply that this node must be 
                configured.";
      description
        "A set of server certificates (i.e., end entity certificates)
         used by a TLS client to authenticate certificates
         presented by TLS servers. A server certificate is
         authenticated if it is an exact match to a configured server
         certificate.";
      reference
        "RFC 9641: A YANG Data Model for a Truststore";
      uses ts:inline-or-truststore-certs-grouping;
    }
    container raw-public-keys {
      if-feature "tlsc:server-auth-raw-public-key";
      presence "Indicates that raw public keys have been configured.
                This statement is present so the mandatory descendant
                nodes do not imply that this node must be
                configured.";
      description
        "A set of raw public keys used by a TLS client to
         authenticate raw public keys presented by the TLS server.
         A raw public key is authenticated if it is an exact match
         to a configured raw public key.";
      reference
        "RFC 9641: A YANG Data Model for a Truststore";
      uses ts:inline-or-truststore-public-keys-grouping {
        refine "inline-or-truststore/inline/inline-definition/"
             + "public-key" {
          must 'derived-from-or-self(public-key-format,'
             + ' "ct:subject-public-key-info-format")';
        }
        refine "inline-or-truststore/central-truststore/"
             + "central-truststore-reference" {
          must 'not(deref(.)/../ts:public-key/ts:public-key-'
             + 'format[not(derived-from-or-self(., "ct:subject-'
             + 'public-key-info-format"))])';
        }
      }
    }
    leaf tls13-epsks {
      if-feature "tlsc:server-auth-tls13-epsk";
      type empty;
      description
        "Indicates that a TLS client can authenticate TLS servers
         using configured EPSKs.";
    }
  }

  grouping server-authentication-with-ref {
    description
      "Specifies how a TLS client can authenticate TLS servers.";
    choice ref-or-explicit {
      description
        "A choice between a reference of explicit configuration.";
      case ref {
        description
          "Provides a reference to server credentials.";
        leaf credentials-reference {
          if-feature "credential-reference";
          type sys-tcs-plus:server-credentials-ref;
          description
            "Specifies the server credentials reference.";
        }
      }
      case explicit {
        description
          "Explicit configuration of credentials of a server.";
        uses server-authentication;
      }
    }
  }

  grouping hello-params {
    description
      "Configurable parameters for the TLS Hello message.";
    reference
      "RFC SSSS: Terminal Access Controller Access-Control
                 System Plus (TACACS+) over TLS 1.3,
                 Section 5.1";
    uses tlscmn:hello-params-grouping {
      refine "tls-versions/min" {
        must "not(derived-from-or-self(current(), "
           + "'tlscmn:tls12'))" {
          error-message
            "TLS 1.2 is not supported as min TLS version";
        }
      }
      refine "tls-versions/max" {
        must "not(derived-from-or-self(current(), "
           + "'tlscmn:tls12'))" {
          error-message
            "TLS 1.2 is not supported as max TLS version";
        }
      }
    }
  }

  grouping tls-client {
    description
      "A grouping for configuring a TLS client without any
       consideration for how an underlying TCP session is
       established.";
    container client-identity {
      presence "Indicates that a TLS-level client identity has been
                configured.
                This statement is present so the mandatory descendant
                do not imply that this node must be configured.";
      description
        "Identity credentials that a TLS client may present when
         establishing a connection to a TLS server.";
      uses client-identity-with-ref;
    }
    container server-authentication {
      must 'credentials-reference or ca-certs or ee-certs or '
         + 'raw-public-keys or tls13-epsks';
      description
        "Specifies how a TLS client can authenticate TLS servers.";
      uses server-authentication-with-ref;
    }
    container hello-params {
      if-feature "tlscmn:hello-params";
      description
        "Configurable parameters for the TLS Hello message.";
      uses hello-params;
    }
  }

  grouping tacacs-plus {
    description
      "Grouping for TACACS+ attributes.";
    container tacacs-plus {
      must "not(derived-from-or-self(../sys:authentication"
         + "/sys:user-authentication-order, "
         + "'sys-tcs-plus:tacacs-plus'))"
         + " or bit-is-set(server/server-type,'authentication')" {
        error-message
          "When 'tacacs-plus' is used as a system authentication
           method, a TACACS+ authentication server must be
           configured.";
        description
          "When 'tacacs-plus' is used as an authentication method,
           a TACACS+ server must be configured.";
      }
      description
        "Container for TACACS+ configurations and operations.";
      list client-credentials {
        if-feature "credential-reference";
        key "id";
        description
          "Identity credentials that a TLS client may present
           when establishing a connection to a TLS server.
           A list of client credentials that can be referenced
           when configuring server instances.";
        nacm:default-deny-write;
        leaf id {
          type string;
          description
            "An identifier that uniquely identifies a client 
             identity within the device configuration.";
        }
        uses client-identity;
      }
      list server-credentials {
        if-feature "credential-reference";
        key "id";
        description
          "Identity credentials that a TLS client may use
           to authenticate a TLS server.";
        nacm:default-deny-write;
        leaf id {
          type string;
          description
            "An identifier that uniquely identify server
             credentials within the device configuration.";
        }
        uses server-authentication;
      }
      list server {
        key "name";
        unique "address port";
        ordered-by user;
        description
          "List of TACACS+ servers used by the device.";
        leaf name {
          type string;
          description
            "A name that is used to uniquely identify a TACACS+
             server within the device configuration.
             This name is not to be confused with the domain-name.";
        }
        leaf server-type {
          type tacacs-plus-server-type;
          mandatory true;
          description
            "Server type: authentication/authorization/accounting and
             various combinations.";
        }
        leaf domain-name {
          type inet:domain-name;
          description
            "Provides a domain name of the TACACS+ server.";
          reference
            "RFC SSSS: Terminal Access Controller Access-Control
                       System Plus (TACACS+) over TLS 1.3,
                       Section 3.4.2";
        }
        leaf sni-enabled {
          type boolean;
          must '../domain-name' {
            error-message
              "A domain name must be provided to make use of Server
               Name Indication (SNI).";
          }
          description
            "Enables the use of SNI, when set to true. Disables the
             use of SNI, when set to false.";
          reference
            "RFC 6066: Transport Layer Security (TLS) Extensions:
                       Extension Definitions, Section 3
             RFC SSSS: Terminal Access Controller Access-Control
                       System Plus (TACACS+) over TLS 1.3,
                       Section 3.4.2";
        }
        leaf address {
          type inet:host;
          mandatory true;
          description
            "The IP address or name of the TACACS+ server.";
        }
        leaf port {
          type inet:port-number;
          description
            "The port number of TACACS+ server.
             Default port number for legacy TACACS+ is 49,
             while it is TBD for TACACS+TLS.";
        }
        choice security {
          mandatory true;
          description
            "Security mechanism between TACACS+ client and server.";
          case tls {
            description
              "TLS is used to secure TACACS+ exchanges.";
            reference
              "RFC SSSS: Terminal Access Controller Access-Control
                         System Plus (TACACS+) over TLS 1.3";
            uses tls-client;
          }
          case obfuscation {
            leaf shared-secret {
              type string {
                length "1..max";
              }
              description
                "The shared secret, which is known to both the
                 TACACS+ client and server. TACACS+ server
                 administrators SHOULD configure a shared secret with
                 a minimum length of 16 characters.
                 It is highly recommended that this shared secret is
                 at least 32 characters long and sufficiently complex
                 with a mix of different character types,
                 i.e., upper case, lower case, numeric, and
                 punctuation.  Note that this security mechanism is
                 best described as 'obfuscation' and not 'encryption'
                 as it does not provide any meaningful integrity,
                 privacy, or replay protection.

                 Obfuscation is obsoleted in favor of TLS support.";
              reference
                "RFC 8907: The TACACS+ Protocol
                 RFC SSSS: Terminal Access Controller Access-Control
                            System Plus (TACACS+) over TLS 1.3";
              nacm:default-deny-all;
            }
          }
        }
        choice source-type {
          description
            "The source address type for outbound TACACS+ packets.";
          case source-ip {
            leaf source-ip {
              type inet:ip-address;
              description
                "Specifies the source IP address for TACACS+ outbound
                 packets.";
            }
          }
          case source-interface {
            leaf source-interface {
              type if:interface-ref;
              description
                "Specifies the interface from which the IP address
                 is derived for use as the source for outbound
                 TACACS+ packets.";
            }
          }
        }
        leaf vrf-instance {
          type leafref {
            path "/ni:network-instances/ni:network-instance/ni:name";
          }
          must "(not(../source-interface)) or "
             + "(current() = /if:interfaces/if:interface"
             + "[if:name = current()/../source-interface]"
             + "/ni:bind-ni-name)" {
            error-message
              "VRF instance must match the network instance of the
               source interface.";
          }
          description
            "Specifies the VPN Routing and Forwarding (VRF) instance
             to use to communicate with the TACACS+ server.
             If 'source-interface' is configured, this value MUST 
             match the network instance bound to the source interface
             (via bind-ni-name).";
          reference
            "RFC 8529: YANG Data Model for Network Instances";
        }
        leaf single-connection {
          type boolean;
          default "false";
          description
            "Indicates whether the Single Connection Mode is enabled
             for the server.";
          reference
            "RFC 8907: The TACACS+ Protocol, Section 4.3";
        }
        leaf timeout {
          type uint16 {
            range "1..max";
          }
          units "seconds";
          default "5";
          description
            "The number of seconds that the device will wait for a
             response from each TACACS+ server before trying with a
             different server.";
        }
        uses statistics;
      }
    }
  }

  augment "/sys:system" {
    description
      "Augments the system model with the tacacs-plus data nodes.";
    uses tacacs-plus;
  }
}
<CODE ENDS>
]]></sourcecode>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This section is modeled after the template described in <xref section="3.7" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>.</t>
      <t>The "ietf-ac-common" YANG module defines a data model that is
designed to be accessed via YANG-based management protocols, such as
NETCONF <xref target="RFC6241"/> and RESTCONF <xref target="RFC8040"/>. These YANG-based management protocols (1) have to
use a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref target="RFC8446"/>, and
QUIC <xref target="RFC9000"/>) and (2) have to use mutual authentication.</t>
      <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/>
   provides the means to restrict access for particular NETCONF or
   RESTCONF users to a preconfigured subset of all available NETCONF or
   RESTCONF protocol operations and content.</t>
      <t>There are a number of data nodes defined in this YANG module that are
writable/creatable/deletable (i.e., "config true", which is the
default).  All writable data nodes are likely to be
sensitive or vulnerable in some network environments.  Write
operations (e.g., edit-config) and delete operations to these data
nodes without proper protection or authentication can have a negative
effect on network operations.  The following subtrees and data nodes
have particular sensitivities/vulnerabilities:</t>
      <dl>
        <dt>'server':</dt>
        <dd>
          <t>This list contains the data nodes used
to control the TACACS+ servers used by the device. Unauthorized
access to this list could enable an attacker to assume complete
control over the device by pointing to a compromised TACACS+
server, or to modify the counters to hide attacks against the
device.</t>
        </dd>
        <dt>'shared-secret':</dt>
        <dd>
          <t>This leaf controls the key
known to both the TACACS+ client and server. Unauthorized access
to this leaf could make the device vulnerable to attacks;
therefore, it has been restricted using the "default-deny-all"
access control defined in <xref target="RFC8341"/>.  When setting, it is highly
recommended that the leaf is at least 32 characters long and
sufficiently complex with a mix of different character types,
i.e., upper case, lower case, numeric, and punctuation.</t>
        </dd>
        <dt>'client-identity' and 'server-authentication':</dt>
        <dd>
          <t>Any modification to a key or reference to a key may dramatically alter the implemented security policy. For this reason, the NACM extension "default-deny-write" has been set.</t>
        </dd>
      </dl>
      <t>This YANG module uses groupings from other YANG modules that define nodes that may be considered sensitive or vulnerable in network environments. Refer to <xref section="5.3" sectionFormat="of" target="RFC9642"/> and <xref section="5.3" sectionFormat="of" target="RFC9645"/> for information as to which nodes may be considered sensitive or vulnerable in network environments.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to update the following URI in the "ns" subregistry within
   the "IETF XML Registry" <xref target="RFC3688"/>:</t>
      <artwork><![CDATA[
   URI:  urn:ietf:params:xml:ns:yang:ietf-system-tacacs-plus
   Registrant Contact:  The IESG.
   XML:  N/A; the requested URI is an XML namespace.
]]></artwork>
      <t>IANA is requested to register the following YANG module in the "YANG Module
   Names" registry <xref target="RFC6020"/> within the "YANG Parameters" registry group:</t>
      <artwork><![CDATA[
   Name:  ietf-system-tacacs-plus
   Namespace:  urn:ietf:params:xml:ns:yang:ietf-system-tacacs-plus
   Prefix:  sys-tcs-plus
   Maintained by IANA?  N
   Reference:  RFC XXXX
]]></artwork>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC7317">
          <front>
            <title>A YANG Data Model for System Management</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="August" year="2014"/>
            <abstract>
              <t>This document defines a YANG data model for the configuration and identification of some common system properties within a device containing a Network Configuration Protocol (NETCONF) server. This document also includes data node definitions for system identification, time-of-day management, user management, DNS resolver configuration, and some protocol operations for system management.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7317"/>
          <seriesInfo name="DOI" value="10.17487/RFC7317"/>
        </reference>
        <reference anchor="I-D.ietf-opsawg-tacacs-tls13">
          <front>
            <title>Terminal Access Controller Access-Control System Plus over TLS 1.3 (TACACS+ over TLS)</title>
            <author fullname="Thorsten Dahm" initials="T." surname="Dahm">
         </author>
            <author fullname="John Heasley" initials="J." surname="Heasley">
              <organization>NTT</organization>
            </author>
            <author fullname="dcmgash@cisco.com" initials="" surname="dcmgash@cisco.com">
              <organization>Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Andrej Ota" initials="A." surname="Ota">
              <organization>Google Inc.</organization>
            </author>
            <date day="13" month="April" year="2025"/>
            <abstract>
              <t>   The Terminal Access Controller Access-Control System Plus (TACACS+)
   protocol provides device administration for routers, network access
   servers, and other networked computing devices via one or more
   centralized TACACS+ servers.  This document adds Transport Layer
   Security (TLS 1.3) support to TACACS+ and obsoletes former inferior
   security mechanisms.

   This document updates RFC 8907.


              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-tacacs-tls13-20"/>
        </reference>
        <reference anchor="RFC8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <author fullname="P. Shafer" initials="P." surname="Shafer"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="R. Wilton" initials="R." surname="Wilton"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model. This document updates RFC 7950.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC6066">
          <front>
            <title>Transport Layer Security (TLS) Extensions: Extension Definitions</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <date month="January" year="2011"/>
            <abstract>
              <t>This document provides specifications for existing TLS extensions. It is a companion document for RFC 5246, "The Transport Layer Security (TLS) Protocol Version 1.2". The extensions specified are server_name, max_fragment_length, client_certificate_url, trusted_ca_keys, truncated_hmac, and status_request. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6066"/>
          <seriesInfo name="DOI" value="10.17487/RFC6066"/>
        </reference>
        <reference anchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language. This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC8343">
          <front>
            <title>A YANG Data Model for Interface Management</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document defines a YANG data model for the management of network interfaces. It is expected that interface-type-specific data models augment the generic interfaces data model defined in this document. The data model includes definitions for configuration and system state (status information and counters for the collection of statistics).</t>
              <t>The YANG data model in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
              <t>This document obsoletes RFC 7223.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8343"/>
          <seriesInfo name="DOI" value="10.17487/RFC8343"/>
        </reference>
        <reference anchor="RFC8529">
          <front>
            <title>YANG Data Model for Network Instances</title>
            <author fullname="L. Berger" initials="L." surname="Berger"/>
            <author fullname="C. Hopps" initials="C." surname="Hopps"/>
            <author fullname="A. Lindem" initials="A." surname="Lindem"/>
            <author fullname="D. Bogdanovic" initials="D." surname="Bogdanovic"/>
            <author fullname="X. Liu" initials="X." surname="Liu"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>This document defines a network instance module. This module can be used to manage the virtual resource partitioning that may be present on a network device. Examples of common industry terms for virtual resource partitioning are VPN Routing and Forwarding (VRF) instances and Virtual Switch Instances (VSIs).</t>
              <t>The YANG data model in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8529"/>
          <seriesInfo name="DOI" value="10.17487/RFC8529"/>
        </reference>
        <reference anchor="RFC9640">
          <front>
            <title>YANG Data Types and Groupings for Cryptography</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="October" year="2024"/>
            <abstract>
              <t>This document presents a YANG 1.1 (RFC 7950) module defining identities, typedefs, and groupings useful to cryptographic applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9640"/>
          <seriesInfo name="DOI" value="10.17487/RFC9640"/>
        </reference>
        <reference anchor="RFC9641">
          <front>
            <title>A YANG Data Model for a Truststore</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="October" year="2024"/>
            <abstract>
              <t>This document presents a YANG module for configuring bags of certificates and bags of public keys that can be referenced by other data models for trust. Notifications are sent when certificates are about to expire.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9641"/>
          <seriesInfo name="DOI" value="10.17487/RFC9641"/>
        </reference>
        <reference anchor="RFC9642">
          <front>
            <title>A YANG Data Model for a Keystore</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="October" year="2024"/>
            <abstract>
              <t>This document presents a YANG module called "ietf-keystore" that enables centralized configuration of both symmetric and asymmetric keys. The secret value for both key types may be encrypted or hidden. Asymmetric keys may be associated with certificates. Notifications are sent when certificates are about to expire.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9642"/>
          <seriesInfo name="DOI" value="10.17487/RFC9642"/>
        </reference>
        <reference anchor="RFC9645">
          <front>
            <title>YANG Groupings for TLS Clients and TLS Servers</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="October" year="2024"/>
            <abstract>
              <t>This document presents four YANG 1.1 modules -- three IETF modules and one supporting IANA module.</t>
              <t>The three IETF modules are "ietf-tls-common", "ietf-tls-client", and "ietf-tls-server". The "ietf-tls-client" and "ietf-tls-server" modules are the primary productions of this work, supporting the configuration and monitoring of TLS clients and servers.</t>
              <t>The IANA module is "iana-tls-cipher-suite-algs". This module defines YANG enumerations that provide support for an IANA-maintained algorithm registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9645"/>
          <seriesInfo name="DOI" value="10.17487/RFC9645"/>
        </reference>
        <reference anchor="RFC6520">
          <front>
            <title>Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) Heartbeat Extension</title>
            <author fullname="R. Seggelmann" initials="R." surname="Seggelmann"/>
            <author fullname="M. Tuexen" initials="M." surname="Tuexen"/>
            <author fullname="M. Williams" initials="M." surname="Williams"/>
            <date month="February" year="2012"/>
            <abstract>
              <t>This document describes the Heartbeat Extension for the Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) protocols.</t>
              <t>The Heartbeat Extension provides a new protocol for TLS/DTLS allowing the usage of keep-alive functionality without performing a renegotiation and a basis for path MTU (PMTU) discovery for DTLS. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6520"/>
          <seriesInfo name="DOI" value="10.17487/RFC6520"/>
        </reference>
        <reference anchor="RFC9257">
          <front>
            <title>Guidance for External Pre-Shared Key (PSK) Usage in TLS</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="J. Hoyland" initials="J." surname="Hoyland"/>
            <author fullname="M. Sethi" initials="M." surname="Sethi"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>This document provides usage guidance for external Pre-Shared Keys (PSKs) in Transport Layer Security (TLS) 1.3 as defined in RFC 8446. It lists TLS security properties provided by PSKs under certain assumptions, then it demonstrates how violations of these assumptions lead to attacks. Advice for applications to help meet these assumptions is provided. This document also discusses PSK use cases and provisioning processes. Finally, it lists the privacy and security properties that are not provided by TLS 1.3 when external PSKs are used.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9257"/>
          <seriesInfo name="DOI" value="10.17487/RFC9257"/>
        </reference>
        <reference anchor="RFC9258">
          <front>
            <title>Importing External Pre-Shared Keys (PSKs) for TLS 1.3</title>
            <author fullname="D. Benjamin" initials="D." surname="Benjamin"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>This document describes an interface for importing external Pre-Shared Keys (PSKs) into TLS 1.3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9258"/>
          <seriesInfo name="DOI" value="10.17487/RFC9258"/>
        </reference>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9105">
          <front>
            <title>A YANG Data Model for Terminal Access Controller Access-Control System Plus (TACACS+)</title>
            <author fullname="B. Wu" initials="B." role="editor" surname="Wu"/>
            <author fullname="G. Zheng" initials="G." surname="Zheng"/>
            <author fullname="M. Wang" initials="M." role="editor" surname="Wang"/>
            <date month="August" year="2021"/>
            <abstract>
              <t>This document defines a Terminal Access Controller Access-Control System Plus (TACACS+) client YANG module that augments the System Management data model, defined in RFC 7317, to allow devices to make use of TACACS+ servers for centralized Authentication, Authorization, and Accounting (AAA). Though being a standard module, this module does not endorse the security mechanisms of the TACACS+ protocol (RFC 8907), and TACACS+ be used within a secure deployment.</t>
              <t>The YANG module in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9105"/>
          <seriesInfo name="DOI" value="10.17487/RFC9105"/>
        </reference>
        <reference anchor="RFC2865">
          <front>
            <title>Remote Authentication Dial In User Service (RADIUS)</title>
            <author fullname="C. Rigney" initials="C." surname="Rigney"/>
            <author fullname="S. Willens" initials="S." surname="Willens"/>
            <author fullname="A. Rubens" initials="A." surname="Rubens"/>
            <author fullname="W. Simpson" initials="W." surname="Simpson"/>
            <date month="June" year="2000"/>
            <abstract>
              <t>This document describes a protocol for carrying authentication, authorization, and configuration information between a Network Access Server which desires to authenticate its links and a shared Authentication Server. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2865"/>
          <seriesInfo name="DOI" value="10.17487/RFC2865"/>
        </reference>
        <reference anchor="RFC8907">
          <front>
            <title>The Terminal Access Controller Access-Control System Plus (TACACS+) Protocol</title>
            <author fullname="T. Dahm" initials="T." surname="Dahm"/>
            <author fullname="A. Ota" initials="A." surname="Ota"/>
            <author fullname="D.C. Medway Gash" initials="D.C." surname="Medway Gash"/>
            <author fullname="D. Carrel" initials="D." surname="Carrel"/>
            <author fullname="L. Grant" initials="L." surname="Grant"/>
            <date month="September" year="2020"/>
            <abstract>
              <t>This document describes the Terminal Access Controller Access-Control System Plus (TACACS+) protocol, which is widely deployed today to provide Device Administration for routers, network access servers, and other networked computing devices via one or more centralized servers.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8907"/>
          <seriesInfo name="DOI" value="10.17487/RFC8907"/>
        </reference>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams. The purpose of this document is to provide a single location for this definition. This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="I-D.ietf-netmod-rfc8407bis">
          <front>
            <title>Guidelines for Authors and Reviewers of Documents Containing YANG Data Models</title>
            <author fullname="Andy Bierman" initials="A." surname="Bierman">
              <organization>YumaWorks</organization>
            </author>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <date day="18" month="April" year="2025"/>
            <abstract>
              <t>   This memo provides guidelines for authors and reviewers of
   specifications containing YANG modules, including IANA-maintained
   modules.  Recommendations and procedures are defined, which are
   intended to increase interoperability and usability of Network
   Configuration Protocol (NETCONF) and RESTCONF Protocol
   implementations that utilize YANG modules.  This document obsoletes
   RFC 8407.

   Also, this document updates RFC 8126 by providing additional
   guidelines for writing the IANA considerations for RFCs that specify
   IANA-maintained modules.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-rfc8407bis-24"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC4252">
          <front>
            <title>The Secure Shell (SSH) Authentication Protocol</title>
            <author fullname="T. Ylonen" initials="T." surname="Ylonen"/>
            <author fullname="C. Lonvick" initials="C." role="editor" surname="Lonvick"/>
            <date month="January" year="2006"/>
            <abstract>
              <t>The Secure Shell Protocol (SSH) is a protocol for secure remote login and other secure network services over an insecure network. This document describes the SSH authentication protocol framework and public key, password, and host-based client authentication methods. Additional authentication methods are described in separate documents. The SSH authentication protocol runs on top of the SSH transport layer protocol and provides a single authenticated tunnel for the SSH connection protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4252"/>
          <seriesInfo name="DOI" value="10.17487/RFC4252"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
      </references>
    </references>
    <?line 1227?>

<section anchor="example-tacacs-authentication-configuration-with-shared-secret">
      <name>Example TACACS+ Authentication Configuration with Shared Secret</name>
      <t><xref target="ex9105"/> shows an example where a TACACS+ authentication server instance is configured using shared secret for authentication. This mode is not recommended per <xref target="I-D.ietf-opsawg-tacacs-tls13"/>.</t>
      <figure anchor="ex9105">
        <name>Example with Shared Secret</name>
        <sourcecode type="json"><![CDATA[
{
  "ietf-system:system": {
    "authentication": {
      "user-authentication-order": [
        "ietf-system-tacacs-plus:tacacs-plus",
        "ietf-system:local-users"
      ]
    },
    "ietf-system-tacacs-plus:tacacs-plus": {
      "server": [
        {
          "name": "tac_plus1",
          "server-type": "authentication",
          "address": "192.0.2.2",
          "shared-secret": "QaEfThUkO198010075460923+h3TbE8n",
          "source-ip": "192.0.2.12",
          "timeout": 10
        }
      ]
    }
  }
}
]]></sourcecode>
      </figure>
      <t><xref target="ex9105-vrf"/> provides an example to associate a TACACS+ server with a VRF.</t>
      <figure anchor="ex9105-vrf">
        <name>Example with VRF</name>
        <sourcecode type="json"><![CDATA[
{
  "ietf-network-instance:network-instances": {
    "network-instance": [
      {
        "name": "MANAGEMENT_VRF",
        "description": "Management VRF for TACACS+ traffic isolation"
      }
    ]
  },
  "ietf-system:system": {
    "authentication": {
      "user-authentication-order": [
        "ietf-system-tacacs-plus:tacacs-plus",
        "ietf-system:local-users"
      ]
    },
    "ietf-system-tacacs-plus:tacacs-plus": {
      "server": [
        {
          "name": "tac_plus1",
          "server-type": "authentication",
          "address": "192.0.2.2",
          "shared-secret": "QaEfThUkO198010075460923+h3TbE8n",
          "source-ip": "192.0.2.12",
          "vrf-instance": "MANAGEMENT_VRF",
          "timeout": 10
        }
      ]
    }
  }
}
]]></sourcecode>
      </figure>
    </section>
    <section anchor="tacacstls-examples">
      <name>TACACS+TLS Examples</name>
      <t>This section provides examples to illustrate the configuration of TACACS+TLS clients.</t>
      <t>These examples follow the convention used in <xref section="1.5" sectionFormat="of" target="RFC9645"/> for binary data that has been base64 encoded.</t>
      <section anchor="example-tacacs-authentication-configuration-with-explicit-certificate-definitions">
        <name>Example TACACS+ Authentication Configuration with Explicit Certificate Definitions</name>
        <t><xref target="exin"/> shows a configuration example with 'inline-definition' for the client identity and server authentication.</t>
        <figure anchor="exin">
          <name>Example with TACACS+TLS with Inline Certificate Definitions</name>
          <sourcecode type="json"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "ietf-system:system": {
    "authentication": {
      "user-authentication-order": [
        "ietf-system-tacacs-plus:tacacs-plus",
        "ietf-system:local-users"
      ]
    },
    "ietf-system-tacacs-plus:tacacs-plus": {
      "server": [
        {
          "name": "instance-1",
          "server-type": "authentication",
          "domain-name": "tacacs.example.com",
          "sni-enabled": true,
          "address": "2001:db8::1",
          "port": 1234,
          "client-identity": {
            "certificate": {
              "inline-definition": {
                "public-key-format": "ietf-crypto-types:subject-\
                                             public-key-info-format",
                "public-key": "BASE64VALUE=",
                "private-key-format": "ietf-crypto-types:rsa-private\
                                                        -key-format",
                "cleartext-private-key": "BASE64VALUE=",
                "cert-data": "BASE64VALUE="
              }
            }
          },
          "server-authentication": {
            "ca-certs": {
              "inline-definition": {
                "certificate": [
                  {
                    "name": "CA-Certificate-1",
                    "cert-data": "BASE64VALUE="
                  }
                ]
              }
            }
          },
          "hello-params": {
            "tls-versions": {
              "min": "ietf-tls-common:tls13",
              "max": "ietf-tls-common:tls13"
            },
            "cipher-suites": {
              "cipher-suite": [
                "TLS_AES_128_GCM_SHA256"
              ]
            }
          },
          "single-connection": false,
          "timeout": 10
        }
      ]
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="example-tacacs-authentication-configuration-with-certificate-references">
        <name>Example TACACS+ Authentication Configuration with Certificate References</name>
        <t><xref target="ex-ref"/> shows a configuration example with credential references for multiple service instances: four server instances are configured with all using the same credentials. These instances form a redundancy group for both IPv4 and IPv6.</t>
        <figure anchor="ex-ref">
          <name>Example with TACACS+TLS with References</name>
          <sourcecode type="json"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "ietf-system:system": {
    "ietf-system-tacacs-plus:tacacs-plus": {
      "client-credentials": [
        {
          "id": "client-cred-1",
          "certificate": {
            "inline-definition": {
              "public-key-format": "ietf-crypto-types:subject-public\
                                                   -key-info-format",
              "public-key": "BASE64VALUE=",
              "private-key-format": "ietf-crypto-types:rsa-private-\
                                                         key-format",
              "cleartext-private-key": "BASE64VALUE=",
              "cert-data": "BASE64VALUE="
            }
          }
        }
      ],
      "server-credentials": [
        {
          "id": "server-cred-1",
          "ca-certs": {
            "inline-definition": {
              "certificate": [
                {
                  "name": "CA-Certificate-1",
                  "cert-data": "BASE64VALUE="
                }
              ]
            }
          }
        }
      ],
      "server": [
        {
          "name": "primary-v6",
          "server-type": "authentication",
          "domain-name": "tacacs.example.com",
          "sni-enabled": true,
          "address": "2001:db8::1",
          "port": 1234,
          "client-identity": {
            "credentials-reference": "client-cred-1"
          },
          "server-authentication": {
            "credentials-reference": "server-cred-1"
          }
        },
        {
          "name": "backup-v6",
          "server-type": "authentication",
          "domain-name": "tacacs.example.com",
          "sni-enabled": true,
          "address": "2001:db8::2",
          "port": 1234,
          "client-identity": {
            "credentials-reference": "client-cred-1"
          },
          "server-authentication": {
            "credentials-reference": "server-cred-1"
          }
        },
        {
          "name": "primary-v4",
          "server-type": "authentication",
          "domain-name": "tacacs.example.com",
          "sni-enabled": true,
          "address": "192.0.2.1",
          "port": 49,
          "client-identity": {
            "credentials-reference": "client-cred-1"
          },
          "server-authentication": {
            "credentials-reference": "server-cred-1"
          }
        },
        {
          "name": "backup-v4",
          "server-type": "authentication",
          "domain-name": "tacacs.example.com",
          "sni-enabled": true,
          "address": "192.0.2.2",
          "port": 49,
          "client-identity": {
            "credentials-reference": "client-cred-1"
          },
          "server-authentication": {
            "credentials-reference": "server-cred-1"
          }
        }
      ]
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="sec-full">
      <name>Full Tree</name>
      <t>The full tree structure is shown below:</t>
      <artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

module: ietf-system-tacacs-plus

  augment /sys:system:
    +--rw tacacs-plus
       +--rw client-credentials* [id] {credential-reference}?
       |  +--rw id                       string
       |  +--rw (auth-type)?
       |     +--:(certificate)
       |     |  +--rw certificate
       |     |     +--rw (inline-or-keystore)
       |     |        +--:(inline) {inline-definitions-supported}?
       |     |        |  +--rw inline-definition
       |     |        |     +--rw public-key-format?
       |     |        |     |       identityref
       |     |        |     +--rw public-key?
       |     |        |     |       binary
       |     |        |     +--rw private-key-format?
       |     |        |     |       identityref
       |     |        |     +--rw (private-key-type)
       |     |        |     |  +--:(cleartext-private-key)
       |     |        |     |  |        {cleartext-private-keys}?
       |     |        |     |  |  +--rw cleartext-private-key?
       |     |        |     |  |          binary
       |     |        |     |  +--:(hidden-private-key)
       |     |        |     |  |        {hidden-private-keys}?
       |     |        |     |  |  +--rw hidden-private-key?
       |     |        |     |  |          empty
       |     |        |     |  +--:(encrypted-private-key)
       |     |        |     |           {encrypted-private-keys}?
       |     |        |     |     +--rw encrypted-private-key
       |     |        |     |        +--rw encrypted-by
       |     |        |     |        +--rw encrypted-value-format
       |     |        |     |        |       identityref
       |     |        |     |        +--rw encrypted-value
       |     |        |     |                binary
       |     |        |     +--rw cert-data?
       |     |        |     |       end-entity-cert-cms
       |     |        |     +---n certificate-expiration
       |     |        |     |       {certificate-expiration-\
                                                       notification}?
       |     |        |     |  +-- expiration-date
       |     |        |     |          yang:date-and-time
       |     |        |     +---x generate-csr {csr-generation}?
       |     |        |        +---w input
       |     |        |        |  +---w csr-format    identityref
       |     |        |        |  +---w csr-info      csr-info
       |     |        |        +--ro output
       |     |        |           +--ro (csr-type)
       |     |        |              +--:(p10-csr)
       |     |        |                 +--ro p10-csr?   p10-csr
       |     |        +--:(central-keystore)
       |     |                 {central-keystore-supported,\
                                                    asymmetric-keys}?
       |     |           +--rw central-keystore-reference
       |     |              +--rw asymmetric-key?
       |     |              |       ks:central-asymmetric-key-ref
       |     |              |       {central-keystore-supported,\
                                                    asymmetric-keys}?
       |     |              +--rw certificate?      leafref
       |     +--:(raw-public-key) {tlsc:client-ident-raw-public-key}?
       |     |  +--rw raw-private-key
       |     |     +--rw (inline-or-keystore)
       |     |        +--:(inline) {inline-definitions-supported}?
       |     |        |  +--rw inline-definition
       |     |        |     +--rw public-key-format?
       |     |        |     |       identityref
       |     |        |     +--rw public-key?
       |     |        |     |       binary
       |     |        |     +--rw private-key-format?
       |     |        |     |       identityref
       |     |        |     +--rw (private-key-type)
       |     |        |        +--:(cleartext-private-key)
       |     |        |        |        {cleartext-private-keys}?
       |     |        |        |  +--rw cleartext-private-key?
       |     |        |        |          binary
       |     |        |        +--:(hidden-private-key)
       |     |        |        |        {hidden-private-keys}?
       |     |        |        |  +--rw hidden-private-key?
       |     |        |        |          empty
       |     |        |        +--:(encrypted-private-key)
       |     |        |                 {encrypted-private-keys}?
       |     |        |           +--rw encrypted-private-key
       |     |        |              +--rw encrypted-by
       |     |        |              +--rw encrypted-value-format
       |     |        |              |       identityref
       |     |        |              +--rw encrypted-value
       |     |        |                      binary
       |     |        +--:(central-keystore)
       |     |                 {central-keystore-supported,\
                                                    asymmetric-keys}?
       |     |           +--rw central-keystore-reference?
       |     |                   ks:central-asymmetric-key-ref
       |     +--:(tls13-epsk) {tlsc:client-ident-tls13-epsk}?
       |        +--rw tls13-epsk
       |           +--rw (inline-or-keystore)
       |           |  +--:(inline) {inline-definitions-supported}?
       |           |  |  +--rw inline-definition
       |           |  |     +--rw key-format?
       |           |  |     |       identityref
       |           |  |     +--rw (key-type)
       |           |  |        +--:(cleartext-symmetric-key)
       |           |  |        |  +--rw cleartext-symmetric-key?
       |           |  |        |          binary
       |           |  |        |          {cleartext-symmetric-keys}?
       |           |  |        +--:(hidden-symmetric-key)
       |           |  |        |        {hidden-symmetric-keys}?
       |           |  |        |  +--rw hidden-symmetric-key?
       |           |  |        |          empty
       |           |  |        +--:(encrypted-symmetric-key)
       |           |  |                 {encrypted-symmetric-keys}?
       |           |  |           +--rw encrypted-symmetric-key
       |           |  |              +--rw encrypted-by
       |           |  |              +--rw encrypted-value-format
       |           |  |              |       identityref
       |           |  |              +--rw encrypted-value
       |           |  |                      binary
       |           |  +--:(central-keystore)
       |           |           {central-keystore-supported,symmetric\
                                                              -keys}?
       |           |     +--rw central-keystore-reference?
       |           |             ks:central-symmetric-key-ref
       |           +--rw external-identity                   string
       |           +--rw hash?
       |           |       tlscmn:epsk-supported-hash
       |           +--rw context?                            string
       |           +--rw target-protocol?                    uint16
       |           +--rw target-kdf?                         uint16
       +--rw server-credentials* [id] {credential-reference}?
       |  +--rw id                 string
       |  +--rw ca-certs!
       |  |  +--rw (inline-or-truststore)
       |  |     +--:(inline) {inline-definitions-supported}?
       |  |     |  +--rw inline-definition
       |  |     |     +--rw certificate* [name]
       |  |     |        +--rw name                      string
       |  |     |        +--rw cert-data
       |  |     |        |       trust-anchor-cert-cms
       |  |     |        +---n certificate-expiration
       |  |     |                {certificate-expiration-\
                                                       notification}?
       |  |     |           +-- expiration-date    yang:date-and-time
       |  |     +--:(central-truststore)
       |  |              {central-truststore-supported,certificates}?
       |  |        +--rw central-truststore-reference?
       |  |                ts:central-certificate-bag-ref
       |  +--rw ee-certs!
       |  |  +--rw (inline-or-truststore)
       |  |     +--:(inline) {inline-definitions-supported}?
       |  |     |  +--rw inline-definition
       |  |     |     +--rw certificate* [name]
       |  |     |        +--rw name                      string
       |  |     |        +--rw cert-data
       |  |     |        |       trust-anchor-cert-cms
       |  |     |        +---n certificate-expiration
       |  |     |                {certificate-expiration-\
                                                       notification}?
       |  |     |           +-- expiration-date    yang:date-and-time
       |  |     +--:(central-truststore)
       |  |              {central-truststore-supported,certificates}?
       |  |        +--rw central-truststore-reference?
       |  |                ts:central-certificate-bag-ref
       |  +--rw raw-public-keys! {tlsc:server-auth-raw-public-key}?
       |  |  +--rw (inline-or-truststore)
       |  |     +--:(inline) {inline-definitions-supported}?
       |  |     |  +--rw inline-definition
       |  |     |     +--rw public-key* [name]
       |  |     |        +--rw name                 string
       |  |     |        +--rw public-key-format    identityref
       |  |     |        +--rw public-key           binary
       |  |     +--:(central-truststore)
       |  |              {central-truststore-supported,public-keys}?
       |  |        +--rw central-truststore-reference?
       |  |                ts:central-public-key-bag-ref
       |  +--rw tls13-epsks?       empty
       |          {tlsc:server-auth-tls13-epsk}?
       +--rw server* [name]
          +--rw name                           string
          +--rw server-type
          |       tacacs-plus-server-type
          +--rw domain-name?                   inet:domain-name
          +--rw sni-enabled?                   boolean
          +--rw address                        inet:host
          +--rw port?                          inet:port-number
          +--rw (security)
          |  +--:(tls)
          |  |  +--rw client-identity!
          |  |  |  +--rw (ref-or-explicit)?
          |  |  |     +--:(ref)
          |  |  |     |  +--rw credentials-reference?
          |  |  |     |          sys-tcs-plus:client-credentials-ref
          |  |  |     |          {credential-reference}?
          |  |  |     +--:(explicit)
          |  |  |        +--rw (auth-type)?
          |  |  |           +--:(certificate)
          |  |  |           |  +--rw certificate
          |  |  |           |     +--rw (inline-or-keystore)
          |  |  |           |        +--:(inline)
          |  |  |           |        |        {inline-definitions-\
                                                          supported}?
          |  |  |           |        |  +--rw inline-definition
          |  |  |           |        |     +--rw public-key-format?
          |  |  |           |        |     |       identityref
          |  |  |           |        |     +--rw public-key?
          |  |  |           |        |     |       binary
          |  |  |           |        |     +--rw private-key-format?
          |  |  |           |        |     |       identityref
          |  |  |           |        |     +--rw (private-key-type)
          |  |  |           |        |     |  +--:(cleartext-private\
                                                                -key)
          |  |  |           |        |     |  |        {cleartext-\
                                                       private-keys}?
          |  |  |           |        |     |  |  +--rw cleartext-\
                                                         private-key?
          |  |  |           |        |     |  |          binary
          |  |  |           |        |     |  +--:(hidden-private-\
                                                                 key)
          |  |  |           |        |     |  |        {hidden-\
                                                       private-keys}?
          |  |  |           |        |     |  |  +--rw hidden-\
                                                         private-key?
          |  |  |           |        |     |  |          empty
          |  |  |           |        |     |  +--:(encrypted-private\
                                                                -key)
          |  |  |           |        |     |           {encrypted-\
                                                       private-keys}?
          |  |  |           |        |     |     +--rw encrypted-\
                                                          private-key
          |  |  |           |        |     |        +--rw encrypted-\
                                                                   by
          |  |  |           |        |     |        +--rw encrypted-\
                                                         value-format
          |  |  |           |        |     |        |       \
                                                          identityref
          |  |  |           |        |     |        +--rw encrypted-\
                                                                value
          |  |  |           |        |     |                binary
          |  |  |           |        |     +--rw cert-data?
          |  |  |           |        |     |       end-entity-cert-\
                                                                  cms
          |  |  |           |        |     +---n certificate-\
                                                           expiration
          |  |  |           |        |     |       {certificate-\
                                            expiration-notification}?
          |  |  |           |        |     |  +-- expiration-date
          |  |  |           |        |     |          yang:date-and-\
                                                                 time
          |  |  |           |        |     +---x generate-csr
          |  |  |           |        |             {csr-generation}?
          |  |  |           |        |        +---w input
          |  |  |           |        |        |  +---w csr-format
          |  |  |           |        |        |  |       identityref
          |  |  |           |        |        |  +---w csr-info
          |  |  |           |        |        |          csr-info
          |  |  |           |        |        +--ro output
          |  |  |           |        |           +--ro (csr-type)
          |  |  |           |        |              +--:(p10-csr)
          |  |  |           |        |                 +--ro p10-csr?
          |  |  |           |        |                         p10-\
                                                                  csr
          |  |  |           |        +--:(central-keystore)
          |  |  |           |                 {central-keystore-\
                                          supported,asymmetric-keys}?
          |  |  |           |           +--rw central-keystore-\
                                                            reference
          |  |  |           |              +--rw asymmetric-key?
          |  |  |           |              |       ks:central-\
                                                   asymmetric-key-ref
          |  |  |           |              |       {central-keystore\
                                         -supported,asymmetric-keys}?
          |  |  |           |              +--rw certificate?
          |  |  |           |                      leafref
          |  |  |           +--:(raw-public-key)
          |  |  |           |        {tlsc:client-ident-raw-public-\
                                                                key}?
          |  |  |           |  +--rw raw-private-key
          |  |  |           |     +--rw (inline-or-keystore)
          |  |  |           |        +--:(inline)
          |  |  |           |        |        {inline-definitions-\
                                                          supported}?
          |  |  |           |        |  +--rw inline-definition
          |  |  |           |        |     +--rw public-key-format?
          |  |  |           |        |     |       identityref
          |  |  |           |        |     +--rw public-key?
          |  |  |           |        |     |       binary
          |  |  |           |        |     +--rw private-key-format?
          |  |  |           |        |     |       identityref
          |  |  |           |        |     +--rw (private-key-type)
          |  |  |           |        |        +--:(cleartext-private\
                                                                -key)
          |  |  |           |        |        |        {cleartext-\
                                                       private-keys}?
          |  |  |           |        |        |  +--rw cleartext-\
                                                         private-key?
          |  |  |           |        |        |          binary
          |  |  |           |        |        +--:(hidden-private-\
                                                                 key)
          |  |  |           |        |        |        {hidden-\
                                                       private-keys}?
          |  |  |           |        |        |  +--rw hidden-\
                                                         private-key?
          |  |  |           |        |        |          empty
          |  |  |           |        |        +--:(encrypted-private\
                                                                -key)
          |  |  |           |        |                 {encrypted-\
                                                       private-keys}?
          |  |  |           |        |           +--rw encrypted-\
                                                          private-key
          |  |  |           |        |              +--rw encrypted-\
                                                                   by
          |  |  |           |        |              +--rw encrypted-\
                                                         value-format
          |  |  |           |        |              |       \
                                                          identityref
          |  |  |           |        |              +--rw encrypted-\
                                                                value
          |  |  |           |        |                      binary
          |  |  |           |        +--:(central-keystore)
          |  |  |           |                 {central-keystore-\
                                          supported,asymmetric-keys}?
          |  |  |           |           +--rw central-keystore-\
                                                           reference?
          |  |  |           |                   ks:central-\
                                                   asymmetric-key-ref
          |  |  |           +--:(tls13-epsk)
          |  |  |                    {tlsc:client-ident-tls13-epsk}?
          |  |  |              +--rw tls13-epsk
          |  |  |                 +--rw (inline-or-keystore)
          |  |  |                 |  +--:(inline)
          |  |  |                 |  |        {inline-definitions-\
                                                          supported}?
          |  |  |                 |  |  +--rw inline-definition
          |  |  |                 |  |     +--rw key-format?
          |  |  |                 |  |     |       identityref
          |  |  |                 |  |     +--rw (key-type)
          |  |  |                 |  |        +--:(cleartext-\
                                                       symmetric-key)
          |  |  |                 |  |        |  +--rw cleartext-\
                                                       symmetric-key?
          |  |  |                 |  |        |          binary
          |  |  |                 |  |        |          {cleartext-\
                                                     symmetric-keys}?
          |  |  |                 |  |        +--:(hidden-symmetric-\
                                                                 key)
          |  |  |                 |  |        |        {hidden-\
                                                     symmetric-keys}?
          |  |  |                 |  |        |  +--rw hidden-\
                                                       symmetric-key?
          |  |  |                 |  |        |          empty
          |  |  |                 |  |        +--:(encrypted-\
                                                       symmetric-key)
          |  |  |                 |  |                 {encrypted-\
                                                     symmetric-keys}?
          |  |  |                 |  |           +--rw encrypted-\
                                                        symmetric-key
          |  |  |                 |  |              +--rw encrypted-\
                                                                   by
          |  |  |                 |  |              +--rw encrypted-\
                                                         value-format
          |  |  |                 |  |              |       \
                                                          identityref
          |  |  |                 |  |              +--rw encrypted-\
                                                                value
          |  |  |                 |  |                      binary
          |  |  |                 |  +--:(central-keystore)
          |  |  |                 |           {central-keystore-\
                                           supported,symmetric-keys}?
          |  |  |                 |     +--rw central-keystore-\
                                                           reference?
          |  |  |                 |             ks:central-symmetric\
                                                             -key-ref
          |  |  |                 +--rw external-identity
          |  |  |                 |       string
          |  |  |                 +--rw hash?
          |  |  |                 |       tlscmn:epsk-supported-hash
          |  |  |                 +--rw context?
          |  |  |                 |       string
          |  |  |                 +--rw target-protocol?
          |  |  |                 |       uint16
          |  |  |                 +--rw target-kdf?
          |  |  |                         uint16
          |  |  +--rw server-authentication
          |  |  |  +--rw (ref-or-explicit)?
          |  |  |     +--:(ref)
          |  |  |     |  +--rw credentials-reference?
          |  |  |     |          sys-tcs-plus:server-credentials-ref
          |  |  |     |          {credential-reference}?
          |  |  |     +--:(explicit)
          |  |  |        +--rw ca-certs!
          |  |  |        |  +--rw (inline-or-truststore)
          |  |  |        |     +--:(inline)
          |  |  |        |     |        {inline-definitions-\
                                                          supported}?
          |  |  |        |     |  +--rw inline-definition
          |  |  |        |     |     +--rw certificate* [name]
          |  |  |        |     |        +--rw name
          |  |  |        |     |        |       string
          |  |  |        |     |        +--rw cert-data
          |  |  |        |     |        |       trust-anchor-cert-cms
          |  |  |        |     |        +---n certificate-expiration
          |  |  |        |     |                {certificate-\
                                            expiration-notification}?
          |  |  |        |     |           +-- expiration-date
          |  |  |        |     |                   yang:date-and-time
          |  |  |        |     +--:(central-truststore)
          |  |  |        |              {central-truststore-\
                                             supported,certificates}?
          |  |  |        |        +--rw central-truststore-reference?
          |  |  |        |                ts:central-certificate-bag\
                                                                 -ref
          |  |  |        +--rw ee-certs!
          |  |  |        |  +--rw (inline-or-truststore)
          |  |  |        |     +--:(inline)
          |  |  |        |     |        {inline-definitions-\
                                                          supported}?
          |  |  |        |     |  +--rw inline-definition
          |  |  |        |     |     +--rw certificate* [name]
          |  |  |        |     |        +--rw name
          |  |  |        |     |        |       string
          |  |  |        |     |        +--rw cert-data
          |  |  |        |     |        |       trust-anchor-cert-cms
          |  |  |        |     |        +---n certificate-expiration
          |  |  |        |     |                {certificate-\
                                            expiration-notification}?
          |  |  |        |     |           +-- expiration-date
          |  |  |        |     |                   yang:date-and-time
          |  |  |        |     +--:(central-truststore)
          |  |  |        |              {central-truststore-\
                                             supported,certificates}?
          |  |  |        |        +--rw central-truststore-reference?
          |  |  |        |                ts:central-certificate-bag\
                                                                 -ref
          |  |  |        +--rw raw-public-keys!
          |  |  |        |       {tlsc:server-auth-raw-public-key}?
          |  |  |        |  +--rw (inline-or-truststore)
          |  |  |        |     +--:(inline)
          |  |  |        |     |        {inline-definitions-\
                                                          supported}?
          |  |  |        |     |  +--rw inline-definition
          |  |  |        |     |     +--rw public-key* [name]
          |  |  |        |     |        +--rw name
          |  |  |        |     |        |       string
          |  |  |        |     |        +--rw public-key-format
          |  |  |        |     |        |       identityref
          |  |  |        |     |        +--rw public-key
          |  |  |        |     |                binary
          |  |  |        |     +--:(central-truststore)
          |  |  |        |              {central-truststore-\
                                              supported,public-keys}?
          |  |  |        |        +--rw central-truststore-reference?
          |  |  |        |                ts:central-public-key-bag-\
                                                                  ref
          |  |  |        +--rw tls13-epsks?             empty
          |  |  |                {tlsc:server-auth-tls13-epsk}?
          |  |  +--rw hello-params {tlscmn:hello-params}?
          |  |     +--rw tls-versions
          |  |     |  +--rw min?   identityref
          |  |     |  +--rw max?   identityref
          |  |     +--rw cipher-suites
          |  |        +--rw cipher-suite*
          |  |                tlscsa:tls-cipher-suite-algorithm
          |  +--:(obfuscation)
          |     +--rw shared-secret?           string
          +--rw (source-type)?
          |  +--:(source-ip)
          |  |  +--rw source-ip?               inet:ip-address
          |  +--:(source-interface)
          |     +--rw source-interface?        if:interface-ref
          +--rw vrf-instance?
          |       -> /ni:network-instances/network-instance/name
          +--rw single-connection?             boolean
          +--rw timeout?                       uint16
          +--ro statistics
             +--ro discontinuity-time?    yang:date-and-time
             +--ro connection-opens?      yang:counter64
             +--ro connection-closes?     yang:counter64
             +--ro connection-aborts?     yang:counter64
             +--ro connection-failures?   yang:counter64
             +--ro connection-timeouts?   yang:counter64
             +--ro messages-sent?         yang:counter64
             +--ro messages-received?     yang:counter64
             +--ro errors-received?       yang:counter64
             +--ro sessions?              yang:counter64
             +--ro cert-errors?           yang:counter64
             +--ro rpk-errors?            yang:counter64
                     {tlsc:server-auth-raw-public-key}?
]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The document leverages data structures defined in <xref target="RFC9645"/>.</t>
      <t>Thanks to Joe Clarke and Tom Petch for the review and comments.</t>
      <t>Thanks to Reshad Rahman for the yangdoctors review and Tina Tsou for
the opsdir review.</t>
      <t>Thanks Mahesh Jethanandani for the AD review.</t>
      <dl>
        <dt>Authors of RFC 9105:</dt>
        <dd>
          <t>Bo Wu</t>
        </dd>
        <dt/>
        <dd>
          <t>Guangying Zheng</t>
        </dd>
        <dt/>
        <dd>
          <t>Michael Wang</t>
        </dd>
        <dt>Acknowledgments from RFC 9105:</dt>
        <dd>
          <t>The authors wish to thank Alex Campbell, John Heasley, Ebben Aries,
 Alan DeKok, Joe Clarke, Tom Petch, Robert Wilton, and many others for
 their helpful comments and suggestions.</t>
        </dd>
      </dl>
    </section>
  </back>
  <!-- ##markdown-source:
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
pqSOH8kXLP2HqZU4gX11FVhgUfGcCA2Vmb3OtKuh/gitSrdxOgRWtJWYrFjm
2vRk1c5nGxjyZ2D92gSFjdq21741mq3fNX1vXa/fU22JQniL9bYuMO4EWxcX
PUE0QhtjEt4cbI+J69i/BUlCW6rtEZHP+mwqh9fZ2b394LJbDa5A5wOP7G2x
uKthtTTOltXD++gfZtKqx9gl+TBDy/xdh9uQJBAc0B6RO8ZFPcMPjktoD2kt
XOQft6HHhmvmOxwba39rLVzks6ka4kc+r9O8Gwh9F1xqePhadsPx+d0KCd9h
2AYJ+fN6czwM71/Yb9gSj4ZY7XV6wlzn4x0Mrem/bIOLHwy+pqlET238eEsg
gXDyljX/8KPL14cg/95QaLlomEHp7evLZ0MIoSj3llVVbT/ovT0EVhMDvxYE
hYkMid8UinwQzp0IzLbzojnqobmuevwgiHX6oJ25tRF3K/GoCYC4HSlDl/Ss
JEfjGYA2AORPIyBjo27URxGug4U3tGvgEt3FyLLQ0YI1+ZMe5yBCsGroXEK7
tpoPL9x+SlubWHWoNJ6GaMD/k+fyk+eSP/++nkv2EXkuzT8+rOeSGRPkg3ou
mfV1fTZlH43n0vzjA3oumTGyH85zyayva3su2UfkuTSfD+u55M9H4Ll8J7io
Zz3P5bvAZVPPpff+A3gu1fMReC69Zx35/smCrX1WBnv4aMjnPVuf7pG2xsLq
aXnurQ5I3TG4hkY3tJTU+9aWkvledPYDWUrm+00sJacntYf12lSWn9rKvGDb
/lG+NnWZZx9sTPzwobGWSPxxh+r4Gk6qICLyaSGuG+vf3sZZS+z6uISPL74P
48DHRU/426nltyTJH3dlHNwVk602DvzqjnHwYWasem5vFdxyTNldanvBU6ft
EblTXIxnhVXwHnBpbRXU4SJ/vg+roA6HD2EV1OEin3WWmQ2sAvVePbezCljg
JPBa85Z9UKvAREM+oUPCt+SMVuYBf2qOHK/RC+8oRHNT1snkFuBXH1Re2aQ8
t/zuOuWeal6jJfugctuW8OxzO3uuqRHr0IqdxjkE/KM+S+Ef7v7wZym8U+B+
wT8C9m/gCFewImtr+zqd/iBWrzPma9i7JvYrD9Ou7Lw+3tW6SluhEGzJO4Xb
urnGQ7ltWl95RnclEPm833g7H4m1gu1q+sCajvnWQVl1tLKunnpCJy3XnGur
zgw34LDGQc2VPWk6UXwHVkazvvJl+PB/EOlP8vSTPA0190mequeTPP0kTwM5
H1bj3j4pRBDGJ9G8rmiuT1qxsu/vWzJ7kXprN9vKwbai7bXl2CoP2McjuNiK
FB0NOLwzweUk8LgLd3MLwRXICcKflhsa7RKFqPrCc2VcXswhzOZ982Wgpomx
uts4VEq1Mkvn2KWmqWAVj9+2KC6G37zXOFQsWPKLmpLyQUKUcZ+uWDaqRXF2
nhdpNZ3Z9Wki5cPJsuSKizODFArlNMZ7wcpkVCRWdpGa1CvbZb4sRkkwcwW1
Kb6ni7p0IqqAm8uEEpiki0gkSGmAPa+SYhKPXLHA3CZkOdVSOumrl87KzWte
FJNI3jD8xIMOy/23bG+e9gHTy7x4o4qWe+6bvXDKGPeGaZsGdSljxJXTdclf
PLcjP9gDiFRpWaWj0pYW/Os4LdFhm86XeNwRWyDwjbqmqqw7EOWLZC6lA1Ue
5Usk8cP7KyqOsrxMRM21KsZDEM6bVJzEabYseJtrVRT0b1lxBswbnyeYfGhu
jNkaFYtklKQXMq3Q6opJUeSFW61NRRgAEpUOZ7UgDtp1vNkna1UsFm8C9Ror
yqeFUmxcF9j5nA1Gb+b5ZZaM6Tq/snPd55mRkvE3XbrXvSuuIhznoyXd+Jcl
ABuHgKHpqy8mhN+oViZjEFLs+vqz18+OHj+8/+DmpocA4vmbklU5+488YUdZ
XLxJ6Nbxs3zGXiXVaEo3kuOd5kVykSaX9HGUzwgpC8DrBMTxmL2Op7N4rmoh
bQBD0CNKE8IZKFTsDEQdFuxgwXxRjtNClNGAn8dTgMv+I6ngd4xXpacK9uCp
Lo73yGMb+YTuT3x8sP+g3+mz73L26xL+/X4JeFzhDYv/NU1gZeiz5+loGicZ
+xU+QHWb2mxSQP9NQEjpWLRxmQJG0GNE6Q0bZMlbdhTPFkNY5neBjtM5+yGJ
yyy52mXHw2EyZ4MiTUq6FnOQAW2eJj/mb3YNiu9qcu+y1zmMcsV+TbMqn+8S
tYCgVyyHLhd0cTwCgh9ALdAsFpNlpgaESpfLc2ACsmN6nf8P0LCqCzpCAQA=

-->

</rfc>
