YANG Groupings for
TLS Clients and TLS ServersWatsen Networkskent+ietf@watsen.netCisco Systemsgarywu@cisco.comHuaweifrank.xialiang@huawei.com
Operations
NETCONF Working GroupThis document defines three YANG modules: the first defines groupings
for a generic TLS client, the second defines groupings for a generic TLS
server, and the third defines common identities and groupings used by
both the client and the server. It is intended that these groupings will
be used by applications using the TLS protocol.This draft contains many 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. No other RFC Editor
instructions are specified elsewhere in this document.This document contains references to other drafts in progress, both
in the Normative References section, as well as in body text throughout.
Please update the following references to reflect their final RFC
assignments: I-D.ietf-netconf-trust-anchorsI-D.ietf-netconf-keystoreArtwork in this document contains shorthand references to drafts in
progress. Please apply the following replacements: XXXX --> the assigned RFC value
for this draftYYYY --> the assigned RFC value
for I-D.ietf-netconf-trust-anchorsZZZZ --> the assigned RFC value
for I-D.ietf-netconf-keystoreArtwork in this document contains placeholder values for the date of
publication of this draft. Please apply the following replacement: 2019-07-02 --> the publication
date of this draftThe following Appendix section is to be removed prior to publication:
Appendix A. Change LogThis document defines three YANG 1.1
modules: the first defines a grouping for a generic TLS client, the
second defines a grouping for a generic TLS server, and the third
defines identities and groupings common to both the client and the
server (TLS is defined in ). It is intended that
these groupings will be used by applications using the TLS protocol. For
instance, these groupings could be used to help define the data model
for an HTTPS server or a NETCONF over TLS based server.The client and server YANG modules in this document each define one
grouping, which is focused on just TLS-specific configuration, and
specifically avoids any transport-level configuration, such as what
ports to listen-on or connect-to. This affords applications the
opportunity to define their own strategy for how the underlying TCP
connection is established. For instance, applications supporting NETCONF
Call Home could use the "ssh-server-grouping"
grouping for the TLS parts it provides, while adding data nodes for the
TCP-level call-home configuration.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
when, and only when,
they appear in all capitals, as shown here.This section provides a tree diagram for
the "ietf-tls-client" module that does not have groupings
expanded.This section presents two examples showing the tls-client-grouping
populated with some data. These examples are effectively the same
except the first configures the client identity using a local key
while the second uses a key configured in a keystore. Both examples
are consistent with the examples presented in Section 2 of and Section 3.2 of .The following example configures the client identity using a local
key: The following example configures the client identity using a key
from the keystore: This YANG module has normative references to and .This section provides a tree diagram for
the "ietf-tls-server" module that does not have groupings
expanded.This section presents two examples showing the tls-server-grouping
populated with some data. These examples are effectively the same
except the first configures the server identity using a local key
while the second uses a key configured in a keystore. Both examples
are consistent with the examples presented in Section 2 of and Section 3.2 of .The following example configures the server identity using a local
key: The following example configures the server identity using a key
from the keystore: This YANG module has a normative references to ,
and .The TLS common model presented in this section contains identities
and groupings common to both TLS clients and TLS servers. The
hello-params-grouping can be used to configure the list of TLS
algorithms permitted by the TLS client or TLS server. The lists of
algorithms are ordered such that, if multiple algorithms are permitted
by the client, the algorithm that appears first in its list that is also
permitted by the server is used for the TLS transport layer connection.
The ability to restrict the algorithms allowed is provided in this
grouping for TLS clients and TLS servers that are capable of doing so
and may serve to make TLS clients and TLS servers compliant with local
security policies. This model supports both TLS1.2 and TLS 1.3 .TLS 1.2 and TLS 1.3 have different ways defining their own supported
cryptographic algorithms, see TLS and DTLS IANA registries page
(https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml):TLS 1.2 defines four categories of registries for cryptographic
algorithms: TLS Cipher Suites, TLS SignatureAlgorithm, TLS
HashAlgorithm, TLS Supported Groups. TLS Cipher Suites plays the
role of combining all of them into one set, as each value of the set
represents a unique and feasible combination of all the
cryptographic algorithms, and thus the other three registry
categories do not need to be considered here. In this document, the
TLS common model only chooses those TLS1.2 algorithms in TLS Cipher
Suites which are marked as recommended:
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_DHE_PSK_WITH_AES_128_GCM_SHA256,
TLS_DHE_PSK_WITH_AES_256_GCM_SHA384, and so on. All chosen
algorithms are enumerated in Table 1-1 below;TLS 1.3 defines its supported algorithms differently. Firstly, it
defines three categories of registries for cryptographic algorithms:
TLS Cipher Suites, TLS SignatureScheme, TLS Supported Groups.
Secondly, all three of these categories are useful, since they
represent different parts of all the supported algorithms
respectively. Thus, all of these registries categories are
considered here. In this draft, the TLS common model chooses only
those TLS1.3 algorithms specified in B.4, 4.2.3, 4.2.7 of .Thus, in order to support both TLS1.2 and TLS1.3, the cipher-suites
part of the hello-params-grouping should include three parameters for
configuring its permitted TLS algorithms, which are: TLS Cipher Suites,
TLS SignatureScheme, TLS Supported Groups. Note that TLS1.2 only uses
TLS Cipher Suites. defines six categories
of cryptographic algorithms (hash-algorithm,
symmetric-key-encryption-algorithm, mac-algorithm,
asymmetric-key-encryption-algorithm, signature-algorithm,
key-negotiation-algorithm) and lists several widely accepted algorithms
for each of them. The TLS client and server models use one or more of
these algorithms. The following tables are provided, in part to define
the subset of algorithms defined in the crypto-types model used by TLS,
and in part to ensure compatibility of configured TLS cryptographic
parameters for configuring its permitted TLS algorithms:Note that in Table 1-5:dhe-ffdhe2048, ... is the abbreviation of dhe-ffdhe2048,
dhe-ffdhe3072, dhe-ffdhe4096, dhe-ffdhe6144, dhe-ffdhe8192;psk-dhe-ffdhe2048, ... is the abbreviation of psk-dhe-ffdhe2048,
psk-dhe-ffdhe3072, psk-dhe-ffdhe4096, psk-dhe-ffdhe6144,
psk-dhe-ffdhe8192;ecdhe-secp256r1, ... is the abbreviation of ecdhe-secp256r1,
ecdhe-secp384r1, ecdhe-secp521r1, ecdhe-x25519, ecdhe-x448;psk-ecdhe-secp256r1, ... is the abbreviation of
psk-ecdhe-secp256r1, psk-ecdhe-secp384r1, psk-ecdhe-secp521r1,
psk-ecdhe-x25519, psk-ecdhe-x448.Features are defined for algorithms that are OPTIONAL or are not
widely supported by popular implementations. Note that the list of
algorithms is not exhaustive.The following tree diagram provides an
overview of the data model for the "ietf-tls-common" module.This section shows how it would appear if the
transport-params-grouping were populated with some data.This YANG module has a normative references to , , , , and .This YANG module has a informative references to , , , and .The YANG modules defined in this document are designed to be accessed
via YANG based management protocols, such as NETCONF and RESTCONF . Both of these
protocols have mandatory-to-implement secure transport layers (e.g.,
SSH, TLS) with mutual authentication.The NETCONF access control model (NACM)
provides the means to restrict access for particular users to a
pre-configured subset of all available protocol operations and
content.Since the modules in this document only define groupings,
these considerations are primarily for the designers of other modules
that use these groupings.There are a number of data nodes defined in the YANG modules that are
writable/creatable/deletable (i.e., config true, which is the default).
These data nodes may be considered sensitive or vulnerable in some
network environments. Write operations (e.g., edit-config) to these data
nodes without proper protection can have a negative effect on network
operations. These are the subtrees and data nodes and their
sensitivity/vulnerability:
The entire subtree defined by the grouping
statement in both the "ietf-ssh-client" and "ietf-ssh-server"
modules is sensitive to write operations. For instance, the
addition or removal of references to keys, certificates,
trusted anchors, etc., or even the modification of transport
or keepalive parameters can dramatically alter the implemented
security policy. For this reason, this node is protected the
NACM extension "default-deny-write".Some of the readable data nodes in the YANG modules may be considered
sensitive or vulnerable in some network environments. It is thus
important to control read access (e.g., via get, get-config, or
notification) to these data nodes. These are the subtrees and data nodes
and their sensitivity/vulnerability:
This
subtree in the "ietf-tls-client" module contains nodes that are
additionally sensitive to read operations such that, in normal use
cases, they should never be returned to a client. Some of these
nodes (i.e., public-key/local-definition/private-key and
certificate/local-definition/private-key) are already protected
by the NACM extension "default-deny-all" set in the "grouping"
statements defined in .This
subtree in the "ietf-tls-server" module contains nodes that are
additionally sensitive to read operations such that, in normal use
cases, they should never be returned to a client. All of these
nodes (i.e., host-key/public-key/local-definition/private-key and
host-key/certificate/local-definition/private-key) are already
protected by the NACM extension "default-deny-all" set in the "grouping"
statements defined in .Some of the operations in this YANG module may be considered
sensitive or vulnerable in some network environments. It is
thus important to control access to these operations. These
are the operations and their sensitivity/vulnerability:
The groupings defined in this document
include "action" statements that come from groupings defined
in . Please
consult that document for the security considerations of
the "action" statements defined by the "grouping"
statements defined in this document.This document registers three URIs in the "ns" subregistry of the
IETF XML Registry . Following the format in
, the following registrations are
requested:This document registers three YANG modules in the YANG Module Names
registry . Following the format in , the following registrations are requested:Noted that '0.0.0.0' and '::' might have special meanings.Renamed "keychain" to "keystore".Removed the groupings containing transport-level configuration.
Now modules contain only the transport-independent groupings.Filled in previously incomplete 'ietf-tls-client' module.Added cipher suites for various algorithms into new
'ietf-tls-common' module.Added a 'must' statement to container 'server-auth' asserting
that at least one of the various auth mechanisms must be
specified.Fixed description statement for leaf 'trusted-ca-certs'.Updated title to "YANG Groupings for TLS Clients and TLS
Servers"Updated leafref paths to point to new keystore pathChanged the YANG prefix for ietf-tls-common from 'tlscom' to
'tlscmn'.Added TLS protocol verions 1.0 and 1.1.Made author lists consistentNow tree diagrams reference ietf-netmod-yang-tree-diagramsUpdated YANG to use typedefs around leafrefs to common keystore
pathsNow inlines key and certificates (no longer a leafref to
keystore)Merged changes from co-author.Updated to use trust anchors from trust-anchors draft (was
keystore draft)Now Uses new keystore grouping enabling asymmetric key to be
either locally defined or a reference to the keystore.factored the tls-[client|server]-groupings into more reusable
groupings.added if-feature statements for the new "x509-certificates"
feature defined in draft-ietf-netconf-trust-anchors.Added a number of compatibility matrices to Section 5 (thanks Frank!)Clarified that any configured "cipher-suite" values need to be
compatible with the configured private key.Updated examples to reflect update to groupings defined in the keystore draft.Add TLS keepalives features and groupings.Prefixed top-level TLS grouping nodes with 'tls-' and support mashups.Updated copyright date, boilerplate template, affiliation, and folding algorithm.Reformatted the YANG modules.Collapsed all the inner groupings into the top-level grouping.Added a top-level "demux container" inside the top-level grouping.Added NACM statements and updated the Security Considerations section.Added "presence" statements on the "keepalive" containers, as was
needed to address a validation error that appeared after adding the
"must" statements into the NETCONF/RESTCONF client/server modules.Updated the boilerplate text in module-level "description" statement
to match copyeditor convention.In server model, made 'client-authentication' a 'presence' node
indicating that the server supports client authentication.In the server model, added a 'required-or-optional' choice to
'client-authentication' to better support protocols such as
RESTCONF.In the server model, added a 'local-or-external' choice to
'client-authentication' to better support consuming data models
that prefer to keep client auth with client definitions than in
a model principally concerned with the "transport".In both models, removed the "demux containers", floating the
nacm:default-deny-write to each descendent node, and
adding a note to model designers regarding the potential
need to add their own demux containers.Fixed a couple references (section 2 --> section 3)Updated to reflect changes in trust-anchors drafts
(e.g., s/trust-anchors/truststore/g + s/pinned.//)Removed 'container' under 'client-identity' to match server model.Updated examples to reflect change grouping in keystore module.Removed the "certificate" container from "client-identity" in the ietf-tls-client module.Updated examples to reflect ietf-crypto-types change
(e.g., identities --> enumerations)The authors would like to thank for following for lively discussions
on list and in the halls (ordered by last name): Andy Bierman, Martin
Bjorklund, Benoit Claise, Mehmet Ersue, Balázs Kovács, David Lamparter,
Alan Luchuk, Ladislav Lhotka, Radek Krejci, Tom Petch, Juergen
Schoenwaelder, Phil Shafer, Sean Turner, and Bert Wijnen.