draft-ietf-netconf-server-model-01.txt | draft-ietf-netconf-server-model-02.txt | |||
---|---|---|---|---|
NETCONF Working Group K. Watsen | NETCONF Working Group K. Watsen | |||
Internet-Draft Juniper Networks | Internet-Draft Juniper Networks | |||
Intended status: Standards Track J. Schoenwaelder | Intended status: Standards Track J. Schoenwaelder | |||
Expires: December 03, 2014 Jacobs University Bremen | Expires: March 20, 2015 Jacobs University Bremen | |||
June 2014 | September 16, 2014 | |||
NETCONF Server Configuration Model | NETCONF Server Configuration Model | |||
draft-ietf-netconf-server-model-01 | draft-ietf-netconf-server-model-02 | |||
Abstract | Abstract | |||
This draft defines a NETCONF server configuration data model. This | This draft defines a NETCONF server configuration data model. This | |||
data model enables configuration of the NETCONF service itself, | data model enables configuration of the NETCONF service itself, | |||
including which transports it supports, what ports they listen on, | including which transports it supports, what ports they listen on, | |||
whether they support device-initiated connections, and associated | whether they support device-initiated connections, and associated | |||
parameters. | parameters. | |||
Status of This Memo | Status of This Memo | |||
skipping to change at page 1, line 35 | skipping to change at page 1, line 35 | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on December 03, 2014. | This Internet-Draft will expire on March 20, 2015. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2014 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 | 1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2.1. Support all NETCONF Transports . . . . . . . . . . . . . 3 | 2.1. Support all NETCONF Transports . . . . . . . . . . . . . 3 | |||
2.2. Align Transport-Specific Configurations . . . . . . . . . 4 | 2.2. Align Transport-Specific Configurations . . . . . . . . . 3 | |||
2.3. Support both Listening for Connections and Call Home . . 4 | 2.3. Support both Listening for Connections and Call Home . . 4 | |||
2.4. For Call Home Connections . . . . . . . . . . . . . . . . 4 | 2.4. For Call Home Connections . . . . . . . . . . . . . . . . 4 | |||
2.4.1. Support More than One Application . . . . . . . . . . 4 | 2.4.1. Support More than One Application . . . . . . . . . . 4 | |||
2.4.2. Support Applications Having More than One Server . . 4 | 2.4.2. Support Applications Having More than One Server . . 4 | |||
2.4.3. Support a Reconnection Strategy . . . . . . . . . . . 4 | 2.4.3. Support a Reconnection Strategy . . . . . . . . . . . 4 | |||
2.4.4. Support both Persistent and Periodic Connections . . 5 | 2.4.4. Support both Persistent and Periodic Connections . . 5 | |||
2.4.5. Reconnection Strategy for Periodic Connections . . . 5 | 2.4.5. Reconnection Strategy for Periodic Connections . . . 5 | |||
2.4.6. Keep-Alives for Persistent Connections . . . . . . . 5 | 2.4.6. Keep-Alives for Persistent Connections . . . . . . . 5 | |||
2.4.7. Customizations for Periodic Connections . . . . . . . 5 | 2.4.7. Customizations for Periodic Connections . . . . . . . 5 | |||
3. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
3.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 7 | 3.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
4. Keep-Alives for SSH and TLS . . . . . . . . . . . . . . . . . 16 | 4. Keep-Alives for SSH and TLS . . . . . . . . . . . . . . . . . 21 | |||
4.1. SSH . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 4.1. SSH . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
4.2. TLS . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 4.2. TLS . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
5. User Authentication for TLS . . . . . . . . . . . . . . . . . 17 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | |||
5.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 17 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | |||
5.2. Data Model Overview . . . . . . . . . . . . . . . . . . . 17 | 7. Other Considerations . . . . . . . . . . . . . . . . . . . . 23 | |||
5.3. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 18 | 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 23 | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 23 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 24 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 24 | |||
8. Other Considerations . . . . . . . . . . . . . . . . . . . . 24 | 9.2. Informative References . . . . . . . . . . . . . . . . . 25 | |||
9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 24 | Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 26 | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 24 | A.1. SSH Transport Configuration . . . . . . . . . . . . . . . 26 | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 24 | A.2. TLS Transport Configuration . . . . . . . . . . . . . . . 26 | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 26 | Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 27 | |||
Appendix A. Example: SSH Transport Configuration . . . . . . . . 26 | B.1. 00 to 01 . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
Appendix B. Example: TLS Transport Configuration . . . . . . . . 27 | B.2. 01 to 02 . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
Appendix C. Example: TLS Authentication Configuration . . . . . 28 | Appendix C. Open Issues . . . . . . . . . . . . . . . . . . . . 28 | |||
Appendix D. Change Log . . . . . . . . . . . . . . . . . . . . . 29 | ||||
D.1. I-D to 00 . . . . . . . . . . . . . . . . . . . . . . . . 29 | ||||
D.2. 00 to 01 . . . . . . . . . . . . . . . . . . . . . . . . 29 | ||||
Appendix E. Open Issues . . . . . . . . . . . . . . . . . . . . 29 | ||||
1. Introduction | 1. Introduction | |||
This draft defines a NETCONF [RFC6241] server configuration data | This draft defines a NETCONF [RFC6241] server configuration data | |||
model. This data model enables configuration of the NETCONF service | model. This data model enables configuration of the NETCONF service | |||
itself, including which transports are supported, what ports does the | itself, including which transports are supported, what ports does the | |||
server listen on, whether call-home is supported, and associated | server listen on, whether call-home is supported, and associated | |||
parameters. | parameters. | |||
1.1. Terminology | 1.1. Terminology | |||
skipping to change at page 4, line 6 | skipping to change at page 3, line 42 | |||
includes the following objectives: | includes the following objectives: | |||
2.1. Support all NETCONF Transports | 2.1. Support all NETCONF Transports | |||
The YANG module should support all current NETCONF transports, namely | The YANG module should support all current NETCONF transports, namely | |||
NETCONF over SSH [RFC6242] and NETCONF over TLS | NETCONF over SSH [RFC6242] and NETCONF over TLS | |||
[I-D.ietf-netconf-rfc5539bis], and be extensible to support future | [I-D.ietf-netconf-rfc5539bis], and be extensible to support future | |||
transports as necessary. | transports as necessary. | |||
Since implementations may not support all transports, the module | Since implementations may not support all transports, the module | |||
should use YANG "feature" statements so that implementation can | should use YANG "feature" statements so that implementations can | |||
accurately advertise which transports are supported. | accurately advertise which transports are supported. | |||
2.2. Align Transport-Specific Configurations | 2.2. Align Transport-Specific Configurations | |||
While each transport is unique in its protocol and may have some | While each transport is unique in its protocol and may have some | |||
distinct configurations, there remains a significant overlap between | distinct configurations, there remains a significant overlap between | |||
them. Thus the YANG module should use "grouping" statements so that | them. Thus the YANG module should use "grouping" statements so that | |||
the common aspects can be configured similarly. | the common aspects can be configured similarly. | |||
2.3. Support both Listening for Connections and Call Home | 2.3. Support both Listening for Connections and Call Home | |||
skipping to change at page 6, line 18 | skipping to change at page 6, line 12 | |||
will send another shortly thereafter. Likewise, the application may | will send another shortly thereafter. Likewise, the application may | |||
have a sequence of pending messages to send. Thus, it should be | have a sequence of pending messages to send. Thus, it should be | |||
possible for a device to hold a connection open until some amount of | possible for a device to hold a connection open until some amount of | |||
time of no data being transmitted as transpired. | time of no data being transmitted as transpired. | |||
3. Data Model | 3. Data Model | |||
3.1. Overview | 3.1. Overview | |||
To enable transports to configure listening on one or more ports in a | To enable transports to configure listening on one or more ports in a | |||
common way, this grouping is defined. This grouping defines SSH and | common way, the following subtree is defined. This subtree defines | |||
TLS specific containers, each of which refines the default listening | SSH and TLS specific containers, each of which refines the default | |||
port appropriately. Further, each of these transport specific | listening port appropriately. Further, each of these transport | |||
containers use a feature statement, enabling NETCONF servers to | specific containers use a feature statement, enabling NETCONF servers | |||
accurately advertise what they support. | to accurately advertise what they support. | |||
module: ietf-netconf-server | module: ietf-netconf-server | |||
+--rw netconf-server | +--rw netconf-server | |||
+--rw listen | +--rw listen* [name] | |||
+--rw ssh {ssh-listen}? | +--rw name string | |||
| +--rw (one-or-many)? | +--rw (transport) | |||
| +--:(one-port) | +--:(ssh) {ssh-listen}? | |||
| | +--rw port? inet:port-number | | +--rw ssh | |||
| +--:(many-ports) | | +--rw address inet:host | |||
| +--rw interface* [address] | | +--rw port? inet:port-number | |||
| +--rw address inet:host | +--:(tls) {tls-listen}? | |||
| +--rw port? inet:port-number | +--rw tls | |||
+--rw tls {tls-listen}? | +--rw address inet:host | |||
+--rw (one-or-many)? | +--rw port? inet:port-number | |||
+--:(one-port) | ||||
| +--rw port? inet:port-number | ||||
+--:(many-ports) | ||||
+--rw interface* [address] | ||||
+--rw address inet:host | ||||
+--rw port? inet:port-number | ||||
To enable transports to configure initiating connections to remote | To enable transports to configure initiating connections to remote | |||
applications in a common way, this grouping is defined. This | applications in a common way, the following subtree is defined. This | |||
grouping configures a list of network-managers, each with some | subtree configures a list of appliacations, each with some transport- | |||
transport-specific configuration augmented in. Each of the transport | specific configuration augmented in. Each of the transport specific | |||
specific containers use a feature statement, enabling NETCONF servers | containers use a feature statement, enabling NETCONF servers to | |||
to accurately advertise what they support. | accurately advertise what they support. | |||
module: ietf-netconf-server | module: ietf-netconf-server | |||
+--rw netconf-server | +--rw netconf-server | |||
+--rw call-home | +--rw call-home | |||
+--rw network-managers | +--rw network-managers | |||
+--rw network-manager* [name] | +--rw network-manager* [name] | |||
+--rw name string | +--rw name string | |||
+--rw description? string | +--rw description? string | |||
+--rw endpoints | +--rw endpoints | |||
| +--rw endpoint* [address] | | +--rw endpoint* [address] | |||
skipping to change at page 7, line 35 | skipping to change at page 7, line 38 | |||
| | +--rw count-max? uint8 | | | +--rw count-max? uint8 | |||
| +--:(periodic-connection) | | +--:(periodic-connection) | |||
| +--rw periodic | | +--rw periodic | |||
| +--rw timeout-mins? uint8 | | +--rw timeout-mins? uint8 | |||
| +--rw linger-secs? uint8 | | +--rw linger-secs? uint8 | |||
+--rw reconnect-strategy | +--rw reconnect-strategy | |||
+--rw start-with? enumeration | +--rw start-with? enumeration | |||
+--rw interval-secs? uint8 | +--rw interval-secs? uint8 | |||
+--rw count-max? uint8 | +--rw count-max? uint8 | |||
The following subtree illustrates how this YANG module enables | ||||
authentication of TLS client certificates and mapping TLS clients to | ||||
NETCONF user names. More specifically, the "trusted-ca-certs" and | ||||
"trusted-client-certs" containers are used to authenticate TLS client | ||||
certificates, while "cert-maps" and "psk-maps" are used to map TLS | ||||
clients to NETCONF user names. | ||||
module: ietf-netconf-server | ||||
+--rw netconf-server | ||||
+--rw tls-client-auth | ||||
+--rw trusted-ca-certs | ||||
| +--rw trusted-ca-cert* binary | ||||
+--rw trusted-client-certs | ||||
| +--rw trusted-client-cert* binary | ||||
+--rw cert-maps {tls-map-certificates}? | ||||
| +--rw cert-to-name* [id] | ||||
| +--rw id uint32 | ||||
| +--rw fingerprint x509c2n:tls-fingerprint | ||||
| +--rw map-type identityref | ||||
| +--rw name string | ||||
+--rw psk-maps {tls-map-pre-shared-keys}? | ||||
+--rw psk-map* [psk-identity] | ||||
+--rw psk-identity string | ||||
+--rw user-name nacm:user-name-type | ||||
+--rw not-valid-before? yang:date-and-time | ||||
+--rw not-valid-after? yang:date-and-time | ||||
+--rw key yang:hex-string | ||||
3.2. YANG Module | 3.2. YANG Module | |||
This YANG module imports YANG types from [RFC6991]. | This YANG module imports YANG types from [RFC6991], [RFC6536], and | |||
[draft-ietf-netmod-snmp-cfg]. | ||||
RFC Ed.: update the date below with the date of RFC publication | RFC Ed.: update the date below with the date of RFC publication | |||
and remove this note. | and remove this note. | |||
<CODE BEGINS> file "ietf-netconf-server.@2014-05-16.yang" | <CODE BEGINS> file "ietf-netconf-server@YYYY-MM-DD.yang" | |||
module ietf-netconf-server { | module ietf-netconf-server { | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-server"; | namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-server"; | |||
prefix "ncserver"; | prefix "ncserver"; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix inet; // RFC 6991 | prefix inet; // RFC 6991 | |||
} | } | |||
import ietf-yang-types { | ||||
prefix yang; // RFC 6991 | ||||
} | ||||
import ietf-netconf-acm { | ||||
prefix nacm; // RFC 6536 | ||||
} | ||||
import ietf-x509-cert-to-name { | ||||
prefix x509c2n; // draft-ietf-netmod-snmp-cfg | ||||
} | ||||
organization | organization | |||
"IETF NETCONF (Network Configuration) Working Group"; | "IETF NETCONF (Network Configuration) Working Group"; | |||
contact | contact | |||
"WG Web: <http://tools.ietf.org/wg/netconf/> | "WG Web: <http://tools.ietf.org/wg/netconf/> | |||
WG List: <mailto:netconf@ietf.org> | WG List: <mailto:netconf@ietf.org> | |||
WG Chair: Mehmet Ersue | WG Chair: Mehmet Ersue | |||
<mailto:mehmet.ersue@nsn.com> | <mailto:mehmet.ersue@nsn.com> | |||
skipping to change at page 8, line 41 | skipping to change at page 9, line 41 | |||
Legal Provisions Relating to IETF Documents | Legal Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC XXXX; see | This version of this YANG module is part of RFC XXXX; see | |||
the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
// RFC Ed.: replace XXXX with actual RFC number and | // RFC Ed.: replace XXXX with actual RFC number and | |||
// remove this note | // remove this note | |||
// RFC Ed.: please update the date to the date of publication | // RFC Ed.: please update the date to the date of publication | |||
revision "2014-01-24" { | revision "YYYY-MM-DD" { | |||
description | description | |||
"Initial version"; | "Initial version"; | |||
reference | reference | |||
"RFC XXXX: NETCONF Server Configuration Model"; | "RFC XXXX: NETCONF Server Configuration Model"; | |||
} | } | |||
// Features | // Features | |||
feature ssh { | ||||
description | ||||
"A NETCONF server implements this feature if it supports NETCONF | ||||
over Secure Shell (SSH)."; | ||||
reference | ||||
"RFC 6242: Using the NETCONF Protocol over Secure Shell (SSH)"; | ||||
} | ||||
feature ssh-listen { | feature ssh-listen { | |||
description | description | |||
"The ssh-listen feature indicates that the NETCONF server can | "The ssh-listen feature indicates that the NETCONF server can | |||
open a port to listen for incoming client connections."; | open a port to listen for incoming client connections."; | |||
} | } | |||
feature ssh-call-home { | feature ssh-call-home { | |||
description | description | |||
"The ssh-call-home feature indicates that the NETCONF server can | "The ssh-call-home feature indicates that the NETCONF server can | |||
connect to a client."; | connect to a client."; | |||
reference | reference | |||
"RFC XXXX: Reverse Secure Shell (Reverse SSH)"; | "RFC XXXX: Reverse Secure Shell (Reverse SSH)"; | |||
} | } | |||
feature tls { | ||||
description | ||||
"A NETCONF server implements this feature if it supports NETCONF | ||||
over Transport Layer Security (TLS)."; | ||||
reference | ||||
"RFC XXXX: NETCONF over Transport Layer Security (TLS)"; | ||||
} | ||||
feature tls-listen { | feature tls-listen { | |||
description | description | |||
"The tls-listen feature indicates that the NETCONF server can | "The tls-listen feature indicates that the NETCONF server can | |||
open a port to listen for incoming client connections."; | open a port to listen for incoming client connections."; | |||
} | } | |||
feature tls-call-home { | feature tls-call-home { | |||
description | description | |||
"The tls-call-home feature indicates that the NETCONF server can | "The tls-call-home feature indicates that the NETCONF server can | |||
connect to a client."; | connect to a client."; | |||
} | } | |||
// Groupings | feature tls-map-certificates { | |||
description | ||||
"The tls-map-certificates feature indicates that the | ||||
NETCONF server implements mapping X.509 certificates to NETCONF | ||||
usernames."; | ||||
} | ||||
grouping one-or-many-config { | feature tls-map-pre-shared-keys { | |||
description | description | |||
"Provides a choice of configuring one of more ports | "The tls-map-pre-shared-keys feature indicates that the | |||
to listen for incoming client connections."; | NETCONF server implements mapping TLS pre-shared keys | |||
to NETCONF usernames."; | ||||
} | ||||
choice one-or-many { | // Module's top-level container | |||
default one-port; | container netconf-server { | |||
case one-port { | description | |||
leaf port { | "Top-level container for NETCONF server configuration."; | |||
type inet:port-number; | list listen { | |||
description | key name; | |||
"The port number the NETCONF server listens on on all | description | |||
interfaces."; | "List of endpoints to listen for connections on."; | |||
} | //if-feature "(ssh-listen or tls-listen)"; | |||
} | uses listen-config; | |||
} | ||||
list call-home { | ||||
key name; | ||||
description | ||||
"List of applications to call-home to."; | ||||
//if-feature "(ssh-call-home or tls-call-home)"; | ||||
uses call-home-config; | ||||
} | ||||
container tls-client-auth { | ||||
//if-feature "(tls-listen or tls-call-home)"; | ||||
description | ||||
"Container for TLS client authentication configuration."; | ||||
uses trusted-ca-certs-grouping; | ||||
uses trusted-client-certs-grouping; | ||||
uses cert-maps-grouping; | ||||
uses psk-maps-grouping; | ||||
} | ||||
} | ||||
case many-ports { | // Groupings | |||
list interface { | ||||
key "address"; | grouping listen-config { | |||
leaf address { | description | |||
type inet:host; | "Grouping for listen configuration."; | |||
mandatory true; | leaf name { | |||
type string; | ||||
description | ||||
"An arbitrary name for the listen endpoint."; | ||||
} | ||||
choice transport { | ||||
mandatory true; | ||||
description | ||||
"Selects between SSH and TLS transports."; | ||||
case ssh { | ||||
if-feature ssh-listen; | ||||
container ssh { | ||||
description | description | |||
"The local IP address of the interface to listen | "SSH-specific listening configuration for inbound | |||
on."; | connections."; | |||
} | uses listen-per-transport-config { | |||
leaf port { | refine port { | |||
type inet:port-number; | default 830; | |||
} | ||||
} | ||||
} | ||||
} | ||||
case tls { | ||||
if-feature tls-listen; | ||||
container tls { | ||||
description | description | |||
"The local port number on this interface the | "TLS-specific listening configuration for inbound | |||
NETCONF server listens on."; | connections."; | |||
uses listen-per-transport-config { | ||||
refine port { | ||||
default 6513; | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
grouping network-managers-config { | grouping listen-per-transport-config { | |||
container network-managers { | description | |||
"Provides the configuration of the NETCONF server to | ||||
open one or more ports to listen for incoming client | ||||
connections."; | ||||
leaf address { | ||||
type inet:host; | ||||
mandatory true; | ||||
description | description | |||
"A list of network managers the device initates connections | "The local IP address/name of the interface to listen on."; | |||
to. The configuration for each network manager specifies | } | |||
its details, including its endpoints, the type of | leaf port { | |||
connection to maintain, and the reconnection strategy | type inet:port-number; | |||
to use."; | description | |||
"The local port number on this interface the | ||||
NETCONF server listens on."; | ||||
} | ||||
} | ||||
list network-manager { | grouping call-home-config { | |||
key name; | description | |||
leaf name { | "Grouping for call-home configuration."; | |||
type string { | leaf name { | |||
length 1..64; // XXX why these limits? | type string; | |||
} | description | |||
mandatory true; | "An arbitrary name for the remote application."; | |||
description | } | |||
"An arbitrary name for the network manager the device | uses call-home-transport-config; | |||
is connecting to."; | uses call-home-connection-type-config; | |||
} | uses call-home-reconnection-strategy-config; | |||
leaf description { | } | |||
type string; | ||||
description | grouping call-home-transport-config { | |||
"An optional description for the network manager."; | description | |||
} | "Grouping for call-home specific transport selection."; | |||
container endpoints { | choice transport { | |||
mandatory true; | ||||
description | ||||
"Selects between SSH and TLS transports."; | ||||
case ssh { | ||||
if-feature ssh-call-home; | ||||
container ssh { | ||||
description | description | |||
"An ordered listing of the network manager's | "Specifies SSH-specific call-home transport | |||
endpoints that the device should attempt connecting | configuration."; | |||
to. Defining more than one enables the device to | uses call-home-per-transport-config { | |||
support high-availability scenarios."; | refine endpoints/endpoint/port { | |||
list endpoint { | default 9999; // pending IANA assignment | |||
key address; | } | |||
} | ||||
list host-key { | ||||
key name; | ||||
min-elements 1; | min-elements 1; | |||
ordered-by user; | ordered-by user; | |||
leaf address { | description | |||
type inet:host; | "User-ordered list of host-keys the SSH server | |||
should advertize."; | ||||
leaf name { | ||||
type string; | ||||
mandatory true; | mandatory true; | |||
description | description | |||
"The hostname or IP address of the endpoint. | "The name of a host key the device should | |||
If a hostname is provided and DNS resolves to | advertise during the SSH key exchange."; | |||
more than one IP address, the device SHOULD | ||||
try all of the ones it can based on how its | ||||
networking stack is configured (e.g. v4, v6, | ||||
dual-stack)."; | ||||
} | ||||
leaf port { | ||||
type inet:port-number; | ||||
description | ||||
"The IP port for this endpoint. The device will use | ||||
the IANA-assigned well-known port if not specified."; | ||||
} | } | |||
} | } | |||
} | } | |||
container transport { | } | |||
} | case tls { | |||
container connection-type { | if-feature tls-call-home; | |||
container tls { | ||||
description | description | |||
"Indicates the network manager's preference for how the | "Specifies TLS-specific call-home transport | |||
device's connection is maintained."; | configuration."; | |||
choice connection-type { | uses call-home-per-transport-config { | |||
default persistent-connection; | refine endpoints/endpoint/port { | |||
case persistent-connection { | default 9999; // pending IANA assignment | |||
container persistent { | ||||
description | ||||
"Maintain a persistent connection to the | ||||
network manager. If the connection goes down, | ||||
immediately start trying to reconnect to it, | ||||
using the reconnection strategy. | ||||
This connection type minimizes any | ||||
manager-to-device data-transfer delay, | ||||
albeit at the expense of holding resources | ||||
longer."; | ||||
container keep-alives { | ||||
leaf interval-secs { | ||||
type uint8; | ||||
units seconds; | ||||
default 15; | ||||
description | ||||
"Sets a timeout interval in seconds after which | ||||
if no data has been received from the manager's | ||||
endpoint, a message will be sent to request a | ||||
response from the endpoint. A value of '0' | ||||
indicates that no keep-alive messages should | ||||
be sent."; | ||||
} | ||||
leaf count-max { | ||||
type uint8; | ||||
default 3; | ||||
description | ||||
"Sets the number of keep-alive messages that may | ||||
be sent without receiving any data from the | ||||
manager's endpoint before assuming the endpoint | ||||
is no longer alive. If this threshold is | ||||
reached, the transport-level connection will be | ||||
disconnected (thus triggering the reconnection | ||||
strategy). The interval timer is reset after | ||||
each transmission, thus an unresponsive | ||||
endpoint will be disconnected after about | ||||
count-max * interval-secs seconds."; | ||||
} | ||||
} | ||||
} | ||||
} | ||||
case periodic-connection { | ||||
container periodic { | ||||
description | ||||
"Periodically connect to network manager, using the | ||||
reconnection strategy, so it can flush any pending | ||||
data it may be holding. This connection type | ||||
minimizes resources held open, albeit at the | ||||
expense of longer manager-to-device data-transfer | ||||
delay. Note that for device-to-manager data, the | ||||
data should be sent immediately, connecting to | ||||
network manager first if not already."; | ||||
leaf timeout-mins { | ||||
type uint8; | ||||
units minutes; | ||||
default 5; | ||||
description | ||||
"The maximum amount of unconnected time the | ||||
device will wait until establishing a | ||||
connection to the network manager again. The | ||||
device MAY establish a connection before this | ||||
time if it has data it needs to send to the | ||||
network manager. Note: this value differs from | ||||
the reconnection strategy's interval-secs | ||||
value."; | ||||
} | ||||
leaf linger-secs { | ||||
type uint8; | ||||
units seconds; | ||||
default 30; | ||||
description | ||||
"The amount of time the device should wait after | ||||
last receiving data from or sending data to the | ||||
network manager's endpoint before closing its | ||||
connection to it. This is an optimization to | ||||
prevent unnecessary connections."; | ||||
} | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
// XXX | ||||
// Should we have something smarter as the reconnect | ||||
// strategy, e.g. an exponential backoff? | ||||
container reconnect-strategy { | ||||
description | ||||
"The reconnection strategy guides how a device reconnects | ||||
to an network manager, after losing a connection to it, | ||||
even if due to a reboot. The device starts with the | ||||
specified endpoint, tries to connect to it count-max | ||||
times, waiting interval-secs between each connection | ||||
attempt, before trying the next endpoint in the list | ||||
(round robin)."; | ||||
leaf start-with { | ||||
type enumeration { | ||||
enum first-listed { value 1; } | ||||
enum last-connected { value 2; } | ||||
} | ||||
default first-listed; | ||||
description | ||||
"Specifies which of the network manager's endpoints the | ||||
device should start with when trying to connect to | ||||
the network manager. If no previous connection has | ||||
ever been established, last-connected defaults to the | ||||
first endpoint listed."; | ||||
} | ||||
leaf interval-secs { | ||||
type uint8; | ||||
units seconds; | ||||
default 5; | ||||
description | ||||
"Specifies the time delay between connection attempts | ||||
to the same endpoint. Note: this value differs from | ||||
the periodic-connection's timeout-mins value."; | ||||
} | ||||
leaf count-max { | ||||
type uint8; | ||||
default 3; | ||||
description | ||||
"Specifies the number times the device tries to | ||||
connect to a specific endpoint before moving on to | ||||
the next endpoint in the list (round robin)."; | ||||
} | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
grouping listen-config { | grouping call-home-per-transport-config { | |||
description | description | |||
"Provides the configuration of the NETCONF server to | "Grouping for transport-specific configuration for | |||
open one or more ports to listen for incoming client | call-home connections."; | |||
connections."; | container endpoints { | |||
container ssh { | description | |||
if-feature ssh-listen; | "Container for the list of endpoints."; | |||
uses one-or-many-config { | list endpoint { | |||
refine one-or-many/one-port/port { | key name; | |||
default 830; | min-elements 1; | |||
} | ordered-by user; | |||
refine one-or-many/many-ports/interface/port { | description | |||
default 830; | "User-ordered list of endpoints for this application. | |||
Defining more than one enables high-availability."; | ||||
leaf name { | ||||
type string; | ||||
description | ||||
"An arbitrary name for the endpoint to connect to."; | ||||
} | } | |||
} | leaf address { | |||
} | type inet:host; | |||
container tls { | mandatory true; | |||
if-feature tls-listen; | description | |||
uses one-or-many-config { | "The hostname or IP address of the endpoint. | |||
refine one-or-many/one-port/port { | If a hostname is provided and DNS resolves to | |||
default 6513; | more than one IP address, the device SHOULD | |||
try all of the ones it can based on how its | ||||
networking stack is configured (e.g. v4, v6, | ||||
dual-stack)."; | ||||
} | } | |||
refine one-or-many/many-ports/interface/port { | leaf port { | |||
default 6513; | type inet:port-number; | |||
description | ||||
"The IP port for this endpoint. The device will use | ||||
the IANA-assigned well-known port if not specified."; | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
grouping call-home-connection-type-config { | ||||
grouping call-home-config { | ||||
description | description | |||
"Provides the configuration of the NETCONF call-home | "Grouping to define connection-type for call-home | |||
clients to connect to, the overall call-home policy, | based connections."; | |||
and the reconnect strategy."; | container connection-type { | |||
description | ||||
uses network-managers-config { | "Indicates the network manager's preference for how the | |||
augment network-managers/network-manager/transport { | device's connection is maintained."; | |||
container ssh { | choice connection-type { | |||
if-feature ssh-call-home; | default persistent-connection; | |||
container host-keys { | description | |||
"Selects between persistent and periodic connections."; | ||||
case persistent-connection { | ||||
container persistent { | ||||
description | description | |||
"An ordered listing of the SSH host keys the | "Maintain a persistent connection to the | |||
device should advertise to the network manager."; | network manager. If the connection goes down, | |||
list host-key { | immediately start trying to reconnect to it, | |||
key name; | using the reconnection strategy. | |||
min-elements 1; // requires 'ssh' element? | ||||
ordered-by user; | This connection type minimizes any | |||
leaf name { | manager-to-device data-transfer delay, | |||
type string; | albeit at the expense of holding resources | |||
mandatory true; | longer."; | |||
container keep-alives { | ||||
description | ||||
"Configures keep-alive policy, to proactively | ||||
detect when a persistent connection to an | ||||
endpoint has dropped."; | ||||
leaf interval-secs { | ||||
type uint8; | ||||
units seconds; | ||||
default 15; | ||||
description | description | |||
"The name of a host key the device should | "Sets a timeout interval in seconds after which | |||
advertise during the SSH key exchange."; | if no data has been received from the manager's | |||
endpoint, a message will be sent to request a | ||||
response from the endpoint. A value of '0' | ||||
indicates that no keep-alive messages should | ||||
be sent."; | ||||
} | ||||
leaf count-max { | ||||
type uint8; | ||||
default 3; | ||||
description | ||||
"Sets the number of keep-alive messages that may | ||||
be sent without receiving any data from the | ||||
manager's endpoint before assuming the endpoint | ||||
is no longer alive. If this threshold is | ||||
reached, the transport-level connection will be | ||||
disconnected (thus triggering the reconnection | ||||
strategy). The interval timer is reset after | ||||
each transmission, thus an unresponsive | ||||
endpoint will be disconnected after about | ||||
count-max * interval-secs seconds."; | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
container tls { | case periodic-connection { | |||
if-feature tls-call-home; | container periodic { | |||
presence "Enables call home using TLS when configured."; | description | |||
"Periodically connect to network manager, using the | ||||
reconnection strategy, so it can flush any pending | ||||
data it may be holding. This connection type | ||||
minimizes resources held open, albeit at the | ||||
expense of longer manager-to-device data-transfer | ||||
delay. Note that for device-to-manager data, the | ||||
data should be sent immediately, connecting to | ||||
network manager first if not already."; | ||||
leaf timeout-mins { | ||||
type uint8; | ||||
units minutes; | ||||
default 5; | ||||
description | ||||
"The maximum amount of unconnected time the | ||||
device will wait until establishing a | ||||
connection to the network manager again. The | ||||
device MAY establish a connection before this | ||||
time if it has data it needs to send to the | ||||
network manager. Note: this value differs from | ||||
the reconnection strategy's interval-secs | ||||
value."; | ||||
} | ||||
leaf linger-secs { | ||||
type uint8; | ||||
units seconds; | ||||
default 30; | ||||
description | ||||
"The amount of time the device should wait after | ||||
last receiving data from or sending data to the | ||||
network manager's endpoint before closing its | ||||
connection to it. This is an optimization to | ||||
prevent unnecessary connections."; | ||||
} | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
// Module's top-level container | grouping call-home-reconnection-strategy-config { | |||
container netconf-server { | ||||
description | description | |||
"Top-level container for NETCONF server configuration."; | "Grouping for reconnection strategy."; | |||
container listen { | container reconnect-strategy { | |||
uses listen-config; | description | |||
} | "The reconnection strategy guides how a device reconnects | |||
container call-home { | to an application, after losing a connection to it, | |||
uses call-home-config; | even if due to a reboot. The device starts with the | |||
specified endpoint, tries to connect to it count-max | ||||
times, waiting interval-secs between each connection | ||||
attempt, before trying the next endpoint in the list | ||||
(round robin)."; | ||||
leaf start-with { | ||||
type enumeration { | ||||
enum first-listed { | ||||
description | ||||
"Indicates that reconnections should start with | ||||
the first endpoint listed."; | ||||
} | ||||
enum last-connected { | ||||
description | ||||
"Indicates that reconnections should start with | ||||
the endpoint last connected to."; | ||||
} | ||||
} | ||||
default first-listed; | ||||
description | ||||
"Specifies which of the application's endpoints the | ||||
device should start with when trying to connect to | ||||
the application. If no previous connection has | ||||
ever been established, last-connected defaults to | ||||
the first endpoint listed."; | ||||
} | ||||
leaf interval-secs { | ||||
type uint8; | ||||
units seconds; | ||||
default 5; | ||||
description | ||||
"Specifies the time delay between connection attempts | ||||
to the same endpoint. Note: this value differs from | ||||
the periodic-connection's timeout-mins value."; | ||||
} | ||||
leaf count-max { | ||||
type uint8; | ||||
default 3; | ||||
description | ||||
"Specifies the number times the device tries to | ||||
connect to a specific endpoint before moving on to | ||||
the next endpoint in the list (round robin)."; | ||||
} | ||||
} | } | |||
} | } | |||
} | grouping trusted-ca-certs-grouping { | |||
<CODE ENDS> | ||||
4. Keep-Alives for SSH and TLS | ||||
One the objectives listed above, Keep-Alives for Persistent | ||||
Connections (Section 2.4.6) indicates a need for a "keep-alive" | ||||
mechanism. This section specifies how the NETCONF keep-alive | ||||
mechanism is to be implemented. | ||||
Both SSH and TLS have the ability to support keep-alives. Using | ||||
these mechanisms, the keep-alive messages are sent inside the | ||||
encrypted tunnel, thus thwarting spoof attacks. | ||||
4.1. SSH | ||||
The SSH keep-alive solution that is expected to be used when | ||||
configured using the data model defined in this document is | ||||
ubiquitous in practice, though never being explicitly defined in an | ||||
RFC. The strategy used is to purposely send a malformed request | ||||
message with a flag set to ensure a response. More specifically, per | ||||
section 4 of [RFC4253], either SSH peer can send a | ||||
SSH_MSG_GLOBAL_REQUEST message with "want reply" set to '1' and that, | ||||
if there is an error, will get back a SSH_MSG_REQUEST_FAILURE | ||||
response. Similarly, section 5 of [RFC4253] says that either SSH | ||||
peer can send a SSH_MSG_CHANNEL_REQUEST message with "want reply" set | ||||
to '1' and that, if there is an error, will get back a | ||||
SSH_MSG_CHANNEL_FAILURE response. | ||||
To ensure that the request will fail, current implementations send an | ||||
invalid "request name" or "request type", respectively. Abiding to | ||||
the extensibility guidelines specified in Section 6 of [RFC4251], | ||||
these implementations use the "name@domain". For instance, when | ||||
configured to send keep-alives, OpenSSH sends the string | ||||
"keepalive@openssh.com". In order to remain compatible with existing | ||||
implementations, this draft does not require a specific "request | ||||
name" or "request type" string be used. | ||||
4.2. TLS | ||||
The TLS keep-alive solution is defined in [RFC6520]. This solution | ||||
allows both peers to advertise if they can receive heartbeat request | ||||
messages from its peer. For standard NETCONF over TLS connections, | ||||
devices SHOULD advertise "peer_allowed_to_send", as per [RFC6520]. | ||||
This advertisement is not a "MUST" in order to grandfather existing | ||||
NETCONF over TLS implementations. For NETCONF over TLS Call Home, | ||||
the network management system MUST advertise "peer_allowed_to_send" | ||||
per [RFC6520]. This is a "MUST" so as to ensure devices can depend | ||||
in it always being there for call home connections, which is | ||||
conveniently when keep-alives are needed the most. | ||||
5. User Authentication for TLS | ||||
5.1. Introduction | ||||
The NETCONF Server Module defined in this draft focuses on the | ||||
configuration the SSH and TLS transports. This module does not | ||||
define a means to configure User Authentication, as that is a stated | ||||
focus for [draft-ietf-netmod-system-mgmt], however, that draft does | ||||
not define configuration nodes for TLS client authentication. Thus, | ||||
this draft also includes the following YANG module to augment TLS | ||||
client authentication into the "ietf-system" module defined in | ||||
[draft-ietf-netmod-system-mgmt]. | ||||
5.2. Data Model Overview | ||||
This data model augments the "ietf-system" module defined in | ||||
[draft-ietf-netmod-system-mgmt] by adding some configuration nodes | ||||
under its "/system/authentication" subtree. | ||||
module: ietf-system-tls-auth | ||||
augment /sys:system/sys:authentication: | ||||
+--rw tls | ||||
+--rw trusted-ca-certs | ||||
| +--rw trusted-ca-cert* binary | ||||
+--rw trusted-client-certs | ||||
| +--rw trusted-client-cert* binary | ||||
+--rw cert-maps {tls-map-certificates}? | ||||
| +--rw cert-to-name* [id] | ||||
| +--rw id uint32 | ||||
| +--rw fingerprint x509c2n:tls-fingerprint | ||||
| +--rw map-type identityref | ||||
| +--rw name string | ||||
+--rw psk-maps {tls-map-pre-shared-keys}? | ||||
+--rw psk-map* [psk-identity] | ||||
+--rw psk-identity string | ||||
+--rw user-name nacm:user-name-type | ||||
+--rw not-valid-before? yang:date-and-time | ||||
+--rw not-valid-after? yang:date-and-time | ||||
+--rw key yang:hex-string | ||||
5.3. YANG Module | ||||
This YANG module imports YANG extensions from [RFC6536], and imports | ||||
YANG types from [RFC6991] and a YANG grouping from | ||||
[I-D.ietf-netmod-snmp-cfg]. | ||||
RFC Ed.: update the date below with the date of RFC publication | ||||
and remove this note. | ||||
<CODE BEGINS> file "ietf-system-tls-auth.@2014-05-16.yang" | ||||
module ietf-system-tls-auth { | ||||
namespace "urn:ietf:params:xml:ns:yang:ietf-system-tls-auth"; | ||||
prefix "system-tls-auth"; | ||||
import ietf-system { // draft-ietf-netmod-system-mgmt | ||||
prefix "sys"; | ||||
} | ||||
import ietf-netconf-acm { | ||||
prefix nacm; // RFC 6536 | ||||
} | ||||
import ietf-yang-types { | ||||
prefix yang; // RFC 6991 | ||||
} | ||||
import ietf-x509-cert-to-name { | ||||
prefix x509c2n; // I-D.ietf-netconf-rfc5539bis | ||||
} | ||||
organization | ||||
"IETF NETCONF (Network Configuration) Working Group"; | ||||
contact | ||||
"WG Web: <http://tools.ietf.org/wg/netconf/> | ||||
WG List: <mailto:netconf@ietf.org> | ||||
WG Chair: Mehmet Ersue | ||||
<mailto:mehmet.ersue@nsn.com> | ||||
WG Chair: Bert Wijnen | ||||
<mailto:bertietf@bwijnen.net> | ||||
Editor: Kent Watsen | ||||
<mailto:kwatsen@juniper.net> | ||||
Juergen Schoenwaelder | ||||
<mailto:j.schoenwaelder@jacobs-university.de>"; | ||||
description | ||||
"This module augments the ietf-system module in order to | ||||
add TLS authentication configuration nodes to the | ||||
'authentication' container. | ||||
Copyright (c) 2014 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 Simplified BSD | ||||
License set forth in Section 4.c of the IETF Trust's | ||||
Legal Provisions Relating to IETF Documents | ||||
(http://trustee.ietf.org/license-info). | ||||
This version of this YANG module is part of RFC XXXX; see | ||||
the RFC itself for full legal notices."; | ||||
// RFC Ed.: replace XXXX with actual RFC number and | ||||
// remove this note | ||||
// RFC Ed.: please update the date to the date of publication | ||||
revision "2014-05-24" { | ||||
description | ||||
"Initial version"; | ||||
reference | ||||
"RFC XXXX: NETCONF Server Configuration Model"; | ||||
} | ||||
// Features | ||||
feature tls-map-certificates { | ||||
description | ||||
"The tls-map-certificates feature indicates that the | ||||
NETCONF server implements mapping X.509 certificates to NETCONF | ||||
usernames."; | ||||
} | ||||
feature tls-map-pre-shared-keys { | ||||
description | description | |||
"The tls-map-pre-shared-keys feature indicates that the | "Grouping for trusted-ca-certs container."; | |||
NETCONF server implements mapping TLS pre-shared keys to NETCONF | ||||
usernames."; | ||||
} | ||||
grouping tls-global-config { | ||||
container trusted-ca-certs { | container trusted-ca-certs { | |||
description | description | |||
"A list of Certificate Authority (CA) certificates that a | "A list of Certificate Authority (CA) certificates that a | |||
NETCONF server can use to authenticate a NETCONF client's | NETCONF server can use to authenticate a NETCONF client's | |||
certificate. A client's certificate is authenticated if | certificate. A client's certificate is authenticated if | |||
its Issuer matches one of the configured trusted CA | its Issuer matches one of the configured trusted CA | |||
certificates."; | certificates."; | |||
leaf-list trusted-ca-cert { | leaf-list trusted-ca-cert { | |||
type binary; | type binary; | |||
ordered-by system; | ordered-by system; | |||
skipping to change at page 20, line 44 | skipping to change at page 18, line 39 | |||
specified by RFC 5246, Section 7.4.6, i.e.,: | specified by RFC 5246, Section 7.4.6, i.e.,: | |||
opaque ASN.1Cert<1..2^24>; | opaque ASN.1Cert<1..2^24>; | |||
"; | "; | |||
reference | reference | |||
"RFC 5246: The Transport Layer Security (TLS) | "RFC 5246: The Transport Layer Security (TLS) | |||
Protocol Version 1.2"; | Protocol Version 1.2"; | |||
} | } | |||
} | } | |||
} | ||||
grouping trusted-client-certs-grouping { | ||||
description | ||||
"Grouping for trusted-client-certs container."; | ||||
container trusted-client-certs { | container trusted-client-certs { | |||
description | description | |||
"A list of client certificates that a NETCONF server can | "A list of client certificates that a NETCONF server can | |||
use to authenticate a NETCONF client's certificate. A | use to authenticate a NETCONF client's certificate. A | |||
client's certificate is authenticated if it is an exact | client's certificate is authenticated if it is an exact | |||
match to one of the configured trusted client certificates."; | match to a configured trusted client certificates."; | |||
leaf-list trusted-client-cert { | leaf-list trusted-client-cert { | |||
type binary; | type binary; | |||
ordered-by system; | ordered-by system; | |||
description | description | |||
"The binary certificate structure, as | "The binary certificate structure, as | |||
specified by RFC 5246, Section 7.4.6, i.e.,: | specified by RFC 5246, Section 7.4.6, i.e.,: | |||
opaque ASN.1Cert<1..2^24>; | opaque ASN.1Cert<1..2^24>; | |||
"; | "; | |||
reference | reference | |||
"RFC 5246: The Transport Layer Security (TLS) | "RFC 5246: The Transport Layer Security (TLS) | |||
Protocol Version 1.2"; | Protocol Version 1.2"; | |||
} | } | |||
} | } | |||
} | ||||
// Objects for deriving NETCONF usernames from X.509 | // Objects for deriving NETCONF usernames from X.509 | |||
// certificates. | // certificates. | |||
grouping cert-maps-grouping { | ||||
description | ||||
"Grouping for cert-maps container."; | ||||
container cert-maps { | container cert-maps { | |||
if-feature tls-map-certificates; | if-feature tls-map-certificates; | |||
uses x509c2n:cert-to-name; | uses x509c2n:cert-to-name; | |||
description | description | |||
"The cert-maps container is used by a NETCONF server to | "The cert-maps container is used by a NETCONF server to | |||
map the NETCONF client's presented X.509 certificate to | map the NETCONF client's presented X.509 certificate to | |||
a NETCONF username. | a NETCONF username. | |||
If no matching and valid cert-to-name list entry can be | If no matching and valid cert-to-name list entry can be | |||
found, then the NETCONF server MUST close the connection, | found, then the NETCONF server MUST close the connection, | |||
and MUST NOT accept NETCONF messages over it."; | and MUST NOT accept NETCONF messages over it."; | |||
} | } | |||
} | ||||
// Objects for deriving NETCONF usernames from TLS | // Objects for deriving NETCONF usernames from TLS | |||
// pre-shared keys. | // pre-shared keys. | |||
grouping psk-maps-grouping { | ||||
description | ||||
"Grouping for psk-maps container."; | ||||
container psk-maps { | container psk-maps { | |||
if-feature tls-map-pre-shared-keys; | if-feature tls-map-pre-shared-keys; | |||
description | description | |||
"During the TLS Handshake, the client indicates which | "During the TLS Handshake, the client indicates which | |||
key to use by including a PSK identity in the TLS | key to use by including a PSK identity in the TLS | |||
ClientKeyExchange message. On the NETCONF server side, | ClientKeyExchange message. On the NETCONF server side, | |||
this PSK identity is used to look up an entry in the psk-map | this PSK identity is used to look up an entry in the psk-map | |||
list. If such an entry is found, and the pre-shared keys | list. If such an entry is found, and the pre-shared keys | |||
match, then the client is authenticated. The NETCONF | match, then the client is authenticated. The NETCONF | |||
server uses the value from the user-name leaf in the | server uses the value from the user-name leaf in the | |||
psk-map list as the NETCONF username. If the NETCONF | psk-map list as the NETCONF username. If the NETCONF | |||
server cannot find an entry in the psk-map list, or if | server cannot find an entry in the psk-map list, or if | |||
the pre-shared keys do not match, then the NETCONF | the pre-shared keys do not match, then the NETCONF | |||
server terminates the connection."; | server terminates the connection."; | |||
reference | reference | |||
"RFC 4279: Pre-Shared Key Ciphersuites for Transport Layer | "RFC 4279: Pre-Shared Key Ciphersuites for Transport Layer | |||
Security (TLS)"; | Security (TLS)"; | |||
list psk-map { | list psk-map { | |||
key psk-identity; | key psk-identity; | |||
description | ||||
"List a pre-shared key mappings."; | ||||
leaf psk-identity { | leaf psk-identity { | |||
type string; | type string; | |||
description | description | |||
"The PSK identity encoded as a UTF-8 string. For | "The PSK identity encoded as a UTF-8 string. For | |||
details how certain common PSK identity formats can | details how certain common PSK identity formats can | |||
be encoded in UTF-8, see section 5.1. of RFC 4279."; | be encoded in UTF-8, see section 5.1. of RFC 4279."; | |||
reference | reference | |||
"RFC 4279: Pre-Shared Key Ciphersuites for Transport | "RFC 4279: Pre-Shared Key Ciphersuites for Transport | |||
Layer Security (TLS)"; | Layer Security (TLS)"; | |||
skipping to change at page 23, line 4 | skipping to change at page 21, line 13 | |||
nacm:default-deny-all; | nacm:default-deny-all; | |||
description | description | |||
"The key associated with the PSK identity"; | "The key associated with the PSK identity"; | |||
reference | reference | |||
"RFC 4279: Pre-Shared Key Ciphersuites for Transport | "RFC 4279: Pre-Shared Key Ciphersuites for Transport | |||
Layer Security (TLS)"; | Layer Security (TLS)"; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
augment "/sys:system/sys:authentication" { | ||||
container tls { | ||||
uses tls-global-config; | ||||
} | ||||
} | ||||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
6. Security Considerations | 4. Keep-Alives for SSH and TLS | |||
One the objectives listed above, Keep-Alives for Persistent | ||||
Connections (Section 2.4.6) indicates a need for a "keep-alive" | ||||
mechanism. This section specifies how the NETCONF keep-alive | ||||
mechanism is to be implemented. | ||||
Both SSH and TLS have the ability to support keep-alives. Using | ||||
these mechanisms, the keep-alive messages are sent inside the | ||||
encrypted tunnel, thus thwarting spoof attacks. | ||||
4.1. SSH | ||||
The SSH keep-alive solution that is expected to be used when | ||||
configured using the data model defined in this document is | ||||
ubiquitous in practice, though never being explicitly defined in an | ||||
RFC. The strategy used is to purposely send a malformed request | ||||
message with a flag set to ensure a response. More specifically, per | ||||
section 4 of [RFC4253], either SSH peer can send a | ||||
SSH_MSG_GLOBAL_REQUEST message with "want reply" set to '1' and that, | ||||
if there is an error, will get back a SSH_MSG_REQUEST_FAILURE | ||||
response. Similarly, section 5 of [RFC4253] says that either SSH | ||||
peer can send a SSH_MSG_CHANNEL_REQUEST message with "want reply" set | ||||
to '1' and that, if there is an error, will get back a | ||||
SSH_MSG_CHANNEL_FAILURE response. | ||||
To ensure that the request will fail, current implementations send an | ||||
invalid "request name" or "request type", respectively. Abiding to | ||||
the extensibility guidelines specified in Section 6 of [RFC4251], | ||||
these implementations use the "name@domain". For instance, when | ||||
configured to send keep-alives, OpenSSH sends the string | ||||
"keepalive@openssh.com". In order to remain compatible with existing | ||||
implementations, this draft does not require a specific "request | ||||
name" or "request type" string be used. | ||||
4.2. TLS | ||||
The TLS keep-alive solution is defined in [RFC6520]. This solution | ||||
allows both peers to advertise if they can receive heartbeat request | ||||
messages from its peer. For standard NETCONF over TLS connections, | ||||
devices SHOULD advertise "peer_allowed_to_send", as per [RFC6520]. | ||||
This advertisement is not a "MUST" in order to grandfather existing | ||||
NETCONF over TLS implementations. For NETCONF over TLS Call Home, | ||||
the network management system MUST advertise "peer_allowed_to_send" | ||||
per [RFC6520]. This is a "MUST" so as to ensure devices can depend | ||||
in it always being there for call home connections, which is | ||||
conveniently when keep-alives are needed the most. | ||||
5. Security Considerations | ||||
The YANG modules defined in this memo are designed to be accessed via | The YANG modules defined in this memo are designed to be accessed via | |||
the NETCONF protocol [RFC6241]. Authorization for access to specific | the NETCONF protocol [RFC6241]. Authorization for access to specific | |||
portions of conceptual data and operations within this module is | portions of conceptual data and operations within this module is | |||
provided by the NETCONF access control model (NACM) [RFC6536]. | provided by the NETCONF access control model (NACM) [RFC6536]. | |||
There are a number of data nodes defined in the "ietf-netconf-server" | There are a number of data nodes defined in the "ietf-netconf-server" | |||
and "ietf-system-tls-auth" YANG modules which are writable/creatable/ | and "ietf-system-tls-auth" YANG modules which are writable/creatable/ | |||
deletable (i.e., config true, which is the default). These data | deletable (i.e., config true, which is the default). These data | |||
nodes may be considered sensitive or vulnerable in some network | nodes may be considered sensitive or vulnerable in some network | |||
skipping to change at page 24, line 5 | skipping to change at page 23, line 5 | |||
o /system/authentication/tls/psk-maps/psk-map/user-name: This leaf | o /system/authentication/tls/psk-maps/psk-map/user-name: This leaf | |||
node contains a user name that some deployments may consider | node contains a user name that some deployments may consider | |||
sensitive information. | sensitive information. | |||
o /system/authentication/tls/psk-maps/psk-map/key: This leaf node | o /system/authentication/tls/psk-maps/psk-map/key: This leaf node | |||
contains a shared key that remote clients use to authenticate | contains a shared key that remote clients use to authenticate | |||
themselves to the system. This value should not be readable or | themselves to the system. This value should not be readable or | |||
writable by anyone by default. | writable by anyone by default. | |||
7. IANA Considerations | 6. IANA Considerations | |||
This document registers two URIs in the IETF XML registry [RFC2119]. | This document registers two URIs in the IETF XML registry [RFC2119]. | |||
Following the format in [RFC3688], the following registrations are | Following the format in [RFC3688], the following registrations are | |||
requested: | requested: | |||
URI: urn:ietf:params:xml:ns:yang:ietf-netconf-server | URI: urn:ietf:params:xml:ns:yang:ietf-netconf-server | |||
Registrant Contact: The NETCONF WG of the IETF. | Registrant Contact: The NETCONF WG of the IETF. | |||
XML: N/A, the requested URI is an XML namespace. | XML: N/A, the requested URI is an XML namespace. | |||
URI: urn:ietf:params:xml:ns:yang:ietf-system-tle-auth | URI: urn:ietf:params:xml:ns:yang:ietf-system-tle-auth | |||
skipping to change at page 24, line 32 | skipping to change at page 23, line 32 | |||
name: ietf-netconf-server | name: ietf-netconf-server | |||
namespace: urn:ietf:params:xml:ns:yang:ietf-netconf-server | namespace: urn:ietf:params:xml:ns:yang:ietf-netconf-server | |||
prefix: ncserver | prefix: ncserver | |||
reference: RFC XXXX | reference: RFC XXXX | |||
name: ietf-system-tls-auth | name: ietf-system-tls-auth | |||
namespace: urn:ietf:params:xml:ns:yang:ietf-system-tls-auth | namespace: urn:ietf:params:xml:ns:yang:ietf-system-tls-auth | |||
prefix: sys-tls-auth | prefix: sys-tls-auth | |||
reference: RFC XXXX | reference: RFC XXXX | |||
8. Other Considerations | 7. Other Considerations | |||
The YANG module define herein does not itself support virtual routing | The YANG module define herein does not itself support virtual routing | |||
and forwarding (VRF). It is expected that external modules will | and forwarding (VRF). It is expected that external modules will | |||
augment in VRF designations when needed. | augment in VRF designations when needed. | |||
9. Acknowledgements | 8. Acknowledgements | |||
The authors would like to thank for following for lively discussions | The authors would like to thank for following for lively discussions | |||
on list and in the halls (ordered by last name): Andy Bierman, Martin | on list and in the halls (ordered by last name): Andy Bierman, Martin | |||
Bjorklund, Benoit Claise, David Lamparter, Alan Luchuk, Ladislav | Bjorklund, Benoit Claise, David Lamparter, Alan Luchuk, Ladislav | |||
Lhotka, Radek Krejci, Tom Petch, and Phil Shafer. | Lhotka, Radek Krejci, Tom Petch, and Phil Shafer. | |||
Juergen Schoenwaelder and was partly funded by Flamingo, a Network of | Juergen Schoenwaelder and was partly funded by Flamingo, a Network of | |||
Excellence project (ICT-318488) supported by the European Commission | Excellence project (ICT-318488) supported by the European Commission | |||
under its Seventh Framework Programme. | under its Seventh Framework Programme. | |||
10. References | 9. References | |||
10.1. Normative References | 9.1. Normative References | |||
[I-D.ietf-netconf-rfc5539bis] | ||||
Badra, M., Luchuk, A., and J. Schoenwaelder, "Using the | ||||
NETCONF Protocol over Transport Layer Security (TLS)", | ||||
draft-ietf-netconf-rfc5539bis-04 (work in progress), | ||||
October 2013. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels ", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC4251] Ylonen, T. and C. Lonvick, "The Secure Shell (SSH) | [RFC4251] Ylonen, T. and C. Lonvick, "The Secure Shell (SSH) | |||
Protocol Architecture ", RFC 4251, January 2006. | Protocol Architecture", RFC 4251, January 2006. | |||
[RFC4253] Ylonen, T. and C. Lonvick, "The Secure Shell (SSH) | [RFC4253] Ylonen, T. and C. Lonvick, "The Secure Shell (SSH) | |||
Transport Layer Protocol ", RFC 4253, January 2006. | Transport Layer Protocol", RFC 4253, January 2006. | |||
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
the Network Configuration Protocol (NETCONF) ", RFC 6020, | the Network Configuration Protocol (NETCONF)", RFC 6020, | |||
October 2010. | October 2010. | |||
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | ||||
and A. Bierman, Ed., "NETCONF Configuration Protocol", RFC | ||||
6241, June 2011. | ||||
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | ||||
Shell (SSH)", RFC 6242, June 2011. | ||||
[RFC6520] Seggelmann, R., Tuexen, M., and M. Williams, "Transport | [RFC6520] Seggelmann, R., Tuexen, M., and M. Williams, "Transport | |||
Layer Security (TLS) and Datagram Transport Layer Security | Layer Security (TLS) and Datagram Transport Layer Security | |||
(DTLS) Heartbeat Extension ", RFC 6520, February 2012. | (DTLS) Heartbeat Extension", RFC 6520, February 2012. | |||
[RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration | [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration | |||
Protocol (NETCONF) Access Control Model ", RFC 6536, March | Protocol (NETCONF) Access Control Model", RFC 6536, March | |||
2012. | 2012. | |||
[RFC6991] Schoenwaelder, J., "Common YANG Data Types", RFC 6991, | [RFC6991] Schoenwaelder, J., "Common YANG Data Types", RFC 6991, | |||
July 2013. | July 2013. | |||
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | [draft-ieft-netconf-reverse-ssh] | |||
and A. Bierman, Ed., "NETCONF Configuration Protocol", RFC | Watsen, K., "NETCONF over SSH Call Home", draft-ieft- | |||
6241, June 2011. | netconf-reverse-ssh-00 (work in progress), May 2014. | |||
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | ||||
Shell (SSH)", RFC 6242, June 2011. | ||||
[I-D.ietf-netconf-rfc5539bis] | ||||
Badra, M., Luchuk, A., and J. Schoenwaelder, "Using the | ||||
NETCONF Protocol over Transport Layer Security (TLS) ", | ||||
draft-ietf-netconf-rfc5539bis-04 (work in progress), | ||||
October 2013. | ||||
[I-D.ietf-netmod-snmp-cfg] | [draft-ietf-netmod-snmp-cfg] | |||
Bjorklund, M. and J. Schoenwaelder, "A YANG Data Model for | Bjorklund, M. and J. Schoenwaelder, "A YANG Data Model for | |||
SNMP Configuration", draft-ietf-netmod-snmp-cfg-03 (work | SNMP Configuration", draft-ietf-netmod-snmp-cfg-03 (work | |||
in progress), November 2013. | in progress), November 2013. | |||
[draft-ieft-netconf-reverse-ssh] | ||||
Watsen, K., "NETCONF over SSH Call Home ", draft-ieft- | ||||
netconf-reverse-ssh-00 (work in progress), May 2014. | ||||
[draft-ietf-netmod-system-mgmt] | [draft-ietf-netmod-system-mgmt] | |||
Bierman, A., "A YANG Data Model for System Management ", | Bierman, A., "A YANG Data Model for System Management", | |||
draft-ieft-netmod-system-mgmt-16 (work in progress), May | draft-ieft-netmod-system-mgmt-16 (work in progress), May | |||
2014. | 2014. | |||
10.2. Informative References | 9.2. Informative References | |||
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
January 2004. | January 2004. | |||
Appendix A. Example: SSH Transport Configuration | Appendix A. Examples | |||
<netconf-server xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-server"> | ||||
<listen> | ||||
<ssh> | ||||
<port>831</port> | ||||
</ssh> | ||||
</listen> | ||||
<call-home> | ||||
<network-managers> | ||||
<network-manager> | ||||
<name>config-mgr</name> | ||||
<description> | ||||
This entry requests the device to periodically | ||||
connect to the network manager. | ||||
</description> | ||||
<endpoints> | ||||
<endpoint> | ||||
<address>config-mgr1.example.com</address> | ||||
</endpoint> | ||||
<endpoint> | ||||
<address>config-mgr2.example.com</address> | ||||
</endpoint> | ||||
</endpoints> | ||||
<transport> | ||||
<ssh> | ||||
<host-keys> | ||||
<host-key> | ||||
<name>ssh_host_key_cert</name> | ||||
</host-key> | ||||
<host-key> | ||||
<name>ssh_host_key_cert2</name> | ||||
</host-key> | ||||
</host-keys> | ||||
</ssh> | ||||
</transport> | ||||
<connection-type> | ||||
<periodic> | ||||
<timeout-mins>5</timeout-mins> | ||||
<linger-secs>10</linger-secs> | ||||
</periodic> | ||||
</connection-type> | ||||
<reconnect-strategy> | ||||
<start-with>last-connected</start-with> | ||||
<interval-secs>10</interval-secs> | ||||
<count-max>3</count-max> | ||||
</reconnect-strategy> | ||||
</network-manager> | ||||
</network-managers> | ||||
</call-home> | ||||
</netconf-server> | ||||
Appendix B. Example: TLS Transport Configuration | ||||
<netconf-server xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-server"> | ||||
<listen> | ||||
<tls> | ||||
<interface> | ||||
<address>192.0.2.1</address> | ||||
<port>6514</port> | ||||
</interface> | ||||
</tls> | ||||
</listen> | ||||
<call-home> | ||||
<network-managers> | ||||
<network-manager> | ||||
<name>log-monitor</name> | ||||
<description> | ||||
This entry requests the device to maintain a | ||||
persistent connect to the network manager. | ||||
</description> | ||||
<endpoints> | ||||
<endpoint> | ||||
<address>log-monitor1.example.com</address> | ||||
</endpoint> | ||||
<endpoint> | ||||
<address>log-monitor2.example.com</address> | ||||
</endpoint> | ||||
</endpoints> | ||||
<transport> | ||||
<tls/> | ||||
</transport> | ||||
<connection-type> | ||||
<persistent> | ||||
<keep-alives> | ||||
<interval-secs>5</interval-secs> | ||||
<count-max>3</count-max> | ||||
</keep-alives> | ||||
</persistent> | ||||
</connection-type> | ||||
<reconnect-strategy> | ||||
<start-with>first-listed</start-with> | ||||
<interval-secs>10</interval-secs> | ||||
<count-max>4</count-max> | ||||
</reconnect-strategy> | ||||
</network-manager> | ||||
</network-managers> | ||||
</call-home> | ||||
</netconf-server> | ||||
Appendix C. Example: TLS Authentication Configuration | ||||
<system xmlns="urn:ietf:params:xml:ns:yang:ietf-system"> | ||||
<authentication> | ||||
<tls xmlns="urn:ietf:params:xml:ns:yang:ietf-system-tls-auth"> | ||||
<trusted-ca-certs> | ||||
<trusted-ca-cert> | ||||
QW4gRWFzdGVyIGVnZywgZm9yIHRob3NlIHdobyBtaWdodCBsb29rICA6KQo= | ||||
</trusted-ca-cert> | ||||
</trusted-ca-certs> | ||||
<trusted-client-certs> | ||||
<trusted-client-cert> | ||||
SSBhbSB0aGUgZWdnIG1hbiwgdGhleSBhcmUgdGhlIGVnZyBtZW4uCg== | ||||
</trusted-client-cert> | ||||
<trusted-client-cert> | ||||
SSBhbSB0aGUgd2FscnVzLCBnb28gZ29vIGcnam9vYi4K | ||||
</trusted-client-cert> | ||||
</trusted-client-certs> | ||||
<cert-maps> | ||||
<cert-to-name> | ||||
<id>1</id> | ||||
<fingerprint>11:0A:05:11:00</fingerprint> | ||||
<map-type>x509c2n:san-any</map-type> | ||||
</cert-to-name> | ||||
<cert-to-name> | ||||
<id>2</id> | ||||
<fingerprint>11:0A:05:11:00</fingerprint> | ||||
<map-type>x509c2n:specified</map-type> | ||||
<name>Joe Cool</name> | ||||
</cert-to-name> | ||||
</cert-maps> | ||||
<psk-maps> | ||||
<psk-map> | ||||
<psk-identity>a8gc8]klh59</psk-identity> | ||||
<user-name>admin</user-name> | ||||
<not-valid-before>2013-01-01T00:00:00Z</not-valid-before> | ||||
<not-valid-after>2014-01-01T00:00:00Z</not-valid-after> | ||||
</psk-map> | ||||
</psk-maps> | ||||
</tls> | A.1. SSH Transport Configuration | |||
</authentication> | ||||
</system> | ||||
Appendix D. Change Log | <netconf-server xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-server"> | |||
<listen> | ||||
<name>foo bar</name> | ||||
<ssh> | ||||
<port>831</port> | ||||
</ssh> | ||||
</listen> | ||||
<call-home> | ||||
<name>config-mgr</name> | ||||
<ssh> | ||||
<endpoints> | ||||
<endpoint> | ||||
<name>east-data-center</name> | ||||
<address>11.22.33.44</address> | ||||
</endpoint> | ||||
<endpoint> | ||||
<name>west-data-center</name> | ||||
<address>55.66.77.88</address> | ||||
</endpoint> | ||||
</endpoints> | ||||
</ssh> | ||||
</call-home> | ||||
</netconf-server> | ||||
D.1. I-D to 00 | A.2. TLS Transport Configuration | |||
o Changed title to "NETCONF Server Configuration Model" | <netconf-server xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-server"> | |||
<listen> | ||||
<name>foo bar</name> | ||||
<ssh> | ||||
<port>831</port> | ||||
</ssh> | ||||
</listen> | ||||
<call-home> | ||||
<name>config-mgr</name> | ||||
<tls> | ||||
<endpoints> | ||||
<endpoint> | ||||
<name>east-data-center</name> | ||||
<address>11.22.33.44</address> | ||||
</endpoint> | ||||
<endpoint> | ||||
<name>west-data-center</name> | ||||
<address>55.66.77.88</address> | ||||
o Mapped inbound/outbound to listen/call-home | </endpoint> | |||
</endpoints> | ||||
</tls> | ||||
</call-home> | ||||
<tls-client-auth> | ||||
<trusted-ca-certs> | ||||
<trusted-ca-cert> | ||||
QW4gRWFzdGVyIGVnZywgZm9yIHRob3NlIHdobyBtaWdodCBsb29rICA6KQo= | ||||
</trusted-ca-cert> | ||||
</trusted-ca-certs> | ||||
<trusted-client-certs> | ||||
<trusted-client-cert> | ||||
SSBhbSB0aGUgZWdnIG1hbiwgdGhleSBhcmUgdGhlIGVnZyBtZW4uCg== | ||||
</trusted-client-cert> | ||||
<trusted-client-cert> | ||||
SSBhbSB0aGUgd2FscnVzLCBnb28gZ29vIGcnam9vYi4K | ||||
</trusted-client-cert> | ||||
</trusted-client-certs> | ||||
<cert-maps> | ||||
<cert-to-name> | ||||
<id>1</id> | ||||
<fingerprint>11:0A:05:11:00</fingerprint> | ||||
<map-type>x509c2n:san-any</map-type> | ||||
</cert-to-name> | ||||
<cert-to-name> | ||||
<id>2</id> | ||||
<fingerprint>11:0A:05:11:00</fingerprint> | ||||
<map-type>x509c2n:specified</map-type> | ||||
<name>Joe Cool</name> | ||||
</cert-to-name> | ||||
</cert-maps> | ||||
<psk-maps> | ||||
<psk-map> | ||||
<psk-identity>a8gc8]klh59</psk-identity> | ||||
<user-name>admin</user-name> | ||||
<not-valid-before>2013-01-01T00:00:00Z</not-valid-before> | ||||
<not-valid-after>2014-01-01T00:00:00Z</not-valid-after> | ||||
</psk-map> | ||||
</psk-maps> | ||||
</tls-client-auth> | ||||
</netconf-server> | ||||
o Restructured YANG module to place transport selection deeper into | Appendix B. Change Log | |||
the tree, providing a more intuitive data model | B.1. 00 to 01 | |||
o Added section "Keep-Alives for SSH and TLS" | o Restructured document so it flows better | |||
o Updated the Security Considerations section | o Added trusted-ca-certs and trusted-client-certs objects into the | |||
ietf-system-tls-auth module | ||||
o Added text for supporting VRFs via augments | B.2. 01 to 02 | |||
o Factored the TLS-AUTH config into another module augmenting the | o removed the "one-to-many" construct | |||
"ietf-system" module | ||||
D.2. 00 to 01 | o removed "address" as a key field | |||
o Restructured document so it flows better | o removed "network-manager" terminology | |||
o Added trusted-ca-certs and trusted-client-certs objects into the | o moved open issues to github issues | |||
ietf-system-tls-auth module | ||||
Appendix E. Open Issues | o brought TLS client auth back into model | |||
o NETCONF implementations typically have config parameters such as | Appendix C. Open Issues | |||
session timeouts or hello timeouts. Shall they be included in | ||||
this model? | ||||
o Do we need knobs to enable/disable call-home without the need to | Please see: https://github.com/netconf-wg/server-model/issues. | |||
remove all the call-home client configuration? | ||||
Authors' Addresses | Authors' Addresses | |||
Kent Watsen | Kent Watsen | |||
Juniper Networks | Juniper Networks | |||
EMail: kwatsen@juniper.net | EMail: kwatsen@juniper.net | |||
Juergen Schoenwaelder | Juergen Schoenwaelder | |||
Jacobs University Bremen | Jacobs University Bremen | |||
End of changes. 92 change blocks. | ||||
727 lines changed or deleted | 597 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |