<?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.27 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-opsawg-secure-tacacs-yang-08" 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-08"/>
    <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="April" day="08"/>
    <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.</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 configuration 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).

     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";
    nacm:default-deny-write;
    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.";
    nacm:default-deny-write;
    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 a server credentials.";
        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";
    nacm:default-deny-write;
    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 present
           when establishing a connection to 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 port number.
             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.";
              reference
                "RFC 8907: The TACACS+ Protocol";
              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 (TACACS+) over TLS 1.3</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="3" 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 RFC8907.


              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-tacacs-tls13-19"/>
        </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="14" month="January" 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.  The document also updates RFC 6020 by
   clarifying how modules and their revisions are handled by IANA.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-rfc8407bis-22"/>
        </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 1222?>

<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.</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.</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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
I0ZGR6/z/wEoktvuiEABAA==

-->

</rfc>
