A YANG Data Model for a TruststoreWatsen Networkskent+ietf@watsen.net
Operations
NETCONF Working GroupThis document defines a YANG 1.1 data model for configuring
global sets of X.509 certificates, SSH host-keys, raw public keys,
and PSKs (pairwise-symmetric or pre-shared keys) that
can be referenced by other data models for trust. While
the SSH host-keys are uniquely for the SSH protocol, certificates,
raw public keys, and PSKs may have multiple uses, including
authenticating protocol peers and verifying signatures.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.Artwork 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 draft-ietf-netconf-crypto-typesArtwork in this document contains placeholder values for the date
of publication of this draft. Please apply the following replacement:
2019-11-20 --> the publication date of this draftThe following Appendix section is to be removed prior to publication:
Appendix A. Change LogThis document defines a YANG 1.1 data model
for configuring global sets of X.509 certificates, SSH host-keys, raw
public keys, and PSKs (pairwise-symmetric or pre-shared keys) that can
be referenced by other data models for trust. While the SSH host-keys
are uniquely for the SSH protocol, certificates, raw public keys, and
PSKs may have multiple uses, including authenticating protocol peers
and verifying signatures.This document in compliant with Network Management Datastore Architecture
(NMDA) . For instance, trust anchors installed
during manufacturing (e.g., for trusted well-known services), are expected
to appear in <operational> (see ).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.Tree diagrams used in this document follow the notation
defined in .The following tree diagram provides an overview of the
"ietf-truststore" module.The following example illustrates trust anchors in <intended>.
Please see for an example illustrating
built-in values in <operational>.The following example illustrates the "certificate-expiration"
notification in use with the NETCONF protocol.This YANG module imports modules from
and .In some implementations, the operating system a device is running, may
define some built-in trust anchors. For instance, there may be built-in trust
anchors enabling the device to securely connect to well-known services (e.g., an
SZTP bootstap server) or trust anchors to connect to
arbitrary services using public PKI.Built-in trust anchors are expected to be set by a vendor-specific process.
Any ability for operators to modify built-in trust anchors is outside the
scope of this docuemnt.As built-in trust anchors are provided by the system (not configuration), they
are present in <operational>. The following example illustrates bui;t-in
trust anchors in <operational>.(FIXME: add illustration with origin="system" here)In order for the built-in trust anchors to be referenced by configuration, they must
first be copied into <intended> as the example in
illustrates for the built-in trust anchors above. Note that this strategy is
chosen, rather then setting "require-instance false" for the various leafrefs,
as built-in trust anchors are relatively few in number and hence not worth
relaxing the validation for.The YANG module defined in this document is 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.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). 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 data tree defined by this module is sensitive to
write operations. For instance, the addition or removal of any trust anchor
may dramatically alter the implemented security policy. For this reason, the
NACM extension "default-deny-write" has been set for the entire data tree.None of the readable data nodes in this YANG module are considered sensitive
or vulnerable in network environments.This module does not define any RPCs, actions, or notifications, and thus the
security consideration for such is not provided here.This document registers one URI in the "ns" subregistry of
the IETF XML Registry . Following the
format in , the following registration
is requested:This document registers one YANG module in the
YANG Module Names registry .
Following the format in , the
the following registration is requested:Added features "x509-certificates" and "ssh-host-keys".Added nacm:default-deny-write to "trust-anchors" container.Switched "list pinned-certificate" to use the
"trust-anchor-cert-grouping" from crypto-types.
Effectively the same definition as before.Updated copyright date, boilerplate template, affiliation,
folding algorithm, and reformatted the YANG module.Added groupings 'local-or-truststore-certs-grouping'
and 'local-or-truststore-host-keys-grouping', matching
similar definitions in the keystore draft. Note new
(and incomplete) "truststore" usage!Related to above, also added features 'truststore-supported'
and 'local-trust-anchors-supported'.Renamed "trust-anchors" to "truststore"Removed "pinned." prefix everywhere, to match truststore renameMoved everything under a top-level 'grouping' to enable use in other contexts.Renamed feature from 'local-trust-anchors-supported' to 'local-definitions-supported' (same name used in keystore)Removed the "require-instance false" statement from the "*-ref" typedefs.Added missing "ssh-host-keys" and "x509-certificates" if-feature statementsEditorial changes only.Added Henk Birkholz as a co-author (thanks Henk!)Added PSKs and raw public keys to Truststore.Added new "Support for Built-in Trust Anchors" section.Removed spurious "uses ct:trust-anchor-certs-grouping" line.The authors especially thank Henk Birkholz for contributing YANG
to the ietf-truststore module supporting raw public keys and PSKs
(pre-shared or pairwise-symmetric keys). While these contributions
were eventually replaced by reusing the existing support for
asymmetric and symmetric trust anchors, respectively, it was only
thru Henk's initiative that the WG was able to come to that result.The authors additionally thank the following for helping give shape
to this work (ordered by last name):
Martin Bjorklund,
Nick Hancock,
Balázs Kovács,
Eric Voit,
and Liang Xia.