<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE rfc [
 <!ENTITY nbsp    "&#160;">
 <!ENTITY zwsp   "&#8203;">
 <!ENTITY nbhy   "&#8209;">
 <!ENTITY wj     "&#8288;">
]> 

<rfc docName="draft-ietf-opsawg-tacacs-tls13-24" number="9887" category="std" ipr="trust200902" submissionType='IETF' consensus="true" updates="8907" obsoletes="" xmlns:xi="http://www.w3.org/2001/XInclude" version="3" sortRefs="true" symRefs="true" tocInclude="true" tocDepth="3" xml:lang="en">

    <front>
      <title abbrev="TACACS+ over TLS 1.3">Terminal Access Controller
      Access-Control System Plus (TACACS+) over&nbsp;TLS&nbsp;1.3</title>
      <seriesInfo name="RFC" value="9887"/>
      <author fullname="Thorsten Dahm" initials="T." surname="Dahm">
        <address>
          <email>thorsten.dahm@gmail.com</email>
        </address>
      </author>

      <author fullname="John Heasley" initials="J." surname="Heasley">
        <organization abbrev="NTT">NTT</organization>
        <address>
          <email>heas@shrubbery.net</email>
        </address>
      </author>

      <author initials="D.C." surname="Medway Gash" fullname="Douglas C. Medway Gash">
        <organization>Cisco Systems, Inc.</organization>
        <address>
          <postal>
            <street>170 West Tasman Dr.</street>
            <city>San Jose</city>
            <region>CA</region>
            <code>95134</code>
            <country>United States of America</country>
          </postal>
          <email>dcmgash@cisco.com</email>
        </address>
      </author>

      <author initials="A." surname="Ota" fullname="Andrej Ota">
        <organization>Google Inc.</organization>
        <address>
          <postal>
            <street>1600 Amphitheatre Parkway</street>
            <city>Mountain View</city>
            <region>CA</region>
            <code>94043</code>
            <country>United States of America</country>
          </postal>
          <email>andrej@ota.si</email>
        </address>
      </author>

      <date month="December" year="2025"/>
      <area>OPS</area>
      <workgroup>opsawg</workgroup>

      <keyword>TACACS+</keyword>

      <abstract>
        <t> This document specifies the use of Transport Layer Security (TLS)
        version 1.3 to secure the communication channel between a Terminal
        Access Controller Access-Control System Plus (TACACS+) client and
        server. TACACS+ is a protocol used for Authentication, Authorization,
        and Accounting (AAA) in networked environments. The original TACACS+
        protocol does not mandate the use of encryption or secure
        transport. This specification defines a profile for using TLS 1.3 with
        TACACS+, including guidance on authentication, connection
        establishment, and operational considerations. The goal is to enhance
        the confidentiality, integrity, and authenticity of TACACS+ traffic,
        aligning the protocol with modern security best practices.</t>
        <t>This document updates RFC 8907.</t>
        </abstract>

    </front>

    <middle>
        <section>
	  <name>Introduction</name>
            <t>
                "The Terminal Access Controller Access-Control System Plus (TACACS+) Protocol" 
            <xref target="RFC8907"/> provides device administration for routers, network access servers, and other networked computing
                devices via one or more centralized TACACS+ servers.
                The protocol provides authentication, authorization, and accounting services (AAA) for TACACS+ clients
                within the device administration use case.
            </t>
<t>
   The content of the protocol is highly sensitive and requires 
   secure transport to safeguard a deployment.  However, TACACS+ lacks
   effective confidentiality, integrity, and authentication of the
   connection and network traffic between the TACACS+ server and client. 
   The security mechanisms as described in <xref target="RFC8907" section="4.5" sectionFormat="of"/> are 
   extremely weak.
</t>

            <t>
                To address these deficiencies, this document updates the TACACS+ protocol to use
                TLS 1.3
            authentication and encryption <xref target="RFC8446" />, and obsoletes the use of TACACS+ obfuscation mechanisms. The maturity of TLS in version 1.3 and above makes it a suitable choice for the TACACS+ protocol.
            </t>
        </section>

        <section anchor="TLSTacacsServerDefinition">
	  <name>Technical Definitions</name>
            <t>
                The terms defined in 
                <xref target="RFC8907" section="3"/>
                are fully applicable here and will not be repeated.
                The following terms are also used in this document.
            </t>
<dl>
<dt>Obfuscation:</dt> <dd>TACACS+ was originally intended to incorporate a mechanism for securing the body of its packets.
                    The algorithm is categorized as obfuscation in <xref target="RFC8907" section="10.5.2"/>. The term
                    is used to ensure that the algorithm is not mistaken for encryption. It should not be considered secure.</dd>


                <dt>Non-TLS connection:</dt> <dd>This term refers to the connection defined in <xref target="RFC8907"/>.
                    It is a connection without TLS, using the unsecure TACACS+
                    authentication and obfuscation (or the unobfuscated option for testing).
                    The use of well-known TCP/IP host port number 49 is specified as the default for non-TLS
                    connections.</dd>
                <dt>
                    TLS connection:</dt> <dd>A TLS connection is a TCP/IP connection with TLS authentication and encryption used by TACACS+ for
                    transport. A TLS connection for TACACS+ is always between one TACACS+ client and one TACACS+ server.
                </dd>
                <dt>
                    TLS TACACS+ server:</dt> <dd>This document describes a variant of the TACACS+ server, introduced in <xref section="3.2" target="RFC8907"/>,  which
                    utilizes TLS for transport, and makes some associated protocol optimizations. Both server variants respond to
                    TACACS+ traffic, but this document specifically defines a TACACS+ server (whether TLS or non-TLS) as being bound to a specific port number
                    on a particular IP address or hostname. This definition is important in the context of the configuration
                    of TACACS+ clients to ensure they direct their traffic to the correct TACACS+ servers.
                </dd>
                <dt>
                    Peer:</dt> <dd>The peer of a TACACS+ client (or server) in the context of a TACACS+ connection, is a TACACS+ server (or
                    client). Together, the ends of a TACACS+ connection are referred to as peers.
                </dd>
</dl>
		<section>
	  <name>Requirements Language</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&nbsp;14 <xref target="RFC2119"/> <xref
    target="RFC8174"/> when, and only when, they appear in all capitals, as
    shown here.
        </t>

		</section>
        </section>

        <section>
	  <name>TACACS+ over TLS</name>
            <t>
                TACACS+ over TLS takes the protocol defined in <xref target="RFC8907"/>, removes the option for                 obfuscation, and specifies that TLS 1.3 be used for transport (<xref target="TLSPort"/> elaborates on TLS version support). A new well-known default host port number is used.
                The next sections provide further details and guidance.
            </t>
            <t>TLS is introduced into TACACS+ to fulfill the following requirements:
            </t>
            <ol>
                <li>Confidentiality and Integrity: The MD5 algorithm underlying the obfuscation mechanism specified in <xref target="RFC8907"/> has been shown
                    to be insecure <xref target="RFC6151"/> when used for encryption. This prevents TACACS+ from being used in a deployment compliant with <xref target="FIPS-140-3"/>. Securing the TACACS+ protocol with TLS is intended to provide confidentiality and
                    integrity without requiring the provision of a secured network.
                </li>
                <li>Peer authentication: The authentication capabilities of TLS replace the shared secrets of obfuscation for mutual authentication.
                </li>
            </ol>
            <t>This document adheres to the recommendations in <xref target="I-D.ietf-uta-require-tls13"/>.</t>
            <section anchor="TLSPort">
	      <name>Separating TLS Connections</name>
                <t>
                    Peers implementing the TACACS+ protocol variant defined in this document <bcp14>MUST</bcp14> apply mutual
                    authentication and encrypt all data exchanged between them. Therefore, when a TCP connection is
                    established for the service, a TLS handshake begins immediately. Options that upgrade an initial non-TLS connection <bcp14>MUST NOT</bcp14> be used; see <xref target="wellknown"/>.
                </t>
                <t>
                    To ensure clear separation between TACACS+ traffic using TLS and that which does not (see <xref target="wellknown"/>), servers supporting
                    TACACS+ over TLS <bcp14>MUST</bcp14> listen on a TCP/IP port distinct from that used by non-TLS TACACS+ servers. It is further <bcp14>RECOMMENDED</bcp14>
                    to deploy the TLS and non-TLS services on separate hosts, as discussed in <xref target="TLSUSE"/>.
                </t>
                <t>
   Given the prevalence of default port usage in existing TACACS+ client
   implementations, this specification assigns the well-known TCP port number
   300 for TACACS+ over TLS (see <xref target="ICTBD"/>).
                </t>

                <t>
                    While the use of the designated port number is strongly encouraged, deployments with specific requirements <bcp14>MAY</bcp14> use alternative TCP port numbers.
                    In such cases, operators must carefully consider the operational implications described in <xref target="wellknown"/>.
                </t>

            </section>
            <section anchor="TLSConn">
	      <name>TLS Connection</name>
                <t>
                    A TACACS+ client initiates a TLS connection by making a TCP connection to a configured TLS TACACS+ server on the
                    TACACS+ TLS port number.
                    Once the TCP connection is established, the client <bcp14>MUST</bcp14> immediately begin the TLS negotiation before
                    sending any TACACS+ protocol data.
                </t>
                <t>
                    A minimum of TLS 1.3 <xref target="RFC8446"/>
                    <bcp14>MUST</bcp14> be used for transport.  It is expected that TACACS+, as described in this document, will
                    work
                    with future versions of TLS. Earlier versions of TLS <bcp14>MUST NOT</bcp14> be used.
                </t>

                <t>
                    Once the TLS connection has been successfully established, the exchange of TACACS+ data <bcp14>MUST</bcp14> proceed in
                    accordance with the procedures defined in <xref target="RFC8907"/>. However, all TACACS+ messages <bcp14>SHALL</bcp14> be transmitted
                    as TLS application data. The TACACS+ obfuscation mechanism defined in <xref target="RFC8907"/> <bcp14>MUST NOT</bcp14> be applied
                    when operating over TLS (<xref target="ObsolescenceOfTACACSObfuscation"/>).</t>

<t>  TLS TACACS+ connections are generally not long-lived.  The connection
  will be closed by either a peer if it encounters an error
  or an inactivity timeout.</t>
<t>For connections not operating in Single Connection Mode (as defined in
<xref target="RFC8907" section="4.3" sectionFormat="of"/>), the TCP session <bcp14>SHALL</bcp14> be closed upon
completion of the associated TACACS+ session.  Connections operating in Single
Connection Mode <bcp14>MAY</bcp14> persist for a longer duration but are typically
subject to timeout and closure after a brief period of inactivity.
Consequently, support for transport-layer keepalive mechanisms is not
required.</t>
<t>Why a connection is closed has no bearing on TLS resumption, unless
closed by a TLS error, in which case it is possible that the ticket has been invalidated.</t>

                <t>
                    TACACS+ clients and servers widely support IPv6 configuration in addition to IPv4. This document makes no changes to recommendations in this area.
                </t>

            </section>
            <section>
	      <name>TLS Authentication Options</name>
                <t>
                    Implementations <bcp14>MUST</bcp14> support certificate-based mutual authentication, to provide a core option for interoperability between deployments.
                    This authentication option is specified in <xref target="CertAuth"/>.
                </t>
                <t>
                    In addition to certificate-based TLS authentication, implementations <bcp14>MAY</bcp14> support the following alternative authentication mechanisms:
                </t>
                <ul>
                    <li>Pre-Shared Keys (PSKs) (<xref target="PSKAuth"/>), also known as external PSKs in TLS 1.3.
                    </li>
                    <li>Raw Public Keys (RPKs). The details
                        of RPKs are considered out of scope for this document. Refer to <xref target="RFC7250"/> and <xref target="RFC8446" section="4.4.2"/> for
                        implementation, deployment, and security considerations.
                    </li>
                </ul>
            </section>

            <section anchor="CertAuth">
	      <name>TLS Certificate-Based Authentication</name>
                <t>
                    TLS certificate authentication is the primary authentication option for TACACS+ over TLS.
                    This section covers certificate-based authentication only.</t>
                <t>Deploying TLS certificate-based authentication correctly will considerably improve the security of TACACS+
                    deployments. It is essential for implementers and operators to understand the implications of a TLS
                    certificate-based authentication solution, including the correct handling of certificates, Certificate Authorities (CAs), and all
                    elements of TLS configuration. For guidance, start with <xref target="BCP195"/>.</t>
                <t>Each peer <bcp14>MUST</bcp14> validate the certificate path of its remote peer, including revocation checking,
                    as
                    described in <xref target="CertPV"/>.
                </t>
                <t>
                    If the verification succeeds, the authentication is successful and the connection is permitted.
                    Policy may impose further constraints upon the peer, allowing or denying the connection based on
                    certificate fields or any other parameters exposed by the implementation.
                </t>
                <t>
                    Unless disabled by configuration, a peer <bcp14>MUST NOT</bcp14> permit connection of any peer that presents an
                    invalid TLS certificate.
                </t>
                <section anchor="CertPV">
		  <name>TLS Certificate Path Verification</name>


                    <t>
                        The implementation of certificate-based mutual authentication <bcp14>MUST</bcp14> support certificate path
                        validation as described in <xref target="RFC5280" section="6"/>.
                    </t>
                    <t>
                        In some deployments, a peer may be isolated from a remote peer's CA.
                        Implementations for these deployments <bcp14>MUST</bcp14> support certificate chains
                        (aka bundles or chains of trust), where the entire chain of the remote peer's certificate is
                        stored
                        on the local peer.
                    </t>
                    <t>
                        TLS Cached Information Extension
                        <xref target="RFC7924"/>
                        <bcp14>SHOULD</bcp14> be implemented. This <bcp14>MAY</bcp14> be augmented with RPKs <xref target="RFC7250"/>,
                        though
                        revocation must be handled as it is not part of that specification.
                    </t>
                    <t>
                        Other approaches may be used for loading the intermediate certificates onto the client, but
                        they <bcp14>MUST</bcp14>
                        include support for revocation checking. For example,
                        <xref target="RFC5280"/>
                        details the Authority Information Access (AIA) extension to provide information about the
                        issuer
                        of the certificate in which the extension appears. It can be used to provide the address of
                        the
                        Online Certificate Status Protocol (OCSP) responder from where the revocation status of the
                        certificate (which includes the extension) can be checked.
                    </t>
                </section>
                <section>
		  <name>TLS Certificate Identification</name>
                    <t>For the client-side validation of presented TLS TACACS+ server identities, implementations <bcp14>MUST</bcp14> follow the validation techniques defined in 
                        <xref target="RFC9525"/>. 
                        Identifier types DNS-ID, IP-ID, or SRV-ID
                        are applicable for use with the TLS TACACS+ protocol; they are selected by operators depending upon
                        the
                        deployment design. TLS TACACS+ does not use URI-IDs for TLS TACACS+ server identity verification.</t>
                    <t>Wildcards in TLS TACACS+ server identities simplify certificate management by allowing a single
                        certificate to secure multiple servers in a deployment. However, this introduces security risks,
                        as compromising the private key of a wildcard certificate impacts all servers using it.
                        To address these risks, the guidelines in <xref target="RFC9525" section="6.3"/> <bcp14>MUST</bcp14> be followed,
                        and the wildcard <bcp14>SHOULD</bcp14> be confined to a subdomain dedicated solely to TACACS+ servers.</t>
                    <t>
                        For the TLS TACACS+ server-side validation of client identities, implementations <bcp14>MUST</bcp14> support the
                        ability to
                        configure which fields of a certificate are used for client identification to verify that
                        the
                        client
                        is a valid
                        source for the received certificate and that it is permitted access
                        to TACACS+. Implementations <bcp14>MUST</bcp14> support either:</t>
<ul spacing="normal">
  <li>Network-address-based validation methods as described in <xref
  target="RFC5425" section="5.2"/> or</li>
  <li>Client Identity validation of a shared identity in the certificate subjectAltName. This is
                        applicable
                        in deployments where the client securely supports an identity which is shared with the
                        TLS TACACS+ server. Matching of dNSName and iPAddress <bcp14>MUST</bcp14> be supported. Other options defined
                        in <xref target="RFC5280" section="4.2.1.6"/> <bcp14>MAY</bcp14> be supported.
                        This approach allows a client's network location to be reconfigured without issuing a new
                        client
                        certificate.</li></ul>

                    <t>
                        Implementations <bcp14>MUST</bcp14> support the TLS Server Name Indication (SNI) extension  (<xref
                            target="RFC6066"
                            section="3"/>).
                        TLS TACACS+ clients <bcp14>MUST</bcp14> support the ability to configure the TLS TACACS+ server's domain name, so that it may be
                        included
                        in
                        the
                        SNI "server_name" extension of the client hello (This is distinct from the IP Address or hostname configuration used for the TCP connection). Refer to
                        <xref target="TLSSNISec"/>
                        for security related operator considerations.
                    </t>
                    <t>Certificate provisioning is out of scope of this document.</t>
                </section>
                <section>
		  <name>Cipher Suites Requirements</name>
                    <t>
                        Implementations <bcp14>MUST</bcp14> support the TLS 1.3 mandatory cipher suites (<xref target="RFC8446" section="9.1"/>).
                        Readers should refer to <xref target="BCP195"/>. The cipher suites offered or accepted <bcp14>SHOULD</bcp14> be configurable so that operators can adapt.
                    </t>
                </section>
            </section>
            <section anchor="PSKAuth">
	      <name>TLS PSK Authentication</name>
                <t>
                    As an alternative to certificate-based authentication, implementations <bcp14>MAY</bcp14> support PSKs, also known as external PSKs in TLS 1.3 <xref target="RFC8446"/>. These should not be confused with resumption PSKs.
                </t>
                <t>
                    The use of external PSKs is less well established than certificate-based authentication. It is
                    <bcp14>RECOMMENDED</bcp14> that systems follow the directions of <xref target="RFC9257"/> and <xref target="RFC8446" section="4"/>.
                </t>
                <t>
                    Where PSK authentication is implemented, PSK lengths of at least 16 octets <bcp14>MUST</bcp14> be supported.
                </t>
                <t>
                    PSK identity <bcp14>MUST</bcp14> follow recommendations of <xref target="RFC9257" section="6.1"/>. Implementations <bcp14>MUST</bcp14> support PSK identities
                    of at least 16 octets.
                </t>
                <t>
                    Although this document removes the option of obfuscation (<xref target="ObsolescenceOfTACACSObfuscation"/>), it is still possible that the TLS and non-TLS
                    versions of TACACS+ exist in an organization, for example, during migration (<xref target="MIGRATION"/>).
                    In such cases, the shared secrets configured for TACACS+ obfuscation clients <bcp14>MUST NOT</bcp14> be the same as the PSKs configured for TLS clients.
                </t>
                <t>

                </t>
            </section>
                <section anchor="TLSResumption">
		  <name>TLS Resumption</name>
                <t>
                    TLS Resumption <xref target="RFC8446"/> can minimize the number of round trips required during the handshake process.
                    If a TLS client holds a ticket previously extracted from a NewSessionTicket message from the TLS TACACS+ server, it can use the PSK identity tied to that ticket.
                    If the TLS TACACS+ server consents, the resumed session is acknowledged as authenticated and securely linked to
                    the initial session.
                </t>
                <t>The client <bcp14>SHOULD</bcp14> use resumption when it holds a valid unused ticket from the TLS TACACS+ server,
                    as each ticket is intended for a single use only and will be refreshed during resumption. The TLS TACACS+ server can reject a resumption request,
                    but the TLS TACACS+ server <bcp14>SHOULD</bcp14> allow resumption if the ticket in question has not expired and has not been used before.
                  </t>
                  <t>
                    When a TLS TACACS+ server is presented with a resumption request from the TLS client, it <bcp14>MAY</bcp14> still choose to require a full handshake.
                    In this case, the negotiation proceeds as if the session was a new authentication,
                    and the resumption attempt is ignored.  As described in <xref target="RFC8446" section="C.4"/>, reuse of a ticket allows passive observers to correlate
                    different connections. TLS TACACS+ clients and servers <bcp14>SHOULD</bcp14> follow the client tracking preventions in <xref target="RFC8446" section="C.4"/>.
                </t>
                <t>
                    When processing TLS resumption, certificates must be verified to check for revocation  during the period since the last NewSessionTicket Message.
                </t>

                <t>The resumption ticket_lifetime <bcp14>SHOULD</bcp14> be configurable, including a zero
                    seconds lifetime. Refer to <xref target="RFC8446" section="4.6.1"/> for guidance on ticket lifetime.
                </t>
            </section>
        </section>

        <section anchor="ObsolescenceOfTACACSObfuscation">
	  <name>Obsolescence of TACACS+ Obfuscation</name>
            <t>The obfuscation mechanism documented in <xref target="RFC8907" section="4.5" sectionFormat="of"/> is weak. 
            </t>
            <t>
                The introduction of TLS authentication and encryption to TACACS+ replaces
                this former mechanism, so obfuscation is hereby obsoleted.
                This section describes how the TACACS+ client and servers <bcp14>MUST</bcp14> operate regarding the obfuscation
                mechanism.
            </t>
            <t>
                Peers <bcp14>MUST NOT</bcp14> use obfuscation with TLS.
            </t>
            <t>
                A TACACS+ client initiating a TACACS+ TLS connection <bcp14>MUST</bcp14> set the TAC_PLUS_UNENCRYPTED_FLAG bit, thereby
                asserting that obfuscation is not used for the session.
                All subsequent packets <bcp14>MUST</bcp14> have the TAC_PLUS_UNENCRYPTED_FLAG bit set to 1.
            </t>
            <t>
                A TLS TACACS+ server that receives a packet with the TAC_PLUS_UNENCRYPTED_FLAG bit not set to 1 over a TLS
                connection <bcp14>MUST</bcp14> return an error of TAC_PLUS_AUTHEN_STATUS_ERROR, TAC_PLUS_AUTHOR_STATUS_ERROR, or
                TAC_PLUS_ACCT_STATUS_ERROR as appropriate for the TACACS+ message type, with the
                TAC_PLUS_UNENCRYPTED_FLAG bit set to 1, and terminate the session.
                This behavior corresponds to that defined in 
                <xref target="RFC8907" section="4.5"/> regarding data obfuscation for TAC_PLUS_UNENCRYPTED_FLAG or key mismatches.
            </t>
            <t>
                A TACACS+ client that receives a packet with the TAC_PLUS_UNENCRYPTED_FLAG bit not set to 1 <bcp14>MUST</bcp14>
                terminate the session, and <bcp14>SHOULD</bcp14> log this error.
            </t>
        </section>

        <section anchor="Security">
	  <name>Security Considerations</name>
            <section>
	      <name>TLS</name>
                <t>
                    This document improves the confidentiality, integrity, and authentication of the connection and
                    network traffic between TACACS+ peers by adding TLS support.
                </t>
                <t>
                    Simply adding TLS support to the protocol does not guarantee the protection
                    of the TLS TACACS+ server and clients. It is essential for the operators and equipment vendors
                    to adhere to the latest best practices for ensuring the integrity of network devices
                    and selecting secure TLS key and encryption algorithms.
                </t>
                <t>
                    <xref target="BCP195"/>
                    offers substantial guidance for implementing and deploying protocols that use TLS. Those implementing and deploying Secure TACACS+
                    must adhere to the recommendations relevant to TLS 1.3 outlined in <xref target="BCP195"/>
                    or its subsequent versions.
                </t>
                <t>
                    This document outlines additional restrictions permissible under <xref target="BCP195"/>.
                    For example, any recommendations referring to TLS 1.2, including the mandatory
                    support, are not relevant for Secure TACACS+, as TLS 1.3 or above is mandated.
                </t>
                <t>
                    This document concerns the use of TLS as transport for TACACS+ and does not make any changes to the core TACACS+
                    protocol, other than the direct implications of deprecating obfuscation. Operators <bcp14>MUST</bcp14> be cognizant of the security
                    implications of the TACACS+ protocol itself. Further documents are planned, for example, to address the security implications of password-based authentication and enhance the protocol to accommodate alternative schemes.
                </t>
                <section anchor="TLSUSE">
		  <name>TLS Use</name>
                    <t>
                        New TACACS+ production deployments <bcp14>SHOULD</bcp14> use TLS authentication and encryption. Also see <xref target="RFC3365"/>.
                    </t>
                    <t>
                        TLS TACACS+ servers (as defined in <xref target ="TLSTacacsServerDefinition"/>) <bcp14>MUST NOT</bcp14> allow non-TLS connections, because of the threat
                        of downgrade attacks or misconfiguration described in <xref target="wellknown"/>. Instead, separate non-TLS TACACS+ servers
                        <bcp14>SHOULD</bcp14> be set up to cater for these clients.
                    </t>
                    <t>
                        It is <bcp14>NOT RECOMMENDED</bcp14> that TLS TACACS+ servers and non-TLS TACACS+ servers be deployed
                        on the same host, for reasons discussed in <xref target="wellknown"/>. Non-TLS connections would be better served by deploying the
                        required non-TLS TACACS+ servers on separate hosts.
                    </t>
                    <t>
                        TACACS+ clients <bcp14>MUST NOT</bcp14> fail back to a non-TLS connection if a TLS connection fails. This prohibition includes during the migration of a deployment (<xref target="MIGRATION"/>).
                    </t>
                </section>
                <section>
		  <name>TLS 0-RTT</name>
                    <t>
                        TLS 1.3 resumption and PSK techniques make it possible to send early data, aka 0-RTT data, data
                        that is sent before the TLS handshake completes.
                        Replay of this data is a risk.
                        Given the sensitivity of TACACS+ data, clients <bcp14>MUST NOT</bcp14> send data until the full TLS handshake
                        completes; that is, clients <bcp14>MUST NOT</bcp14> send 0-RTT data and TLS TACACS+ servers <bcp14>MUST</bcp14> abruptly disconnect
                        clients that do.
                    </t>
                    <t>TLS TACACS+ clients and servers <bcp14>MUST NOT</bcp14> include the "early_data" extension. See Sections <xref target="RFC8446" sectionFormat="bare" section="2.3"/> and <xref target="RFC8446" sectionFormat="bare" section="4.2.10"/> of <xref target="RFC8446"/>
                        for security concerns.</t>
                </section>

                <section>
		  <name>TLS Options</name>

                    <t>Recommendations in
                        <xref target="BCP195"/>
                        <bcp14>MUST</bcp14> be followed to determine which TLS versions and algorithms should be supported,
                        deprecated, obsoleted, or abandoned.
                    </t>
                    <t>
                        Also,
                        <xref target="RFC8446" section="9"/>
                        prescribes mandatory supported options.
                    </t>
                </section>
                <section anchor="CAcache">
		  <name>Unreachable Certificate Authority (CA)</name>
                    <t>
                        Operators should be cognizant of the potential of TLS TACACS+ server and/or client isolation from their
                        peer's CA by network failures.
                        Isolation from a public key certificate's CA will cause the verification of the certificate to
                        fail and thus TLS authentication of the peer to fail.
                        The approach mentioned in
                        <xref target="CertPV"/>
                        can help address this and should be considered.
                    </t>
                </section>
                <section anchor="TLSSNISec">
		  <name>TLS Server Name Indicator (SNI)</name>
                    <t>
                        Operators should be aware that the TLS SNI extension is part of the TLS client hello, which is sent in cleartext. It is,
                        therefore, subject to eavesdropping. Also see <xref target="RFC6066" section="11.1"/>.
                    </t>
                </section>
                <section anchor="SIWildcards">
		  <name>Server Identity Wildcards</name>
                    <t>
                        The use of wildcards in TLS server identities creates a single point of failure:
                        a compromised private key of a wildcard certificate impacts all servers using it.
                        Their use <bcp14>MUST</bcp14> follow the recommendations of <xref target="RFC9525" section="7.1"/>.
                        Operators <bcp14>MUST</bcp14> ensure that the wildcard is limited to a subdomain dedicated solely to TLS TACACS+ servers.
   Further, operators <bcp14>MUST</bcp14> ensure that the TLS TACACS+ servers covered
   by a wildcard certificate are impervious to redirection of
   traffic to a different server (for example, due to on-path attacks or
   DNS cache poisoning).                        
                    </t>
                </section>
            </section>
            <section anchor="TACACSConfiguration">
	      <name>TACACS+ Configuration</name>
                <t>
                    Implementors must ensure that the configuration scheme introduced
                    for enabling TLS is straightforward and leaves no room for ambiguity regarding whether
                    TLS or non-TLS will be used between the TACACS+ client and the TACACS+ server.
                </t>
                <t>
                    This document recommends the use of a separate port number that TLS TACACS+ servers
                    will listen to. Where deployments have not overridden the defaults explicitly,
                    TACACS+ client implementations <bcp14>MUST</bcp14> use the correct port values:
                </t>
                <ul>
                    <li>49: for non-TLS connection TACACS+</li>
                    <li>300: for TLS connection TACACS+</li>
                </ul>
                <t>
                    Implementors may offer a single option for TACACS+ clients and servers to disable all
                    non-TLS TACACS+ operations. When enabled on a TACACS+ server, it will
                    not respond to any requests from non-TLS TACACS+ client connections. When enabled on
                    a TACACS+ client, it will not establish any non-TLS TACACS+ server connections.
                </t>

            </section>

            <section anchor="wellknown">
	      <name>Well-Known TCP/IP Port Number</name>
                <t>
                    A new port number is considered appropriate (rather than a mechanism that negotiates an
                    upgrade from an initial non-TLS TACACS+ connection) because it allows:
                </t>
                <ul>
                    <li>ease of blocking the unobfuscated or obfuscated connections by the TCP/IP port number,</li>
                    <li>passive Intrusion Detection Systems (IDSs) monitoring the unobfuscated to be unaffected by the
                        introduction of TLS,
                    </li>
                    <li>avoidance of on-path attacks that can interfere with upgrade, and</li>
                    <li>prevention of the accidental exposure of sensitive information due to misconfiguration.</li>
                </ul>
                <t>
                    However, the coexistence of inferior authentication and obfuscation, whether a non-TLS connection or
                    deprecated parts that compose TLS, also presents an opportunity for downgrade attacks.
                    Causing failure of connections to the TLS-enabled service or the negotiation of shared algorithm
                    support are two such downgrade attacks.
                </t>
                <t>
                    The simplest mitigation exposure from non-TLS connection methods is to refuse non-TLS
                    connections at the host entirely, perhaps using separate hosts for non-TLS connections and TLS.
                </t>
                <t>
                    Another approach is mutual configuration that requires TLS.
                    TACACS+ clients and servers <bcp14>SHOULD</bcp14> support configuration that requires peers, globally and individually, to use
                    TLS.
                    Furthermore, peers <bcp14>SHOULD</bcp14> be configurable to limit offered or recognized TLS versions and algorithms
                    to those recommended by standards bodies and implementers.
                </t>
            </section>
        </section>

        <section anchor="OPSCONS">
	  <name>Operational Considerations</name>
            <t>
                Operational and deployment considerations are spread throughout the
                document. While avoiding repetition, it is useful for the impatient
                to direct particular attention to Sections <xref target="TACACSConfiguration" format="counter"/> and <xref target="TLSSNISec" format="counter"/>.
                However, it is important that the entire <xref target="Security"/> is observed.
            </t>
            <t>It is essential for operators to understand the implications of a TLS
                    certificate-based authentication solution, including the correct handling of certificates, CAs, and all
                    elements of TLS configuration. Refer to <xref target="BCP195"/> for guidance. Attention is drawn to the provisioning
                of certificates to all peers, including TACACS+ TLS clients, to permit the mandatory mutual authentication.</t>
            <section anchor="MIGRATION">
	      <name>Migration</name>
                <t>
                    <xref target="TACACSConfiguration"/> mentions that for an optimal deployment of TLS TACACS+,
                    TLS should be universally applied throughout the deployment. However, during
                    the migration process from a non-TLS TACACS+ deployment, operators may need
                    to support both TLS and non-TLS TACACS+ servers. This migration phase allows
                    operators to gradually transition their deployments from an insecure state to
                    a more secure one, but it is important to note that it is vulnerable to
                    downgrade attacks. Therefore, the migration phase should be considered
                    insecure until it is fully completed. To mitigate this hazard:
                </t>
                <ul>
                    <li>The period where any client is configured with both TLS and non-TLS TACACS+ servers should be
                        minimized.
                    </li>
                   <li>The operator must consider the security impact of supporting both TLS and non-TLS connections, as mentioned above.</li>
                </ul>
            </section>

            <section anchor="NONTLS">
	      <name>Maintaining Non-TLS TACACS+ Clients</name>
                <t>
                    Some TACACS+ client devices in a deployment may not implement TLS.
                    These devices will require access to non-TLS TACACS+ servers.
                    Operators must follow the recommendation of
                    <xref target="TLSUSE"/>
                    and deploy
                    separate non-TLS TACACS+ servers for these non-TLS clients from those used
                    for the TLS clients.
                </t>
            </section>


            <section>
	      <name>YANG Model for TACACS+ Clients</name>
                <t>
                    <xref target="I-D.ietf-opsawg-secure-tacacs-yang"/> specifies a YANG model for managing TACACS+ clients, including TLS support.
                </t>
            </section>
        </section>

        <section anchor="ICTBD">
	  <name>IANA Considerations</name>

            <t>
   IANA has allocated the following new well-known system in the
   "Service Name and Transport Protocol Port Number Registry" (see
   <eref brackets="angle" target="https://www.iana.org/assignments/service-names-port-numbers"/>).  The
   service name "tacacss" follows the common practice of appending an
   "s" to the name given to the non-TLS well-known port name.  See the
   justification for the allocation in Section 5.3.</t>

<dl spacing="compact" newline="false">
  <dt>Service Name:</dt><dd>tacacss</dd>
  <dt>Port Number:</dt><dd>300</dd>
  <dt>Transport Protocol:</dt><dd>TCP</dd>
  <dt>Description:</dt><dd>TLS Secure Login Host Protocol (TACACSS)</dd>
  <dt>Assignee:</dt><dd>IESG</dd>
  <dt>Contact:</dt><dd>IETF Chair</dd>
  <dt>Reference:</dt><dd>RFC 9887</dd>
</dl>

            <t>Considerations about service discovery are out of scope of
            this document.</t>
        </section>

        <section>
	  <name>Acknowledgments</name>
            <t>
                The author(s) would like to thank <contact fullname="Russ
                Housley"/>, <contact fullname="Steven M.&nbsp;Bellovin"/>, <contact
                fullname="Stephen Farrell"/>, <contact fullname="Alan
                DeKok"/>, <contact fullname="Warren Kumari"/>, <contact
                fullname="Tom Petch"/>, <contact fullname="Tirumal Reddy"/>,
                <contact fullname="Valery Smyslov"/>, and <contact
                fullname="Mohamed Boucadair"/> for their support, insightful
                review, and/or comments.  <xref target="RFC5425"/> was also
                used as a basis for the general approach to TLS.  <xref
                target="RFC9190"/> was used as a basis for TLS resumption
                recommendations.  Although still in draft form at the time of
                writing, <xref target="RFC9813"/> was used as
                a model for PSK recommendations.
            </t>
        </section>

    </middle>

    <back>
<displayreference target="I-D.ietf-opsawg-secure-tacacs-yang" to="TACACS-YANG"/>
<displayreference target="I-D.ietf-uta-require-tls13" to="REQ-TLS13"/>

      <references>
	<name>References</name>
        <references>
	  <name>Normative References</name>

            <xi:include href="https://bib.ietf.org/public/rfc/bibxml9/reference.BCP.0195.xml"/>

            <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
            <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml"/>
            <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5425.xml"/>
            <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6066.xml"/>
            <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7250.xml"/>
            <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7924.xml"/>
            <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
            <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml"/>
            <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8907.xml"/>
            <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9525.xml"/>

        </references>
        <references>
	  <name>Informative References</name>
<reference anchor="FIPS-140-3" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.140-3.pdf">
  <front>
    <title>Security Requirements for Cryptographic Modules</title>
    <author>
      <organization abbrev="NIST">National Institute of Standards and Technology</organization>
    </author>
    <date month="March" year="2019"/>
  </front>
  <seriesInfo name="NIST FIPS" value="140-3"/>
  <seriesInfo name="DOI" value="10.6028/NIST.FIPS.140-3"/>
</reference>

            <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3365.xml"/>
            <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6151.xml"/>
            <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9190.xml"/>
            <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9257.xml"/>

<!-- [I-D.ietf-opsawg-secure-tacacs-yang]
draft-ietf-opsawg-secure-tacacs-yang-13 - EDIT 
-->
	    <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-opsawg-secure-tacacs-yang.xml"/>

            <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9813.xml"/>

<!-- [I-D.ietf-uta-require-tls13]
draft-ietf-uta-require-tls13-12 - EDIT 
-->
	    <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-uta-require-tls13.xml"/>

        </references>
      </references>
    </back>
</rfc>
