| < draft-ietf-netconf-sztp-csr-05.txt | draft-ietf-netconf-sztp-csr-06.txt > | |||
|---|---|---|---|---|
| NETCONF Working Group K. Watsen | NETCONF Working Group K. Watsen | |||
| Internet-Draft Watsen Networks | Internet-Draft Watsen Networks | |||
| Updates: 8572 (if approved) R. Housley | Updates: 8572 (if approved) R. Housley | |||
| Intended status: Standards Track Vigil Security, LLC | Intended status: Standards Track Vigil Security, LLC | |||
| Expires: 8 January 2022 S. Turner | Expires: 16 February 2022 S. Turner | |||
| sn3rd | sn3rd | |||
| 7 July 2021 | 15 August 2021 | |||
| Conveying a Certificate Signing Request (CSR) in a Secure Zero Touch | Conveying a Certificate Signing Request (CSR) in a Secure Zero Touch | |||
| Provisioning (SZTP) Bootstrapping Request | Provisioning (SZTP) Bootstrapping Request | |||
| draft-ietf-netconf-sztp-csr-05 | draft-ietf-netconf-sztp-csr-06 | |||
| Abstract | Abstract | |||
| This draft extends the "get-bootstrapping-data" RPC defined in RFC | This draft extends the "get-bootstrapping-data" RPC defined in RFC | |||
| 8572 to include an optional certificate signing request (CSR), | 8572 to include an optional certificate signing request (CSR), | |||
| enabling a bootstrapping device to additionally obtain an identity | enabling a bootstrapping device to additionally obtain an identity | |||
| certificate (e.g., an LDevID, from IEEE 802.1AR) as part of the | certificate (e.g., an LDevID, from IEEE 802.1AR) as part of the | |||
| "onboarding information" response provided in the RPC-reply. | "onboarding information" response provided in the RPC-reply. | |||
| Editorial Note (To be removed by RFC Editor) | Editorial Note (To be removed by RFC Editor) | |||
| skipping to change at page 1, line 42 ¶ | skipping to change at page 1, line 42 ¶ | |||
| * "XXXX" --> the assigned numerical RFC value for this draft | * "XXXX" --> the assigned numerical RFC value for this draft | |||
| * "AAAA" --> the assigned RFC value for I-D.ietf-netconf-crypto- | * "AAAA" --> the assigned RFC value for I-D.ietf-netconf-crypto- | |||
| types | types | |||
| Artwork in this document contains a placeholder value for the | Artwork in this document contains a placeholder value for the | |||
| publication date of this draft. Please apply the following | publication date of this draft. Please apply the following | |||
| replacement: | replacement: | |||
| * "2021-07-07" --> the publication date of this draft | * "2021-08-15" --> the publication date of this draft | |||
| This document contains references to other drafts in progress, both | This document contains references to other drafts in progress, both | |||
| in the Normative References section, as well as in body text | in the Normative References section, as well as in body text | |||
| throughout. Please update the following references to reflect their | throughout. Please update the following references to reflect their | |||
| final RFC assignments: | final RFC assignments: | |||
| * I-D.ietf-netconf-crypto-types | * I-D.ietf-netconf-crypto-types | |||
| * I-D.ietf-netconf-keystore | * I-D.ietf-netconf-keystore | |||
| * I-D.ietf-netconf-trust-anchors | * I-D.ietf-netconf-trust-anchors | |||
| skipping to change at page 2, line 25 ¶ | skipping to change at page 2, line 25 ¶ | |||
| 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 https://datatracker.ietf.org/drafts/current/. | Drafts is at https://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 8 January 2022. | This Internet-Draft will expire on 16 February 2022. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
| license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
| Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
| and restrictions with respect to this document. Code Components | and restrictions with respect to this document. Code Components | |||
| extracted from this document must include Simplified BSD License text | extracted from this document must include Simplified BSD License text | |||
| as described in Section 4.e of the Trust Legal Provisions and are | as described in Section 4.e of the Trust Legal Provisions and are | |||
| provided without warranty as described in the Simplified BSD License. | provided without warranty as described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 1.3. Requirements Language . . . . . . . . . . . . . . . . . . 4 | 1.3. Requirements Language . . . . . . . . . . . . . . . . . . 4 | |||
| 1.4. Conventions . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.4. Conventions . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. The "ietf-sztp-csr" Module . . . . . . . . . . . . . . . . . 4 | 2. The "ietf-sztp-csr" Module . . . . . . . . . . . . . . . . . 4 | |||
| 2.1. Data Model Overview . . . . . . . . . . . . . . . . . . . 4 | 2.1. Data Model Overview . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.2. Example Usage . . . . . . . . . . . . . . . . . . . . . . 7 | 2.2. Example Usage . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 2.3. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 13 | 2.3. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 3. Security Considerations . . . . . . . . . . . . . . . . . . . 23 | 3. The "ietf-ztp-types" Module . . . . . . . . . . . . . . . . . 17 | |||
| 3.1. SZTP-Client Considerations . . . . . . . . . . . . . . . 23 | 3.1. Data Model Overview . . . . . . . . . . . . . . . . . . . 17 | |||
| 3.1.1. Ensuring the Integrity of Asymmetric Private Keys . . 23 | 3.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 3.1.2. Reuse of a Manufacturer-generated Private Key . . . . 23 | 4. Security Considerations . . . . . . . . . . . . . . . . . . . 27 | |||
| 3.1.3. Replay Attack Protection . . . . . . . . . . . . . . 24 | 4.1. SZTP-Client Considerations . . . . . . . . . . . . . . . 27 | |||
| 3.1.4. Connecting to an Untrusted Bootstrap Server . . . . . 24 | 4.1.1. Ensuring the Integrity of Asymmetric Private Keys . . 27 | |||
| 3.1.5. Selecting the Best Origin Authentication Mechanism . 25 | 4.1.2. Reuse of a Manufacturer-generated Private Key . . . . 27 | |||
| 3.1.6. Clearing the Private Key and Associated | 4.1.3. Replay Attack Protection . . . . . . . . . . . . . . 28 | |||
| Certificate . . . . . . . . . . . . . . . . . . . . . 25 | 4.1.4. Connecting to an Untrusted Bootstrap Server . . . . . 28 | |||
| 3.2. SZTP-Server Considerations . . . . . . . . . . . . . . . 25 | 4.1.5. Selecting the Best Origin Authentication Mechanism . 29 | |||
| 3.2.1. Conveying Proof of Possession to a CA . . . . . . . . 25 | 4.1.6. Clearing the Private Key and Associated | |||
| 3.2.2. Supporting SZTP-Clients that don't trust the | Certificate . . . . . . . . . . . . . . . . . . . . . 29 | |||
| SZTP-Server . . . . . . . . . . . . . . . . . . . . . 26 | 4.2. SZTP-Server Considerations . . . . . . . . . . . . . . . 29 | |||
| 3.2.3. YANG Module Considerations . . . . . . . . . . . . . 26 | 4.2.1. Conveying Proof of Possession to a CA . . . . . . . . 29 | |||
| 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26 | 4.2.2. Supporting SZTP-Clients that don't trust the | |||
| 4.1. The "IETF XML" Registry . . . . . . . . . . . . . . . . . 26 | SZTP-Server . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 4.2. The "YANG Module Names" Registry . . . . . . . . . . . . 27 | 4.3. Security Considerations for the "ietf-sztp-csr" YANG | |||
| 5. References . . . . . . . . . . . . . . . . . . . . . . . . . 27 | Module . . . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 5.1. Normative References . . . . . . . . . . . . . . . . . . 27 | 4.4. Security Considerations for the "ietf-ztp-types" YANG | |||
| 5.2. Informative References . . . . . . . . . . . . . . . . . 28 | Module . . . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 29 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 5.1. The "IETF XML" Registry . . . . . . . . . . . . . . . . . 31 | ||||
| 5.2. The "YANG Module Names" Registry . . . . . . . . . . . . 31 | ||||
| 6. References . . . . . . . . . . . . . . . . . . . . . . . . . 31 | ||||
| 6.1. Normative References . . . . . . . . . . . . . . . . . . 31 | ||||
| 6.2. Informative References . . . . . . . . . . . . . . . . . 33 | ||||
| Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
| Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
| 1. Introduction | 1. Introduction | |||
| 1.1. Overview | 1.1. Overview | |||
| This draft extends the "get-bootstrapping-data" RPC defined in | This draft extends the "get-bootstrapping-data" RPC defined in | |||
| [RFC8572] to include an optional certificate signing request (CSR) | [RFC8572] to include an optional certificate signing request (CSR) | |||
| [RFC2986], enabling a bootstrapping device to additionally obtain an | [RFC2986], enabling a bootstrapping device to additionally obtain an | |||
| identity certificate (e.g., an LDevID [Std-802.1AR-2018]) as part of | identity certificate (e.g., an LDevID [Std-802.1AR-2018]) as part of | |||
| the "onboarding information" response provided in the RPC-reply. | the "onboarding information" response provided in the RPC-reply. | |||
| The ability to provision an identity certificate that is purpose- | The ability to provision an identity certificate that is purpose- | |||
| built for a production environment during the bootstrapping process | built for a production environment during the bootstrapping process | |||
| removes reliance on the manufacturer CA, and it also enables the | removes reliance on the manufacturer CA, and it also enables the | |||
| bootstraped device to join the production environment with an | bootstraped device to join the production environment with an | |||
| appropriate identity and other attributes in its LDevID certificate. | appropriate identity and other attributes in its LDevID certificate. | |||
| Two YANG [RFC7950] modules are defined. The "ietf-ztp-types" module | ||||
| defines three YANG groupings for the various messages defined in this | ||||
| document. The "ietf-sztp-csr" module augments two groupings into the | ||||
| "get-bootstrapping-data" RPC and defines a YANG Data Structure | ||||
| [RFC8791] around the third grouping. | ||||
| 1.2. Terminology | 1.2. Terminology | |||
| This document uses the following terms from [RFC8572]: | This document uses the following terms from [RFC8572]: | |||
| * Bootstrap Server | * Bootstrap Server | |||
| * Bootstrapping Data | * Bootstrapping Data | |||
| * Conveyed Information | * Conveyed Information | |||
| * Device | * Device | |||
| * Manufacturer | * Manufacturer | |||
| * Onboarding Information | * Onboarding Information | |||
| skipping to change at page 4, line 32 ¶ | skipping to change at page 4, line 49 ¶ | |||
| 1.4. Conventions | 1.4. Conventions | |||
| Various examples used in this document use a placeholder value for | Various examples used in this document use a placeholder value for | |||
| binary data that has been base64 encoded (e.g., "BASE64VALUE="). | binary data that has been base64 encoded (e.g., "BASE64VALUE="). | |||
| This placeholder value is used as real base64 encoded structures are | This placeholder value is used as real base64 encoded structures are | |||
| often many lines long and hence distracting to the example being | often many lines long and hence distracting to the example being | |||
| presented. | presented. | |||
| 2. The "ietf-sztp-csr" Module | 2. The "ietf-sztp-csr" Module | |||
| This section defines a YANG 1.1 [RFC7950] module that augments the | The "ietf-sztp-csr" module is a YANG 1.1 [RFC7950] module that | |||
| "ietf-sztp-bootstrap-server" module defined in [RFC8572] and defines | augments the "ietf-sztp-bootstrap-server" module defined in [RFC8572] | |||
| a YANG "structure". | and defines a YANG "structure" that is to be conveyed in the "error- | |||
| info" node defined in Section 7.1 of [RFC8040]. | ||||
| The augmentation adds two nodes ("csr-support" and "csr") to the | ||||
| "input" parameter of the "get-bootstrapping-data" RPC defined in | ||||
| [RFC8572]. | ||||
| The YANG structure, "request-info", defines data returned in the | ||||
| "error-info" node defined in Section 7.1 of [RFC8040]. | ||||
| 2.1. Data Model Overview | 2.1. Data Model Overview | |||
| The following tree diagram [RFC8340] illustrates the "ietf-sztp-csr" | The following tree diagram [RFC8340] illustrates the "ietf-sztp-csr" | |||
| module. The diagram shows the definition of an augmentation adding | module. | |||
| descendant nodes "csr-support" and "csr" and the definition of a | ||||
| structure called "request-info". | ||||
| In the order of their intended use: | ||||
| * The "csr-support" node is used by the SZTP-client to signal to the | ||||
| SZTP-server that it supports the ability the generate CSRs, per | ||||
| this specification. The "csr-support" parameter carries details | ||||
| regarding the SZTP-client's ability to generate CSRs. | ||||
| * The "request-info" structure is used by the SZTP-server to signal | ||||
| back to the SZTP-client its desire to sign a CSR. The "request- | ||||
| info" structure additionally communicates details about the CSR | ||||
| the SZTP-client is to generate. | ||||
| * The "csr" node is used by the SZTP-client to communicate its CSR | ||||
| to the SZTP-server. Not shown is how the SZTP-server communicates | ||||
| the signed certificate to the SZTP-client; how to do this is | ||||
| discussed later in this document. | ||||
| module: ietf-sztp-csr | module: ietf-sztp-csr | |||
| augment /sztp-svr:get-bootstrapping-data/sztp-svr:input: | augment /sztp-svr:get-bootstrapping-data/sztp-svr:input: | |||
| +---w (msg-type)? | +---w (msg-type)? | |||
| +--:(csr-support) | +--:(csr-support) | |||
| | +---w csr-support! | | +---w csr-support | |||
| | +---w key-generation! | | +---w key-generation! | |||
| | | +---w supported-algorithms | | | +---w supported-algorithms | |||
| | | +---w algorithm-identifier* binary | | | +---w algorithm-identifier* binary | |||
| | +---w csr-generation | | +---w csr-generation | |||
| | +---w supported-formats | | +---w supported-formats | |||
| | +---w format-identifier* identityref | | +---w format-identifier* identityref | |||
| +--:(csr) | +--:(csr) | |||
| +---w csr! | +---w (csr-type) | |||
| +---w (request-type) | +--:(p10-csr) | |||
| +--:(p10) | | +---w p10-csr? ct:csr | |||
| | +---w p10? ct:csr | +--:(cmc-csr) | |||
| +--:(cmc) | | +---w cmc-csr? binary | |||
| | +---w cmc? binary | +--:(cmp-csr) | |||
| +--:(cmp) | +---w cmp-csr? binary | |||
| +---w cmp? binary | ||||
| structure: request-info | structure: csr-request | |||
| +--ro key-generation! | +--ro key-generation! | |||
| | +--ro selected-algorithm | | +--ro selected-algorithm | |||
| | +--ro algorithm-identifier binary | | +--ro algorithm-identifier binary | |||
| +--ro csr-generation | +--ro csr-generation | |||
| | +--ro selected-format | | +--ro selected-format | |||
| | +--ro format-identifier identityref | | +--ro format-identifier identityref | |||
| +--ro cert-req-info? ietf-crypto-types:csr-info | +--ro csr-parameters? ietf-crypto-types:csr-info | |||
| The augmentation defines two kinds of parameters that an SZTP-client | ||||
| can send to an SZTP-server. The YANG structure defines one | ||||
| collection of parameters that an SZTP-server can send to an SZTP- | ||||
| client. | ||||
| In the order of their intended use: | ||||
| * The "csr-support" node is used by the SZTP-client to signal to the | ||||
| SZTP-server that it supports the ability the generate CSRs. This | ||||
| parameter conveys if the SZTP-client is able to generate an new | ||||
| asymmetric key and, if so, which key algorithms it supports, as | ||||
| well as conveys what kinds of CSR structures the SZTP-client is | ||||
| able to generate. | ||||
| * The "csr-request" structure is used by the SZTP-server to request | ||||
| the SZTP-client to generate a CSR. This structure is used to | ||||
| select the key algorithm the SZTP-client should use to generate a | ||||
| new asymmetric key, if supported, the kind of CSR structure the | ||||
| SZTP-client should generate and, optionally, the content for the | ||||
| CSR itself. | ||||
| * The various "csr" nodes are used by the SZTP-client to communicate | ||||
| a CSR to the SZTP-server. | ||||
| | No data model is defined enabling an SZTP-server to communicate | ||||
| | the signed certificate to the SZTP-client. How to do this is | ||||
| | discussed in Section 2.2. | ||||
| To further illustrate how the augmentation and structure defined by | To further illustrate how the augmentation and structure defined by | |||
| the "ietf-sztp-csr" module are used, below are two additional tree | the "ietf-sztp-csr" module are used, below are two additional tree | |||
| diagrams showing these nodes placed where they are used. | diagrams showing these nodes placed where they are used. | |||
| The following tree diagram [RFC8340] illustrates SZTP's "get- | The following tree diagram [RFC8340] illustrates SZTP's "get- | |||
| bootstrapping-data" RPC with the augmentation in place. | bootstrapping-data" RPC with the augmentation in place. | |||
| =============== NOTE: '\' line wrapping per RFC 8792 ================ | =============== NOTE: '\' line wrapping per RFC 8792 ================ | |||
| module: ietf-sztp-bootstrap-server | module: ietf-sztp-bootstrap-server | |||
| rpcs: | rpcs: | |||
| +---x get-bootstrapping-data | +---x get-bootstrapping-data | |||
| +---w input | +---w input | |||
| | +---w signed-data-preferred? empty | | +---w signed-data-preferred? empty | |||
| | +---w hw-model? string | | +---w hw-model? string | |||
| | +---w os-name? string | | +---w os-name? string | |||
| | +---w os-version? string | | +---w os-version? string | |||
| | +---w nonce? binary | | +---w nonce? binary | |||
| | +---w (sztp-csr:msg-type)? | | +---w (sztp-csr:msg-type)? | |||
| | +--:(sztp-csr:csr-support) | | +--:(sztp-csr:csr-support) | |||
| | | +---w sztp-csr:csr-support! | | | +---w sztp-csr:csr-support | |||
| | | +---w sztp-csr:key-generation! | | | +---w sztp-csr:key-generation! | |||
| | | | +---w sztp-csr:supported-algorithms | | | | +---w sztp-csr:supported-algorithms | |||
| | | | +---w sztp-csr:algorithm-identifier* bina\ | | | | +---w sztp-csr:algorithm-identifier* bina\ | |||
| ry | ry | |||
| | | +---w sztp-csr:csr-generation | | | +---w sztp-csr:csr-generation | |||
| | | +---w sztp-csr:supported-formats | | | +---w sztp-csr:supported-formats | |||
| | | +---w sztp-csr:format-identifier* identit\ | | | +---w sztp-csr:format-identifier* identit\ | |||
| yref | yref | |||
| | +--:(sztp-csr:csr) | | +--:(sztp-csr:csr) | |||
| | +---w sztp-csr:csr! | | +---w (sztp-csr:csr-type) | |||
| | +---w (sztp-csr:request-type) | | +--:(sztp-csr:p10-csr) | |||
| | +--:(sztp-csr:p10) | | | +---w sztp-csr:p10-csr? ct:csr | |||
| | | +---w sztp-csr:p10? ct:csr | | +--:(sztp-csr:cmc-csr) | |||
| | +--:(sztp-csr:cmc) | | | +---w sztp-csr:cmc-csr? binary | |||
| | | +---w sztp-csr:cmc? binary | | +--:(sztp-csr:cmp-csr) | |||
| | +--:(sztp-csr:cmp) | | +---w sztp-csr:cmp-csr? binary | |||
| | +---w sztp-csr:cmp? binary | ||||
| +--ro output | +--ro output | |||
| +--ro reporting-level? enumeration {onboarding-server}? | +--ro reporting-level? enumeration {onboarding-server}? | |||
| +--ro conveyed-information cms | +--ro conveyed-information cms | |||
| +--ro owner-certificate? cms | +--ro owner-certificate? cms | |||
| +--ro ownership-voucher? cms | +--ro ownership-voucher? cms | |||
| The following tree diagram [RFC8340] illustrates RESTCONF's "errors" | The following tree diagram [RFC8340] illustrates RESTCONF's "errors" | |||
| RPC-reply message with the "request-info" structure in place. | RPC-reply message with the "csr-request" structure in place. | |||
| module: ietf-restconf | module: ietf-restconf | |||
| +--ro errors | +--ro errors | |||
| +--ro error* [] | +--ro error* [] | |||
| +--ro error-type enumeration | +--ro error-type enumeration | |||
| +--ro error-tag string | +--ro error-tag string | |||
| +--ro error-app-tag? string | +--ro error-app-tag? string | |||
| +--ro error-path? instance-identifier | +--ro error-path? instance-identifier | |||
| +--ro error-message? string | +--ro error-message? string | |||
| +--ro error-info | +--ro error-info | |||
| +--ro request-info | +--ro csr-request | |||
| +--ro key-generation! | +--ro key-generation! | |||
| | +--ro selected-algorithm | | +--ro selected-algorithm | |||
| | +--ro algorithm-identifier binary | | +--ro algorithm-identifier binary | |||
| +--ro csr-generation | +--ro csr-generation | |||
| | +--ro selected-format | | +--ro selected-format | |||
| | +--ro format-identifier identityref | | +--ro format-identifier identityref | |||
| +--ro cert-req-info? ct:csr-info | +--ro csr-parameters? ct:csr-info | |||
| 2.2. Example Usage | 2.2. Example Usage | |||
| | The examples below are encoded using JSON, but they could | | The examples below are encoded using JSON, but they could | |||
| | equally well be encoded using XML, as is supported by SZTP. | | equally well be encoded using XML, as is supported by SZTP. | |||
| An SZTP-client implementing this specification would signal to the | An SZTP-client implementing this specification would signal to the | |||
| bootstrap server its willingness to generate a CSR by including the | bootstrap server its willingness to generate a CSR by including the | |||
| "csr-support" node in its "get-bootstrapping-data" RPC, as | "csr-support" node in its "get-bootstrapping-data" RPC, as | |||
| illustrated below. | illustrated below. | |||
| skipping to change at page 8, line 30 ¶ | skipping to change at page 9, line 30 ¶ | |||
| "algorithm-identifier": [ | "algorithm-identifier": [ | |||
| "BASE64VALUE1", | "BASE64VALUE1", | |||
| "BASE64VALUE2", | "BASE64VALUE2", | |||
| "BASE64VALUE3" | "BASE64VALUE3" | |||
| ] | ] | |||
| } | } | |||
| }, | }, | |||
| "csr-generation": { | "csr-generation": { | |||
| "supported-formats": { | "supported-formats": { | |||
| "format-identifier": [ | "format-identifier": [ | |||
| "ietf-sztp-csr:p10", | "ietf-ztp-types:p10-csr", | |||
| "ietf-sztp-csr:cmc", | "ietf-ztp-types:cmc-csr", | |||
| "ietf-sztp-csr:cmp" | "ietf-ztp-types:cmp-csr" | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Assuming the SZTP-server wishes to prompt the SZTP-client to provide | Assuming the SZTP-server wishes to prompt the SZTP-client to provide | |||
| a CSR, then it would respond with an HTTP 400 Bad Request error code: | a CSR, then it would respond with an HTTP 400 Bad Request error code: | |||
| skipping to change at page 9, line 17 ¶ | skipping to change at page 10, line 17 ¶ | |||
| Content-Type: application/yang.data+json | Content-Type: application/yang.data+json | |||
| { | { | |||
| "ietf-restconf:errors" : { | "ietf-restconf:errors" : { | |||
| "error" : [ | "error" : [ | |||
| { | { | |||
| "error-type": "application", | "error-type": "application", | |||
| "error-tag": "missing-attribute", | "error-tag": "missing-attribute", | |||
| "error-message": "Missing input parameter", | "error-message": "Missing input parameter", | |||
| "error-info": { | "error-info": { | |||
| "ietf-sztp-csr:request-info": { | "ietf-sztp-csr:csr-request": { | |||
| "key-generation": { | "key-generation": { | |||
| "selected-algorithm": { | "selected-algorithm": { | |||
| "algorithm-identifier": "BASE64VALUE=" | "algorithm-identifier": "BASE64VALUE=" | |||
| } | } | |||
| }, | }, | |||
| "csr-generation": { | "csr-generation": { | |||
| "selected-format": { | "selected-format": { | |||
| "format-identifier": "ietf-sztp-csr:cmc" | "format-identifier": "ietf-ztp-types:p10-csr" | |||
| } | } | |||
| }, | }, | |||
| "cert-req-info": "BASE64VALUE=" | "csr-parameters": "BASE64VALUE=" | |||
| } | } | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Upon being prompted to provide a CSR, the SZTP-client would POST | Upon being prompted to provide a CSR, the SZTP-client would POST | |||
| another "get-bootstrapping-data" request, but this time including the | another "get-bootstrapping-data" request, but this time including one | |||
| "csr" node to convey its CSR to the SZTP-server: | of the "csr" nodes to convey its CSR to the SZTP-server: | |||
| REQUEST | REQUEST | |||
| =============== NOTE: '\' line wrapping per RFC 8792 ================ | =============== NOTE: '\' line wrapping per RFC 8792 ================ | |||
| POST /restconf/operations/ietf-sztp-bootstrap-server:get-bootstrappi\ | POST /restconf/operations/ietf-sztp-bootstrap-server:get-bootstrappi\ | |||
| ng-data HTTP/1.1 | ng-data HTTP/1.1 | |||
| HOST: example.com | HOST: example.com | |||
| Content-Type: application/yang.data+json | Content-Type: application/yang.data+json | |||
| { | { | |||
| "ietf-sztp-bootstrap-server:input" : { | "ietf-sztp-bootstrap-server:input" : { | |||
| "hw-model": "model-x", | "hw-model": "model-x", | |||
| "os-name": "vendor-os", | "os-name": "vendor-os", | |||
| "os-version": "17.3R2.1", | "os-version": "17.3R2.1", | |||
| "nonce": "extralongbase64encodedvalue=", | "nonce": "extralongbase64encodedvalue=", | |||
| "ietf-sztp-csr:csr": { | "ietf-sztp-csr:p10-csr": "BASE64VALUE=" | |||
| "p10": "BASE64VALUE=" | ||||
| } | ||||
| } | } | |||
| } | } | |||
| The SZTP-server responds with "onboarding-information" (encoded | The SZTP-server responds with "onboarding-information" (encoded | |||
| inside the "conveyed-information" node) containing a signed identity | inside the "conveyed-information" node) containing a signed identity | |||
| certificate for the CSR provided by the SZTP-client: | certificate for the CSR provided by the SZTP-client: | |||
| RESPONSE | RESPONSE | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| skipping to change at page 13, line 7 ¶ | skipping to change at page 14, line 7 ¶ | |||
| In addition to configuring the signed certificate, it is often | In addition to configuring the signed certificate, it is often | |||
| necessary to also configure the Issuer's signing certificate so that | necessary to also configure the Issuer's signing certificate so that | |||
| the device (i.e., STZP-client) can authenticate certificates | the device (i.e., STZP-client) can authenticate certificates | |||
| presented by peer devices signed by the same issuer as its own. | presented by peer devices signed by the same issuer as its own. | |||
| While outside the scope of this document, one way to do this would be | While outside the scope of this document, one way to do this would be | |||
| to use the "ietf-truststore" module defined in | to use the "ietf-truststore" module defined in | |||
| [I-D.ietf-netconf-trust-anchors]. | [I-D.ietf-netconf-trust-anchors]. | |||
| 2.3. YANG Module | 2.3. YANG Module | |||
| This module augments an RPC defined in [RFC8572], uses a data type | This module augments an RPC defined in [RFC8572]. The module uses a | |||
| defined in [I-D.ietf-netconf-crypto-types], has normative references | data types and groupings defined in [RFC8572], [RFC8791], and | |||
| to [RFC2986] and [ITU.X690.2015], and an informative reference to | [I-D.ietf-netconf-crypto-types]. The module has additional normative | |||
| [Std-802.1AR-2018]. | references to [RFC2986], [RFC5272], [RFC4210], and [ITU.X690.2015], | |||
| and an informative reference to [Std-802.1AR-2018]. | ||||
| <CODE BEGINS> file "ietf-sztp-csr@2021-07-07.yang" | <CODE BEGINS> file "ietf-sztp-csr@2021-08-15.yang" | |||
| module ietf-sztp-csr { | module ietf-sztp-csr { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-sztp-csr"; | namespace "urn:ietf:params:xml:ns:yang:ietf-sztp-csr"; | |||
| prefix sztp-csr; | prefix sztp-csr; | |||
| import ietf-sztp-bootstrap-server { | import ietf-sztp-bootstrap-server { | |||
| prefix sztp-svr; | prefix sztp-svr; | |||
| reference | reference | |||
| "RFC 8572: Secure Zero Touch Provisioning (SZTP)"; | "RFC 8572: Secure Zero Touch Provisioning (SZTP)"; | |||
| } | } | |||
| import ietf-yang-structure-ext { | import ietf-yang-structure-ext { | |||
| prefix sx; | prefix sx; | |||
| reference | reference | |||
| "RFC 8791: YANG Data Structure Extensions"; | "RFC 8791: YANG Data Structure Extensions"; | |||
| } | } | |||
| import ietf-crypto-types { | import ietf-ztp-types { | |||
| prefix ct; | prefix zt; | |||
| reference | reference | |||
| "RFC AAAA: YANG Data Types and Groupings for Cryptography"; | "RFC XXXX: Conveying a Certificate Signing Request (CSR) | |||
| in a Secure Zero Touch Provisioning (SZTP) | ||||
| Bootstrapping Request"; | ||||
| } | } | |||
| 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> | |||
| Authors: Kent Watsen <mailto:kent+ietf@watsen.net> | Authors: Kent Watsen <mailto:kent+ietf@watsen.net> | |||
| Russ Housley <mailto:housley@vigilsec.com> | Russ Housley <mailto:housley@vigilsec.com> | |||
| Sean Turner <mailto:sean@sn3rd.com>"; | Sean Turner <mailto:sean@sn3rd.com>"; | |||
| description | description | |||
| "This module augments the 'get-bootstrapping-data' RPC, | "This module augments the 'get-bootstrapping-data' RPC, | |||
| defined in the 'ietf-sztp-bootstrap-server' module from | defined in the 'ietf-sztp-bootstrap-server' module from | |||
| SZTP (RFC 8572), enabling the SZTP-client to obtain a | SZTP (RFC 8572), enabling the SZTP-client to obtain a | |||
| signed identity certificate (e.g., an LDevID from IEEE | signed identity certificate (e.g., an LDevID from IEEE | |||
| 802.1AR) as part of the SZTP onboarding information | 802.1AR) as part of the SZTP onboarding information | |||
| response. | response. | |||
| Copyright (c) 2020 IETF Trust and the persons identified | Copyright (c) 2021 IETF Trust and the persons identified | |||
| as authors of the code. All rights reserved. | as authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with | Redistribution and use in source and binary forms, with | |||
| or without modification, is permitted pursuant to, and | or without modification, is permitted pursuant to, and | |||
| subject to the license terms contained in, the Simplified | subject to the license terms contained in, the Simplified | |||
| BSD License set forth in Section 4.c of the IETF Trust's | BSD License set forth in Section 4.c of the IETF Trust's | |||
| Legal Provisions Relating to IETF Documents | Legal Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC XXXX | |||
| (https://www.rfc-editor.org/info/rfcXXXX); see the RFC | (https://www.rfc-editor.org/info/rfcXXXX); see the RFC | |||
| itself for full legal notices. | itself for full legal notices. | |||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', | |||
| 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', | 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', | |||
| 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this | 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this | |||
| document are to be interpreted as described in BCP 14 | document are to be interpreted as described in BCP 14 | |||
| (RFC 2119) (RFC 8174) when, and only when, they appear | (RFC 2119) (RFC 8174) when, and only when, they appear | |||
| in all capitals, as shown here."; | in all capitals, as shown here."; | |||
| revision 2021-07-07 { | revision 2021-08-15 { | |||
| description | description | |||
| "Initial version"; | "Initial version"; | |||
| reference | reference | |||
| "RFC XXXX: Conveying a Certificate Signing Request (CSR) | "RFC XXXX: Conveying a Certificate Signing Request (CSR) | |||
| in a Secure Zero Touch Provisioning (SZTP) | in a Secure Zero Touch Provisioning (SZTP) | |||
| Bootstrapping Request"; | Bootstrapping Request"; | |||
| } | } | |||
| identity certificate-request-format { | ||||
| description | ||||
| "A base identity for the request formats supported | ||||
| by the SZTP-client. | ||||
| Additional derived identities MAY be defined by | ||||
| future efforts."; | ||||
| } | ||||
| identity p10 { | ||||
| base certificate-request-format; | ||||
| description | ||||
| "Indicates that the SZTP-client supports generating | ||||
| requests using the 'CertificationRequest' structure | ||||
| defined in RFC 2986."; | ||||
| reference | ||||
| "RFC 2986: PKCS #10: Certification Request Syntax | ||||
| Specification Version 1.7"; | ||||
| } | ||||
| identity cmc { | ||||
| base certificate-request-format; | ||||
| description | ||||
| "Indicates that the SZTP-client supports generating | ||||
| requests using a constrained version of the 'Full | ||||
| PKI Request' structure defined in RFC 5272."; | ||||
| reference | ||||
| "RFC 5272: Certificate Management over CMS (CMC)"; | ||||
| } | ||||
| identity cmp { | ||||
| base certificate-request-format; | ||||
| description | ||||
| "Indicates that the SZTP-client supports generating | ||||
| requests that contain a PKCS#10 Certificate Signing | ||||
| Request (p10cr), as defined in RFC 2986, encapsulated | ||||
| in a Nested Message Content (nested), as defined in | ||||
| RFC 4210."; | ||||
| reference | ||||
| "RFC 2986: PKCS #10: Certification Request Syntax | ||||
| Specification Version 1.7 | ||||
| RFC 4210: Internet X.509 Public Key Infrastructure | ||||
| Certificate Management Protocol (CMP)"; | ||||
| } | ||||
| // Protocol-accessible nodes | // Protocol-accessible nodes | |||
| augment "/sztp-svr:get-bootstrapping-data/sztp-svr:input" { | augment "/sztp-svr:get-bootstrapping-data/sztp-svr:input" { | |||
| description | description | |||
| "This augmentation adds the 'csr-support' and 'csr' nodes to | "This augmentation adds the 'csr-support' and 'csr' nodes to | |||
| the SZTP (RFC 8572) 'get-bootstrapping-data' request message, | the SZTP (RFC 8572) 'get-bootstrapping-data' request message, | |||
| enabling the SZTP-client to obtain an identity certificate | enabling the SZTP-client to obtain an identity certificate | |||
| (e.g., an LDevID from IEEE 802.1AR) as part of the onboarding | (e.g., an LDevID from IEEE 802.1AR) as part of the onboarding | |||
| information response provided by the SZTP-server. | information response provided by the SZTP-server. | |||
| skipping to change at page 16, line 8 ¶ | skipping to change at page 16, line 14 ¶ | |||
| to generate. | to generate. | |||
| The 'csr' node enables the SZTP-client to relay a CSR to | The 'csr' node enables the SZTP-client to relay a CSR to | |||
| the SZTP-server."; | the SZTP-server."; | |||
| reference | reference | |||
| "IEEE 802.1AR: IEEE Standard for Local and metropolitan | "IEEE 802.1AR: IEEE Standard for Local and metropolitan | |||
| area networks - Secure Device Identity | area networks - Secure Device Identity | |||
| RFC 8572: Secure Zero Touch Provisioning (SZTP)"; | RFC 8572: Secure Zero Touch Provisioning (SZTP)"; | |||
| choice msg-type { | choice msg-type { | |||
| description | description | |||
| "Only a 'csr-support' or a 'csr' message may be sent."; | "Messages are mutually exclusive."; | |||
| container csr-support { | case csr-support { | |||
| presence | ||||
| "Indicates that the SZTP-client is capable of sending | ||||
| CSRs."; | ||||
| description | description | |||
| "The 'csr-support' node enables the SZTP-client to | "Indicates how the SZTP-client supports generating CSRs. | |||
| indicate that it supports generating certificate | ||||
| signing requests (CSRs), and provide details around | ||||
| the CSRs it is able to generate. | ||||
| When present, the SZTP-server MAY respond with the HTTP | ||||
| code 400 Bad Request with an 'ietf-restconf:errors' | ||||
| document having the 'error-tag' value 'missing-attribute' | ||||
| and the 'error-info' node containing the 'request-info' | ||||
| structure described in this module."; | ||||
| container key-generation { | ||||
| presence | ||||
| "Indicates that the SZTP-client is capable of | ||||
| generating a new asymmetric key pair. | ||||
| If this node is not present, the SZTP-server MAY | ||||
| request a CSR using the asymmetric key associated | ||||
| with the device's existing identity certificate | ||||
| (e.g., an IDevID from IEEE 802.1AR)."; | ||||
| description | ||||
| "Specifies details for the SZTP-client's ability to | ||||
| generate a new asymmetric key pair."; | ||||
| container supported-algorithms { | ||||
| description | ||||
| "A list of public key algorithms supported by the | ||||
| SZTP-client for generating a new key."; | ||||
| leaf-list algorithm-identifier { | ||||
| type binary; | ||||
| min-elements 1; | ||||
| description | ||||
| "An AlgorithmIdentifier, as defined in RFC 2986, | ||||
| encoded using ASN.1 distinguished encoding rules | ||||
| (DER), as specified in ITU-T X.690."; | ||||
| reference | ||||
| "RFC 2986: PKCS #10: Certification Request Syntax | ||||
| Specification Version 1.7 | ||||
| ITU-T X.690: | ||||
| Information technology - ASN.1 encoding rules: | ||||
| Specification of Basic Encoding Rules (BER), | If present and a SZTP-server wishes to request the | |||
| Canonical Encoding Rules (CER) and Distinguished | SZTP-client generate a CSR, the SZTP-server MUST | |||
| Encoding Rules (DER)."; | respond with HTTP code 400 Bad Request with an | |||
| } | 'ietf-restconf:errors' message having the 'error-tag' | |||
| } | value 'missing-attribute' and the 'error-info' node | |||
| } | containing the 'csr-request' structure described | |||
| container csr-generation { | in this module."; | |||
| description | uses zt:csr-support-grouping; | |||
| "Specifies details for the SZTP-client's ability to | ||||
| generate a certificate signing requests."; | ||||
| container supported-formats { | ||||
| description | ||||
| "A list of certificate request formats supported | ||||
| by the SZTP-client for generating a new key."; | ||||
| leaf-list format-identifier { | ||||
| type identityref { | ||||
| base certificate-request-format; | ||||
| } | ||||
| min-elements 1; | ||||
| description | ||||
| "A certificate request format supported by the | ||||
| SZTP-client."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | } | |||
| container csr { | case csr { | |||
| presence "Indicates that the SZTP-client has sent a CSR."; | ||||
| description | description | |||
| "The 'csr' node enables the SZTP-client to convey | "Provides the CSR generated by the SZTP-client. | |||
| a certificate signing request, using the encoding | ||||
| format selected by the SZTP-server's 'request-info' | ||||
| response to the SZTP-client's previously sent | ||||
| 'get-bootstrapping-data' request containing the | ||||
| 'csr-support' node. | ||||
| When present, the SZTP-server SHOULD respond with | When present, the SZTP-server SHOULD respond with | |||
| an SZTP onboarding information message containing | an SZTP onboarding information message containing | |||
| a signed certificate for the conveyed CSR. The | a signed certificate for the conveyed CSR. The | |||
| SZTP-server MAY alternatively respond with another | SZTP-server MAY alternatively respond with another | |||
| HTTP error containing another 'request-info', in | HTTP error containing another 'csr-request', in | |||
| which case the SZTP-client MUST invalidate the CSR | which case the SZTP-client MUST invalidate the | |||
| sent in this node."; | previously generated CSR."; | |||
| choice request-type { | uses zt:csr-grouping; | |||
| mandatory true; | } | |||
| description | } | |||
| "A choice amongst certificate signing request formats. | } | |||
| Additional formats MAY be augmented into this 'choice' | sx:structure csr-request { | |||
| statement by future efforts."; | description | |||
| case p10 { | "A YANG data structure, per RFC 8791, that specifies | |||
| leaf p10 { | details for the CSR that the ZTP-client is to generate."; | |||
| type ct:csr; | reference | |||
| description | "RFC 8791: YANG Data Structure Extensions"; | |||
| "A CertificationRequest structure, per RFC 2986. | uses zt:csr-request-grouping; | |||
| Please see 'csr' in RFC AAAA for encoding details."; | } | |||
| reference | ||||
| "RFC 2986: PKCS #10: Certification | ||||
| Request Syntax Specification | ||||
| RFC AAAA: YANG Data Types and Groupings | ||||
| for Cryptography"; | ||||
| } | ||||
| } | ||||
| case cmc { | ||||
| leaf cmc { | ||||
| type binary; | ||||
| description | ||||
| "A constrained version of the 'Full PKI Request' | ||||
| message defined in RFC 5272, encoded using ASN.1 | ||||
| distinguished encoding rules (DER), as specified | ||||
| in ITU-T X.690. | ||||
| For asymmetric key-based origin authentication | } | |||
| of a CSR based on the IDevID's private key for the | ||||
| associated IDevID's public key, the PKIData contains | ||||
| one reqSequence element and no controlSequence, | ||||
| cmsSequence, or otherMsgSequence elements. The | ||||
| reqSequence is the TaggedRequest and it is the tcr | ||||
| CHOICE. The tcr is the TaggedCertificationRequest | ||||
| and it a bodyPartId and the certificateRequest | ||||
| elements. The certificateRequest is signed with | ||||
| the IDevID's private key. | ||||
| For asymmetric key-based origin authentication | <CODE ENDS> | |||
| based on the IDevID's private key that encapsulates | ||||
| a CSR signed by the LDevID's private key, the | ||||
| PKIData contains one cmsSequence element and no | ||||
| controlSequence, reqSequence, or otherMsgSequence | ||||
| elements. The cmsSequence is the TaggedContentInfo | ||||
| and it includes a bodyPartID element and a | ||||
| contentInfo. The contentInfo is a SignedData | ||||
| encapsulating a PKIData with one reqSequence | ||||
| element and no controlSequence, cmsSequence, or | ||||
| otherMsgSequence elements. The reqSequence is | ||||
| the TaggedRequest and it is the tcr CHOICE. The | ||||
| tcr is the TaggedCertificationRequest and it a | ||||
| bodyPartId and the certificateRequest elements. | ||||
| The certificateRequest is signed with the LDevID's | ||||
| private key. | ||||
| For shared secret-based origin authentication of | 3. The "ietf-ztp-types" Module | |||
| a CSR signed by the LDevID's private key, the | ||||
| PKIData contains one cmsSequence element and no | ||||
| controlSequence, reqSequence, or otherMsgSequence | ||||
| elements. The cmsSequence is the TaggedContentInfo | ||||
| and it includes a bodyPartID element and a | ||||
| contentInfo. The contentInfo is an AuthenticatedData | ||||
| encapsulating a PKIData with one reqSequence | ||||
| element and no controlSequence, cmsSequence, or | ||||
| otherMsgSequence elements. The reqSequence is the | ||||
| TaggedRequest and it is the tcr CHOICE. The tcr | ||||
| is the TaggedCertificationRequest and it a | ||||
| bodyPartId and the certificateRequest elements. | ||||
| The certificateRequest is signed with the LDevID's | ||||
| private key."; | ||||
| reference | ||||
| "RFC 5272: Certificate Management over CMS (CMC) | ||||
| ITU-T X.690: | ||||
| Information technology - ASN.1 encoding rules: | ||||
| Specification of Basic Encoding Rules (BER), | ||||
| Canonical Encoding Rules (CER) and Distinguished | ||||
| Encoding Rules (DER)."; | ||||
| } | ||||
| } | ||||
| case cmp { | ||||
| leaf cmp { | ||||
| type binary; | ||||
| description | ||||
| "A PKIMessage structure, as defined in RFC 4210, | ||||
| encoded using ASN.1 distinguished encoding rules | ||||
| (DER), as specified in ITU-T X.690. | ||||
| The PKIMessage structure contains a PKCS#10 | This section defines a YANG 1.1 [RFC7950] module that defines three | |||
| Certificate Signing Request (p10cr), as defined in | YANG groupings, one each for messages sent between a ZTP-client and | |||
| RFC 2986, encapsulated in a Nested Message Content | ZTP-server. This module is defines independently of the "ietf-sztp- | |||
| (nested) structure, as defined in RFC 4210. | csr" module so that it's groupings may be used by bootstrapping | |||
| protocols other than SZTP [RFC8572]. | ||||
| For asymmetric key-based origin authentication of | 3.1. Data Model Overview | |||
| a CSR based on the IDevID's private key for the | ||||
| associated IDevID's public key, PKIMessages contains | ||||
| one PKIMessage with one body element, a header | ||||
| element that is an empty sequence, and no protection | ||||
| or extraCerts elements. The body element contains a | ||||
| p10cr CHOICE. | ||||
| For asymmetric key-based origin authentication based | The following tree diagram [RFC8340] illustrates the three groupings | |||
| on the IDevID's private key that encapsulates a CSR | defined in the "ietf-ztp-types" module. | |||
| signed by the LDevID's private key, PKIMessages | ||||
| contains one PKIMessage with one header element, | ||||
| one body element, one protection element, and one | ||||
| extraCerts element. The header element contains | ||||
| pvno, sender, recipient, and protectionAlg elements | ||||
| and no other elements. The body element contains the | ||||
| nested CHOICE. The nested element's PKIMessages | ||||
| contains one PKIMessage with one body element, one | ||||
| header element that is an empty sequence, and no | ||||
| protection or extraCerts elements. The nested | ||||
| element's body element contains a p10cr CHOICE. The | ||||
| protection element contains the digital signature | ||||
| generated with the IDevID's private key. The | ||||
| extraCerts element contains the IDevID certificate. | ||||
| For shared secret-based origin authentication of a | module: ietf-ztp-types | |||
| CSR signed by the LDevID's private key, PKIMessages | ||||
| contains one PKIMessage with one header element, | grouping csr-support-grouping | |||
| one body element, one protection element, and no | +-- csr-support | |||
| extraCerts element. The header element contains | +-- key-generation! | |||
| pvno, sender, recipient, and protectionAlg elements | | +-- supported-algorithms | |||
| and no other elements. The body element contains | | +-- algorithm-identifier* binary | |||
| the nested CHOICE. The nested element's PKIMessages | +-- csr-generation | |||
| contains one PKIMessage with one body element, one | +-- supported-formats | |||
| header element that is an empty sequence, and no | +-- format-identifier* identityref | |||
| protection or extraCerts elements. The body element | grouping csr-request-grouping | |||
| contains a p10cr CHOICE. The protection element | +-- key-generation! | |||
| contains the MAC value generated with the shared | | +-- selected-algorithm | |||
| secret."; | | +-- algorithm-identifier binary | |||
| reference | +-- csr-generation | |||
| "RFC 2986: | | +-- selected-format | |||
| PKCS #10: Certification Request Syntax | | +-- format-identifier identityref | |||
| Specification Version 1.7 | +-- csr-parameters? ct:csr-info | |||
| RFC 4210: | grouping csr-grouping | |||
| Internet X.509 Public Key Infrastructure | +-- (csr-type) | |||
| Certificate Management Protocol (CMP) | +--:(p10-csr) | |||
| ITU-T X.690: | | +-- p10-csr? ct:csr | |||
| Information technology - ASN.1 encoding rules: | +--:(cmc-csr) | |||
| Specification of Basic Encoding Rules (BER), | | +-- cmc-csr? binary | |||
| Canonical Encoding Rules (CER) and Distinguished | +--:(cmp-csr) | |||
| Encoding Rules (DER)."; | +-- cmp-csr? binary | |||
| 3.2. YANG Module | ||||
| This module uses a data types and groupings [RFC8791] and | ||||
| [I-D.ietf-netconf-crypto-types]. The module has additional normative | ||||
| references to [RFC2986], [RFC4210], [RFC5272], and [ITU.X690.2015], | ||||
| and an informative reference to [Std-802.1AR-2018]. | ||||
| <CODE BEGINS> file "ietf-ztp-types@2021-08-15.yang" | ||||
| module ietf-ztp-types { | ||||
| yang-version 1.1; | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-ztp-types"; | ||||
| prefix zt; | ||||
| import ietf-crypto-types { | ||||
| prefix ct; | ||||
| reference | ||||
| "RFC AAAA: YANG Data Types and Groupings for Cryptography"; | ||||
| } | ||||
| organization | ||||
| "IETF NETCONF (Network Configuration) Working Group"; | ||||
| contact | ||||
| "WG Web: http://tools.ietf.org/wg/netconf | ||||
| WG List: <mailto:netconf@ietf.org> | ||||
| Authors: Kent Watsen <mailto:kent+ietf@watsen.net> | ||||
| Russ Housley <mailto:housley@vigilsec.com> | ||||
| Sean Turner <mailto:sean@sn3rd.com>"; | ||||
| description | ||||
| "This module defines three groupings that enable | ||||
| bootstrapping devices to 1) indicate if and how they | ||||
| support generating CSRs, 2) obtain a request to | ||||
| generate a CSR, and 3) communicate the requested CSR. | ||||
| The terms 'IDevID' and 'LDevID' are used herein to | ||||
| mean 'initial device identifier' and 'local device | ||||
| identifer'. These terms are defined consistent with | ||||
| the IEEE 802.1AR specification, though there is no | ||||
| requirement that a ZTP-client's identity certificate | ||||
| conform to IEEE 802.1AR. | ||||
| Copyright (c) 2021 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 | ||||
| (https://trustee.ietf.org/license-info). | ||||
| This version of this YANG module is part of RFC XXXX | ||||
| (https://www.rfc-editor.org/info/rfcXXXX); see the RFC | ||||
| itself for full legal notices. | ||||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', | ||||
| 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', | ||||
| 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this | ||||
| document are to be interpreted as described in BCP 14 | ||||
| (RFC 2119) (RFC 8174) when, and only when, they appear | ||||
| in all capitals, as shown here."; | ||||
| revision 2021-08-15 { | ||||
| description | ||||
| "Initial version"; | ||||
| reference | ||||
| "RFC XXXX: Conveying a Certificate Signing Request (CSR) | ||||
| in a Secure Zero Touch Provisioning (SZTP) | ||||
| Bootstrapping Request"; | ||||
| } | ||||
| identity certificate-request-format { | ||||
| description | ||||
| "A base identity for the request formats supported | ||||
| by the ZTP-client. | ||||
| Additional derived identities MAY be defined by | ||||
| future efforts."; | ||||
| } | ||||
| identity p10-csr { | ||||
| base certificate-request-format; | ||||
| description | ||||
| "Indicates that the ZTP-client supports generating | ||||
| requests using the 'CertificationRequest' structure | ||||
| defined in RFC 2986."; | ||||
| reference | ||||
| "RFC 2986: PKCS #10: Certification Request Syntax | ||||
| Specification Version 1.7"; | ||||
| } | ||||
| identity cmp-csr { | ||||
| base certificate-request-format; | ||||
| description | ||||
| "Indicates that the ZTP-client supports generating | ||||
| requests using a constrained version of the PKIMessage | ||||
| containing a p10cr structure defined in RFC 4210."; | ||||
| reference | ||||
| "RFC 4210: Internet X.509 Public Key Infrastructure | ||||
| Certificate Management Protocol (CMP)"; | ||||
| } | ||||
| identity cmc-csr { | ||||
| base certificate-request-format; | ||||
| description | ||||
| "Indicates that the ZTP-client supports generating | ||||
| requests using a constrained version of the 'Full | ||||
| PKI Request' structure defined in RFC 5272."; | ||||
| reference | ||||
| "RFC 5272: Certificate Management over CMS (CMC)"; | ||||
| } | ||||
| // Protocol-accessible nodes | ||||
| grouping csr-support-grouping { | ||||
| description | ||||
| "A grouping enabling use by other efforts."; | ||||
| container csr-support { | ||||
| description | ||||
| "Enables a ZTP-client to indicate that it supports | ||||
| generating certificate signing requests (CSRs) and | ||||
| provides details about the CSRs it is able to | ||||
| generate."; | ||||
| container key-generation { | ||||
| presence | ||||
| "Indicates that the ZTP-client is capable of | ||||
| generating a new asymmetric key pair. | ||||
| If this node is not present, the ZTP-server MAY | ||||
| request a CSR using the asymmetric key associated | ||||
| with the device's existing identity certificate | ||||
| (e.g., an IDevID from IEEE 802.1AR)."; | ||||
| description | ||||
| "Specifies details for the ZTP-client's ability to | ||||
| generate a new asymmetric key pair."; | ||||
| container supported-algorithms { | ||||
| description | ||||
| "A list of public key algorithms supported by the | ||||
| ZTP-client for generating a new asymmetric key."; | ||||
| leaf-list algorithm-identifier { | ||||
| type binary; | ||||
| min-elements 1; | ||||
| description | ||||
| "An AlgorithmIdentifier, as defined in RFC 2986, | ||||
| encoded using ASN.1 distinguished encoding rules | ||||
| (DER), as specified in ITU-T X.690."; | ||||
| reference | ||||
| "RFC 2986: PKCS #10: Certification Request Syntax | ||||
| Specification Version 1.7 | ||||
| ITU-T X.690: | ||||
| Information technology - ASN.1 encoding rules: | ||||
| Specification of Basic Encoding Rules (BER), | ||||
| Canonical Encoding Rules (CER) and Distinguished | ||||
| Encoding Rules (DER)."; | ||||
| } | ||||
| } | ||||
| } | ||||
| container csr-generation { | ||||
| description | ||||
| "Specifies details for the ZTP-client's ability to | ||||
| generate a certificate signing requests."; | ||||
| container supported-formats { | ||||
| description | ||||
| "A list of certificate request formats supported | ||||
| by the ZTP-client for generating a new key."; | ||||
| leaf-list format-identifier { | ||||
| type identityref { | ||||
| base zt:certificate-request-format; | ||||
| } | } | |||
| min-elements 1; | ||||
| description | ||||
| "A certificate request format supported by the | ||||
| ZTP-client."; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| sx:structure request-info { | grouping csr-request-grouping { | |||
| description | ||||
| "A grouping enabling use by other efforts."; | ||||
| container key-generation { | container key-generation { | |||
| presence | presence | |||
| "Indicates that the SZTP-client is to generate a new | "Provided by a ZTP-server to indicate that it wishes | |||
| asymmetric key. If missing, then the SZTP-client | the ZTP-client to generate a new asymmetric key. | |||
| MUST reuse the key associated with its existing | ||||
| identity certificate (e.g., IDevID). | ||||
| This leaf MUST only appear if the SZTP-clients | This statement is present so the mandatory descendant | |||
| 'csr-support' included the 'key-generation' node."; | nodes do not imply that this node must be configured."; | |||
| description | description | |||
| "A YANG data structure, per RFC 8791, that specifies | "The key generation parameters selected by the ZTP-server. | |||
| details for the key that the SZTP-client is to | ||||
| generate."; | This leaf MUST only appear if the ZTP-client's | |||
| reference | 'csr-support' included the 'key-generation' node."; | |||
| "RFC 8791: YANG Data Structure Extensions"; | ||||
| container selected-algorithm { | container selected-algorithm { | |||
| description | description | |||
| "The key algorithm selected by the SZTP-server. The | "The key algorithm selected by the ZTP-server. The | |||
| algorithm MUST be one of the algorithms specified | algorithm MUST be one of the algorithms specified by | |||
| by the 'supported-algorithms' node in the | the 'supported-algorithms' node in the ZTP-client's | |||
| SZTP-client's request message."; | message containing the 'csr-support' structure."; | |||
| leaf algorithm-identifier { | leaf algorithm-identifier { | |||
| type binary; | type binary; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "An AlgorithmIdentifier, as defined in RFC 2986, | "An AlgorithmIdentifier, as defined in RFC 2986, | |||
| encoded using ASN.1 distinguished encoding rules | encoded using ASN.1 distinguished encoding rules | |||
| (DER), as specified in ITU-T X.690."; | (DER), as specified in ITU-T X.690."; | |||
| reference | reference | |||
| "RFC 2986: PKCS #10: Certification Request Syntax | "RFC 2986: PKCS #10: Certification Request Syntax | |||
| Specification Version 1.7 | Specification Version 1.7 | |||
| ITU-T X.690: | ITU-T X.690: | |||
| Information technology - ASN.1 encoding rules: | Information technology - ASN.1 encoding rules: | |||
| Specification of Basic Encoding Rules (BER), | Specification of Basic Encoding Rules (BER), | |||
| Canonical Encoding Rules (CER) and Distinguished | Canonical Encoding Rules (CER) and Distinguished | |||
| Encoding Rules (DER)."; | Encoding Rules (DER)."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container csr-generation { | container csr-generation { | |||
| description | description | |||
| "Specifies details for the CSR that the SZTP-client | "Specifies details for the CSR that the ZTP-client | |||
| is to generate."; | is to generate."; | |||
| container selected-format { | container selected-format { | |||
| description | description | |||
| "The CSR format selected by the SZTP-server. The | "The CSR format selected by the ZTP-server. The | |||
| format MUST be one of the formats specified by | format MUST be one of the formats specified by | |||
| the 'supported-formats' node in the SZTP-client's | the 'supported-formats' node in the ZTP-client's | |||
| request message."; | request message."; | |||
| leaf format-identifier { | leaf format-identifier { | |||
| type identityref { | type identityref { | |||
| base certificate-request-format; | base zt:certificate-request-format; | |||
| } | } | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "A certificate request format to be used by the | "A certificate request format to be used by the | |||
| SZTP-client."; | ZTP-client."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| leaf cert-req-info { | leaf csr-parameters { | |||
| type ct:csr-info; | type ct:csr-info; | |||
| description | description | |||
| "A CertificationRequestInfo structure, as defined in | "A CertificationRequestInfo structure, as defined in | |||
| RFC 2986, and modeled via a 'typedef' statement by | RFC 2986, and modeled via a 'typedef' statement by | |||
| RFC AAAA. | RFC AAAA. | |||
| Enables the SZTP-server to provide a fully-populated | Enables the ZTP-server to provide a fully-populated | |||
| CertificationRequestInfo structure that the SZTP-client | CertificationRequestInfo structure that the ZTP-client | |||
| only needs to sign in order to generate the complete | only needs to sign in order to generate the complete | |||
| 'CertificationRequest' structure to send to SZTP-server | 'CertificationRequest' structure to send to ZTP-server | |||
| in its next 'get-bootstrapping-data' request message. | in its next 'get-bootstrapping-data' request message. | |||
| When provided, the SZTP-client SHOULD use this | When provided, the ZTP-client SHOULD use this | |||
| structure to generate its CSR; failure to do so MAY | structure to generate its CSR; failure to do so MAY | |||
| result in a 400 Bad Request response containing | result in a 400 Bad Request response containing | |||
| another 'request-info' structure. | another 'csr-request' structure. | |||
| When not provided, the SZTP-client SHOULD generate a | When not provided, the ZTP-client SHOULD generate a | |||
| CSR using the same structure defined in its existing | CSR using the same structure defined in its existing | |||
| identity certificate (e.g., IDevID). | identity certificate (e.g., IDevID). | |||
| It is an error if the 'AlgorithmIdentifier' field | It is an error if the 'AlgorithmIdentifier' field | |||
| contained inside the 'SubjectPublicKeyInfo' field | contained inside the 'SubjectPublicKeyInfo' field | |||
| does not match the algorithm identified by the | does not match the algorithm identified by the | |||
| 'selected-algorithm' node."; | 'selected-algorithm' node."; | |||
| reference | reference | |||
| "RFC 2986: | "RFC 2986: | |||
| PKCS #10: Certification Request Syntax Specification | PKCS #10: Certification Request Syntax Specification | |||
| RFC AAAA: | RFC AAAA: | |||
| YANG Data Types and Groupings for Cryptography"; | YANG Data Types and Groupings for Cryptography"; | |||
| } | } | |||
| } | } | |||
| grouping csr-grouping { | ||||
| description | ||||
| "Enables a ZTP-client to convey a certificate signing | ||||
| request, using the encoding format selected by a | ||||
| ZTP-server's 'csr-request' response to the ZTP-client's | ||||
| previously sent 'get-bootstrapping-data' request | ||||
| containing the 'csr-support' node."; | ||||
| choice csr-type { | ||||
| mandatory true; | ||||
| description | ||||
| "A choice amongst certificate signing request formats. | ||||
| Additional formats MAY be augmented into this 'choice' | ||||
| statement by future efforts."; | ||||
| case p10-csr { | ||||
| leaf p10-csr { | ||||
| type ct:csr; | ||||
| description | ||||
| "A CertificationRequest structure, per RFC 2986."; | ||||
| reference | ||||
| "RFC 2986: PKCS #10: Certification | ||||
| Request Syntax Specification"; | ||||
| } | ||||
| } | ||||
| case cmc-csr { | ||||
| leaf cmc-csr { | ||||
| type binary; | ||||
| description | ||||
| "A constrained version of the 'Full PKI Request' | ||||
| message defined in RFC 5272, encoded using ASN.1 | ||||
| distinguished encoding rules (DER), as specified | ||||
| in ITU-T X.690. | ||||
| For asymmetric key-based origin authentication of | ||||
| a CSR based on the IDevID's private key for the | ||||
| associated IDevID's public key, the PKIData | ||||
| contains one reqSequence element and no cmsSequence | ||||
| or otherMsgSequence elements. The reqSequence is | ||||
| the TaggedRequest and it is the tcr CHOICE. The | ||||
| tcr is the TaggedCertificationRequest and it a | ||||
| bodyPartId and the certificateRequest elements. | ||||
| The certificateRequest is signed with the IDevID's | ||||
| private key. The IDevID certificate and optionally | ||||
| its certificate chain is included in the SignedData | ||||
| certificates that encapsulates the PKIData. | ||||
| For asymmetric key-based origin authentication | ||||
| based on the IDevID's private key that signs the | ||||
| encapsulated CSR signed by the LDevID's private key, | ||||
| the PKIData contains one cmsSequence element and no | ||||
| otherMsgSequence element. The cmsSequence is the | ||||
| TaggedContentInfo and it includes a bodyPartID | ||||
| element and a contentInfo. The contentInfo is | ||||
| a SignedData encapsulating a PKIData with one | ||||
| reqSequence element and no cmsSequence or | ||||
| otherMsgSequence elements. The reqSequence is | ||||
| the TaggedRequest and it is the tcr CHOICE. The | ||||
| tcr is the TaggedCertificationRequest and it a | ||||
| bodyPartId and the certificateRequest elements. | ||||
| The certificateRequest is signed with the LDevID's | ||||
| private key. The IDevID certificate and optionally | ||||
| its certificate chain is included in the SignedData | ||||
| certificates that encapsulates the PKIData. | ||||
| For shared secret-based origin authentication of a | ||||
| CSR signed by the LDevID's private key, the PKIData | ||||
| contains one cmsSequence element and no reqSequence | ||||
| or otherMsgSequence elements. The cmsSequence is | ||||
| the TaggedContentInfo and it includes a bodyPartID | ||||
| element and a contentInfo. The contentInfo is an | ||||
| AuthenticatedData encapsulating a PKIData with one | ||||
| reqSequence element and no cmsSequences or | ||||
| otherMsgSequence elements. The reqSequence is the | ||||
| TaggedRequest and it is the tcr CHOICE. The tcr is | ||||
| the TaggedCertificationRequest and it a bodyPartId | ||||
| and the certificateRequest elements. The | ||||
| certificateRequest is signed with the LDevID's | ||||
| private key. The IDevID certificate and optionally | ||||
| its certificate chain is included in the SignedData | ||||
| certificates that encapsulates the PKIData."; | ||||
| reference | ||||
| "RFC 5272: Certificate Management over CMS (CMC) | ||||
| ITU-T X.690: | ||||
| Information technology - ASN.1 encoding rules: | ||||
| Specification of Basic Encoding Rules (BER), | ||||
| Canonical Encoding Rules (CER) and Distinguished | ||||
| Encoding Rules (DER)."; | ||||
| } | ||||
| } | ||||
| case cmp-csr { | ||||
| leaf cmp-csr { | ||||
| type binary; | ||||
| description | ||||
| "A PKIMessage structure, as defined in RFC 4210, | ||||
| encoded using ASN.1 distinguished encoding rules | ||||
| (DER), as specified in ITU-T X.690. | ||||
| For asymmetric key-based origin authentication of | ||||
| a CSR based on the IDevID's private key for the | ||||
| associated IDevID's public key, PKIMessages | ||||
| contains one PKIMessage with the header and body | ||||
| elements, no protection element, and should contain | ||||
| the extraCerts element. The header element contains | ||||
| the pvno, sender, and recipient elements. The pvno | ||||
| contains cmp2000, and the sender contains the | ||||
| subject of the IDevID certificate. The body element | ||||
| contains a p10cr CHOICE of type CertificationRequet. | ||||
| It is signed with the IDevID's private key. The | ||||
| extraCerts element contains the IDevID certificate, | ||||
| optionally followed by its certificate chain | ||||
| excluding the trust anchor. | ||||
| For asymmetric key-based origin authentication | ||||
| based on the IDevID's private key that signs the | ||||
| encapsulated CSR signed by the LDevID's private | ||||
| key, PKIMessages contains one PKIMessage with the | ||||
| header, body, and protection elements, and should | ||||
| contain the extraCerts element. The header element | ||||
| contains the pvno, sender, recipient, protectionAlg, | ||||
| and optionally senderKID elements. The pvno contains | ||||
| cmp2000, the sender contains the subject of the | ||||
| IDevID certificate, the protectionAlg contains the | ||||
| AlgorithmIdentifier of the used signature algorithm, | ||||
| and the senderKID contains the subject key | ||||
| identifier of the IDevID certificate. The body | ||||
| element contains a p10cr CHOICE of type | ||||
| CertificationRequet. It is signed with the LDevID's | ||||
| private key. The protection element contains the | ||||
| digital signature generated with the IDevID's | ||||
| private key. The extraCerts element contains the | ||||
| IDevID certificate, optionally followed by its | ||||
| certificate chain excluding the trust anchor. | ||||
| For shared secret-based origin authentication of a | ||||
| CSR signed by the LDevID's private key, PKIMessages | ||||
| contains one PKIMessage with the header, body, and | ||||
| protection element, and no extraCerts element. The | ||||
| header element contains the pvno, sender, recipient, | ||||
| protectionAlg, and senderKID elements. The pvno | ||||
| contains cmp2000, the protectionAlg contains the | ||||
| AlgorithmIdentifier of the used MAC algorithm, and | ||||
| the senderKID contains a reference the recipient | ||||
| can use to identify the shared secret. The body | ||||
| element contains a p10cr CHOICE of type | ||||
| CertificationRequet. It is signed with the LDevID's | ||||
| private key. The protection element contains the | ||||
| MAC value generated with the shared secret."; | ||||
| reference | ||||
| "RFC 4210: | ||||
| Internet X.509 Public Key Infrastructure | ||||
| Certificate Management Protocol (CMP) | ||||
| ITU-T X.690: | ||||
| Information technology - ASN.1 encoding rules: | ||||
| Specification of Basic Encoding Rules (BER), | ||||
| Canonical Encoding Rules (CER) and Distinguished | ||||
| Encoding Rules (DER)."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 3. Security Considerations | 4. Security Considerations | |||
| This document builds on top of the solution presented in [RFC8572] | This document builds on top of the solution presented in [RFC8572] | |||
| and therefore all the Security Considerations discussed in RFC 8572 | and therefore all the Security Considerations discussed in RFC 8572 | |||
| apply here as well. | apply here as well. | |||
| 3.1. SZTP-Client Considerations | 4.1. SZTP-Client Considerations | |||
| 3.1.1. Ensuring the Integrity of Asymmetric Private Keys | 4.1.1. Ensuring the Integrity of Asymmetric Private Keys | |||
| The private key the SZTP-client uses for the dynamically-generated | The private key the SZTP-client uses for the dynamically-generated | |||
| identity certificate MUST be protected from inadvertent disclosure in | identity certificate MUST be protected from inadvertent disclosure in | |||
| order to prevent identity fraud. | order to prevent identity fraud. | |||
| The security of this private key is essential in order to ensure the | The security of this private key is essential in order to ensure the | |||
| associated identity certificate can be used as a root of trust. | associated identity certificate can be used as a root of trust. | |||
| It is RECOMMENDED that devices are manufactured with an HSM (hardware | It is RECOMMENDED that devices are manufactured with an HSM (hardware | |||
| security module), such as a TPM (trusted platform module), to | security module), such as a TPM (trusted platform module), to | |||
| generate and forever contain the private key within the security | generate and forever contain the private key within the security | |||
| perimeter of the HSM. In such cases, the private key, and its | perimeter of the HSM. In such cases, the private key, and its | |||
| associated certificates, MAY have long validity periods. | associated certificates, MAY have long validity periods. | |||
| In cases where the device does not possess an HSM, or otherwise is | In cases where the SZTP-client does not possess an HSM, or otherwise | |||
| unable to use an HSM for the private key, it is RECOMMENDED to | is unable to use an HSM for the private key, it is RECOMMENDED to | |||
| regenerate the private key (and associated identity certificates) | regenerate the private key (and associated identity certificates) | |||
| periodically. Details for how to generate a new private key and | periodically. Details for how to generate a new private key and | |||
| associate a new identity certificate are outside the scope of this | associate a new identity certificate are outside the scope of this | |||
| document. | document. | |||
| 3.1.2. Reuse of a Manufacturer-generated Private Key | 4.1.2. Reuse of a Manufacturer-generated Private Key | |||
| It is RECOMMENDED that a new private key is generated for each CSR | It is RECOMMENDED that a new private key is generated for each CSR | |||
| described in this document. | described in this document. | |||
| This private key SHOULD be protected as well as the built-in private | This private key SHOULD be protected as well as the built-in private | |||
| key associated with the device's initial secure device identity | key associated with the SZTP-client's initial device identity | |||
| certificate (e.g., the IDevID, from [Std-802.1AR-2018]). | certificate (e.g., the IDevID, from [Std-802.1AR-2018]). | |||
| In cases where it is not possible to generate a new private key that | In cases where it is not possible to generate a new private key that | |||
| is protected as well as the built-in private key, it is RECOMMENDED | is protected as well as the built-in private key, it is RECOMMENDED | |||
| to reuse the built-in private key rather than generate a new private | to reuse the built-in private key rather than generate a new private | |||
| key that is not as well protected. | key that is not as well protected. | |||
| 3.1.3. Replay Attack Protection | 4.1.3. Replay Attack Protection | |||
| This RFC enables an SZTP-client to announce an ability to generate a | This RFC enables an SZTP-client to announce an ability to generate a | |||
| new key to use for its CSR. | new key to use for its CSR. | |||
| When the SZTP-server responds with a request for the device to | When the SZTP-server responds with a request for the SZTP-client to | |||
| generate a new key, it is essential that the device actually | generate a new key, it is essential that the SZTP-client actually | |||
| generates a new key. | generates a new key. | |||
| Generating a new key each time enables the random bytes used to | Generating a new key each time enables the random bytes used to | |||
| create the key to also serve the dual-purpose of acting like a | create the key to also serve the dual-purpose of acting like a | |||
| "nonce" used in other mechanisms to detect replay attacks. | "nonce" used in other mechanisms to detect replay attacks. | |||
| When a fresh public/private key pair is generated for the request, | When a fresh public/private key pair is generated for the request, | |||
| confirmation to the SZTP-client that the response has not been | confirmation to the SZTP-client that the response has not been | |||
| replayed is enabled by the SZTP-client's fresh public key appearing | replayed is enabled by the SZTP-client's fresh public key appearing | |||
| in the signed certificate provided by the SZTP-server. | in the signed certificate provided by the SZTP-server. | |||
| When a public/private key pair associated with the manufacturer- | When a public/private key pair associated with the manufacturer- | |||
| generated identity certificate (e.g., IDevID) is used for the | generated identity certificate (e.g., IDevID) is used for the | |||
| request, there may not be confirmation to the SZTP-client that the | request, there may not be confirmation to the SZTP-client that the | |||
| response has not been replayed; however, the worst case result is a | response has not been replayed; however, the worst case result is a | |||
| lost certificate that is associated to the private key known only to | lost certificate that is associated to the private key known only to | |||
| the SZTP-client. | the SZTP-client. | |||
| 3.1.4. Connecting to an Untrusted Bootstrap Server | 4.1.4. Connecting to an Untrusted Bootstrap Server | |||
| [RFC8572] allows SZTP-clients to connect to untrusted SZTP-servers, | [RFC8572] allows SZTP-clients to connect to untrusted SZTP-servers, | |||
| by blindly authenticating the SZTP-server's TLS end-entity | by blindly authenticating the SZTP-server's TLS end-entity | |||
| certificate. | certificate. | |||
| As is discussed in Section 9.5 of [RFC8572], in such cases the SZTP- | As is discussed in Section 9.5 of [RFC8572], in such cases the SZTP- | |||
| client MUST assert that the bootstrapping data returned is signed, if | client MUST assert that the bootstrapping data returned is signed, if | |||
| the SZTP-client is to trust it. | the SZTP-client is to trust it. | |||
| However, the HTTP error message used in this document cannot be | However, the HTTP error message used in this document cannot be | |||
| skipping to change at page 25, line 5 ¶ | skipping to change at page 29, line 11 ¶ | |||
| Therefore, the solution presented in this document cannot be used | Therefore, the solution presented in this document cannot be used | |||
| when the SZTP-client connects to an untrusted SZTP-server. | when the SZTP-client connects to an untrusted SZTP-server. | |||
| Consistent with the recommendation presented in Section 9.6 of | Consistent with the recommendation presented in Section 9.6 of | |||
| [RFC8572], SZTP-clients SHOULD NOT pass the "csr-support" input | [RFC8572], SZTP-clients SHOULD NOT pass the "csr-support" input | |||
| parameter to an untrusted SZTP-server. SZTP-clients SHOULD pass | parameter to an untrusted SZTP-server. SZTP-clients SHOULD pass | |||
| instead the "signed-data-preferred" input parameter, as discussed in | instead the "signed-data-preferred" input parameter, as discussed in | |||
| Appendix B of [RFC8572]. | Appendix B of [RFC8572]. | |||
| 3.1.5. Selecting the Best Origin Authentication Mechanism | 4.1.5. Selecting the Best Origin Authentication Mechanism | |||
| When generating a new key, it is important that the client be able to | When generating a new key, it is important that the client be able to | |||
| provide additional proof to the CA that it was the entity that | provide additional proof to the CA that it was the entity that | |||
| generated the key. | generated the key. | |||
| All the certificate request formats defined in this document (e.g., | All the certificate request formats defined in this document (e.g., | |||
| CMC, CMP, etc.), not including a raw PKCS#10, support origin | CMC, CMP, etc.), not including a raw PKCS#10, support origin | |||
| authentication. | authentication. | |||
| These formats support origin authentication using both PKI and shared | These formats support origin authentication using both PKI and shared | |||
| skipping to change at page 25, line 29 ¶ | skipping to change at page 29, line 35 ¶ | |||
| possibly be used but, in the case that the SZTP-client authenticates | possibly be used but, in the case that the SZTP-client authenticates | |||
| itself using both TLS-level (e.g., IDevID) and HTTP-level credentials | itself using both TLS-level (e.g., IDevID) and HTTP-level credentials | |||
| (e.g., Basic), as is allowed by Section 5.3 of [RFC8572], then the | (e.g., Basic), as is allowed by Section 5.3 of [RFC8572], then the | |||
| SZTP-client may need to choose between the two options. | SZTP-client may need to choose between the two options. | |||
| In the case that the SZTP-client must choose between the asymmetric | In the case that the SZTP-client must choose between the asymmetric | |||
| key option versus a shared secret for origin authentication, it is | key option versus a shared secret for origin authentication, it is | |||
| RECOMMENDED that the SZTP-client choose using the asymmetric key | RECOMMENDED that the SZTP-client choose using the asymmetric key | |||
| option. | option. | |||
| 3.1.6. Clearing the Private Key and Associated Certificate | 4.1.6. Clearing the Private Key and Associated Certificate | |||
| Unlike a manufacturer-generated identity certificate (e.g., IDevID), | Unlike a manufacturer-generated identity certificate (e.g., IDevID), | |||
| the deployment-generated identity certificate (e.g., LDevID) and the | the deployment-generated identity certificate (e.g., LDevID) and the | |||
| associated private key (assuming a new private key was generated for | associated private key (assuming a new private key was generated for | |||
| the purpose), are considered user data and SHOULD be cleared whenever | the purpose), are considered user data and SHOULD be cleared whenever | |||
| the device is reset to its factory default state, such as by the | the SZTP-client is reset to its factory default state, such as by the | |||
| "factory-reset" RPC defined in [I-D.ietf-netmod-factory-default]. | "factory-reset" RPC defined in [I-D.ietf-netmod-factory-default]. | |||
| 3.2. SZTP-Server Considerations | 4.2. SZTP-Server Considerations | |||
| 3.2.1. Conveying Proof of Possession to a CA | 4.2.1. Conveying Proof of Possession to a CA | |||
| When the bootstrapping device's manufacturer-generated private key | When the bootstrapping device's manufacturer-generated private key | |||
| (e.g., the IDevID key) is reused, a CA may validate that the CSR was | (e.g., the IDevID key) is reused, a CA may validate that the CSR was | |||
| signed by that key. | signed by that key. | |||
| Both the CMP and CMC formats entail the bootstrapping device signing | Both the CMP and CMC formats entail the bootstrapping device signing | |||
| the request once with its (e.g., LDevID) key and then again with its | the request once with its (e.g., LDevID) key and then again with its | |||
| (e.g., IDevID) key, which enables a downstream CA to be assured that | (e.g., IDevID) key, which enables a downstream CA to be assured that | |||
| the device possesses the public key being signed. | the bootstrapping device possesses the public key being signed. | |||
| 3.2.2. Supporting SZTP-Clients that don't trust the SZTP-Server | 4.2.2. Supporting SZTP-Clients that don't trust the SZTP-Server | |||
| [RFC8572] allows SZTP-clients to connect to untrusted SZTP-servers, | [RFC8572] allows SZTP-clients to connect to untrusted SZTP-servers, | |||
| by blindly authenticating the SZTP-server's TLS end-entity | by blindly authenticating the SZTP-server's TLS end-entity | |||
| certificate. | certificate. | |||
| As is recommended in Section 3.1.4 in this document, in such cases, | As is recommended in Section 4.1.4 in this document, in such cases, | |||
| SZTP-clients SHOULD pass the "signed-data-preferred" input parameter. | SZTP-clients SHOULD pass the "signed-data-preferred" input parameter. | |||
| The reciprocal of this statement is that SZTP-servers, wanting to | The reciprocal of this statement is that SZTP-servers, wanting to | |||
| support SZTP-clients that don't trust them, SHOULD support the | support SZTP-clients that don't trust them, SHOULD support the | |||
| "signed-data-preferred" input parameter, as discussed in Appendix B | "signed-data-preferred" input parameter, as discussed in Appendix B | |||
| of [RFC8572]. | of [RFC8572]. | |||
| 3.2.3. YANG Module Considerations | 4.3. Security Considerations for the "ietf-sztp-csr" YANG Module | |||
| The recommended format for documenting the Security Considerations | The recommended format for documenting the Security Considerations | |||
| for YANG modules is described in Section 3.7 of [RFC8407]. However, | for YANG modules is described in Section 3.7 of [RFC8407]. However, | |||
| the module defined in this document only augments two input | this module only augments two input parameters into the "get- | |||
| parameters into the "get-bootstrapping-data" RPC in [RFC8572], and | bootstrapping-data" RPC in [RFC8572], and therefore only needs to | |||
| therefore only needs to point to the relevant Security Considerations | point to the relevant Security Considerations sections in that RFC. | |||
| sections in that RFC. | ||||
| * Security considerations for the "get-bootstrapping-data" RPC are | * Security considerations for the "get-bootstrapping-data" RPC are | |||
| described in Section 9.16 of [RFC8572]. | described in Section 9.16 of [RFC8572]. | |||
| * Security considerations for the "input" parameters passed inside | * Security considerations for the "input" parameters passed inside | |||
| the "get-bootstrapping-data" RPC are described in Section 9.6 of | the "get-bootstrapping-data" RPC are described in Section 9.6 of | |||
| [RFC8572]. | [RFC8572]. | |||
| 4. IANA Considerations | 4.4. Security Considerations for the "ietf-ztp-types" YANG Module | |||
| 4.1. The "IETF XML" Registry | The recommended format for documenting the Security Considerations | |||
| for YANG modules is described in Section 3.7 of [RFC8407]. However, | ||||
| this module does not define any protocol-accessible nodes (it only | ||||
| defines "identity" and "grouping" statements) and therefore there are | ||||
| no Security considerations to report. | ||||
| This document registers one URI in the "ns" subregistry of the IETF | 5. IANA Considerations | |||
| 5.1. The "IETF XML" Registry | ||||
| This document registers two URIs in the "ns" subregistry of the IETF | ||||
| XML Registry [RFC3688] maintained at | XML Registry [RFC3688] maintained at | |||
| https://www.iana.org/assignments/xml-registry/xml-registry.xhtml#ns. | https://www.iana.org/assignments/xml-registry/xml-registry.xhtml#ns. | |||
| Following the format in [RFC3688], the following registration is | Following the format in [RFC3688], the following registrations are | |||
| requested: | requested: | |||
| URI: urn:ietf:params:xml:ns:yang:ietf-sztp-csr | URI: urn:ietf:params:xml:ns:yang:ietf-sztp-csr | |||
| 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. | |||
| 4.2. The "YANG Module Names" Registry | URI: urn:ietf:params:xml:ns:yang:ietf-ztp-types | |||
| Registrant Contact: The NETCONF WG of the IETF. | ||||
| XML: N/A, the requested URI is an XML namespace. | ||||
| This document registers one YANG module in the YANG Module Names | 5.2. The "YANG Module Names" Registry | |||
| This document registers two YANG modules in the YANG Module Names | ||||
| registry [RFC6020] maintained at https://www.iana.org/assignments/ | registry [RFC6020] maintained at https://www.iana.org/assignments/ | |||
| yang-parameters/yang-parameters.xhtml. Following the format defined | yang-parameters/yang-parameters.xhtml. Following the format defined | |||
| in [RFC6020], the below registration is requested: | in [RFC6020], the below registrations are requested: | |||
| name: ietf-sztp-csr | name: ietf-sztp-csr | |||
| namespace: urn:ietf:params:xml:ns:yang:ietf-sztp-csr | namespace: urn:ietf:params:xml:ns:yang:ietf-sztp-csr | |||
| prefix: sztp-csr | prefix: sztp-csr | |||
| reference: RFC XXXX | reference: RFC XXXX | |||
| 5. References | name: ietf-ztp-types | |||
| namespace: urn:ietf:params:xml:ns:yang:ietf-ztp-types | ||||
| prefix: ztp-types | ||||
| reference: RFC XXXX | ||||
| 5.1. Normative References | 6. References | |||
| 6.1. Normative References | ||||
| [I-D.ietf-netconf-crypto-types] | [I-D.ietf-netconf-crypto-types] | |||
| Watsen, K., "YANG Data Types and Groupings for | Watsen, K., "YANG Data Types and Groupings for | |||
| Cryptography", Work in Progress, Internet-Draft, draft- | Cryptography", Work in Progress, Internet-Draft, draft- | |||
| ietf-netconf-crypto-types-19, 10 February 2021, | ietf-netconf-crypto-types-20, 18 May 2021, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-netconf- | <https://datatracker.ietf.org/doc/html/draft-ietf-netconf- | |||
| crypto-types-19>. | crypto-types-20>. | |||
| [ITU.X690.2015] | [ITU.X690.2015] | |||
| International Telecommunication Union, "Information | International Telecommunication Union, "Information | |||
| Technology - ASN.1 encoding rules: Specification of Basic | Technology - ASN.1 encoding rules: Specification of Basic | |||
| Encoding Rules (BER), Canonical Encoding Rules (CER) and | Encoding Rules (BER), Canonical Encoding Rules (CER) and | |||
| Distinguished Encoding Rules (DER)", ITU-T Recommendation | Distinguished Encoding Rules (DER)", ITU-T Recommendation | |||
| X.690, ISO/IEC 8825-1, August 2015, | X.690, ISO/IEC 8825-1, August 2015, | |||
| <https://www.itu.int/rec/T-REC-X.690/>. | <https://www.itu.int/rec/T-REC-X.690/>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| skipping to change at page 28, line 5 ¶ | skipping to change at page 32, line 22 ¶ | |||
| [RFC2986] Nystrom, M. and B. Kaliski, "PKCS #10: Certification | [RFC2986] Nystrom, M. and B. Kaliski, "PKCS #10: Certification | |||
| Request Syntax Specification Version 1.7", RFC 2986, | Request Syntax Specification Version 1.7", RFC 2986, | |||
| DOI 10.17487/RFC2986, November 2000, | DOI 10.17487/RFC2986, November 2000, | |||
| <https://www.rfc-editor.org/info/rfc2986>. | <https://www.rfc-editor.org/info/rfc2986>. | |||
| [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
| DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
| <https://www.rfc-editor.org/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
| [RFC4210] Adams, C., Farrell, S., Kause, T., and T. Mononen, | ||||
| "Internet X.509 Public Key Infrastructure Certificate | ||||
| Management Protocol (CMP)", RFC 4210, | ||||
| DOI 10.17487/RFC4210, September 2005, | ||||
| <https://www.rfc-editor.org/info/rfc4210>. | ||||
| [RFC5272] Schaad, J. and M. Myers, "Certificate Management over CMS | ||||
| (CMC)", RFC 5272, DOI 10.17487/RFC5272, June 2008, | ||||
| <https://www.rfc-editor.org/info/rfc5272>. | ||||
| [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, | |||
| DOI 10.17487/RFC6020, October 2010, | DOI 10.17487/RFC6020, October 2010, | |||
| <https://www.rfc-editor.org/info/rfc6020>. | <https://www.rfc-editor.org/info/rfc6020>. | |||
| [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | |||
| RFC 7950, DOI 10.17487/RFC7950, August 2016, | RFC 7950, DOI 10.17487/RFC7950, August 2016, | |||
| <https://www.rfc-editor.org/info/rfc7950>. | <https://www.rfc-editor.org/info/rfc7950>. | |||
| [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | |||
| skipping to change at page 28, line 27 ¶ | skipping to change at page 33, line 10 ¶ | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8572] Watsen, K., Farrer, I., and M. Abrahamsson, "Secure Zero | [RFC8572] Watsen, K., Farrer, I., and M. Abrahamsson, "Secure Zero | |||
| Touch Provisioning (SZTP)", RFC 8572, | Touch Provisioning (SZTP)", RFC 8572, | |||
| DOI 10.17487/RFC8572, April 2019, | DOI 10.17487/RFC8572, April 2019, | |||
| <https://www.rfc-editor.org/info/rfc8572>. | <https://www.rfc-editor.org/info/rfc8572>. | |||
| 5.2. Informative References | [RFC8791] Bierman, A., Björklund, M., and K. Watsen, "YANG Data | |||
| Structure Extensions", RFC 8791, DOI 10.17487/RFC8791, | ||||
| June 2020, <https://www.rfc-editor.org/info/rfc8791>. | ||||
| 6.2. Informative References | ||||
| [I-D.ietf-netconf-keystore] | [I-D.ietf-netconf-keystore] | |||
| Watsen, K., "A YANG Data Model for a Keystore", Work in | Watsen, K., "A YANG Data Model for a Keystore", Work in | |||
| Progress, Internet-Draft, draft-ietf-netconf-keystore-21, | Progress, Internet-Draft, draft-ietf-netconf-keystore-22, | |||
| 10 February 2021, <https://datatracker.ietf.org/doc/html/ | 18 May 2021, <https://datatracker.ietf.org/doc/html/draft- | |||
| draft-ietf-netconf-keystore-21>. | ietf-netconf-keystore-22>. | |||
| [I-D.ietf-netconf-trust-anchors] | [I-D.ietf-netconf-trust-anchors] | |||
| Watsen, K., "A YANG Data Model for a Truststore", Work in | Watsen, K., "A YANG Data Model for a Truststore", Work in | |||
| Progress, Internet-Draft, draft-ietf-netconf-trust- | Progress, Internet-Draft, draft-ietf-netconf-trust- | |||
| anchors-14, 10 February 2021, | anchors-15, 18 May 2021, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-netconf- | <https://datatracker.ietf.org/doc/html/draft-ietf-netconf- | |||
| trust-anchors-14>. | trust-anchors-15>. | |||
| [I-D.ietf-netmod-factory-default] | [I-D.ietf-netmod-factory-default] | |||
| Wu, Q., Lengyel, B., and Y. Niu, "A YANG Data Model for | Wu, Q., Lengyel, B., and Y. Niu, "A YANG Data Model for | |||
| Factory Default Settings", Work in Progress, Internet- | Factory Default Settings", Work in Progress, Internet- | |||
| Draft, draft-ietf-netmod-factory-default-15, 25 April | Draft, draft-ietf-netmod-factory-default-15, 25 April | |||
| 2020, <https://datatracker.ietf.org/doc/html/draft-ietf- | 2020, <https://datatracker.ietf.org/doc/html/draft-ietf- | |||
| netmod-factory-default-15>. | netmod-factory-default-15>. | |||
| [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | |||
| BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | |||
| skipping to change at page 29, line 16 ¶ | skipping to change at page 34, line 5 ¶ | |||
| Documents Containing YANG Data Models", BCP 216, RFC 8407, | Documents Containing YANG Data Models", BCP 216, RFC 8407, | |||
| DOI 10.17487/RFC8407, October 2018, | DOI 10.17487/RFC8407, October 2018, | |||
| <https://www.rfc-editor.org/info/rfc8407>. | <https://www.rfc-editor.org/info/rfc8407>. | |||
| [Std-802.1AR-2018] | [Std-802.1AR-2018] | |||
| Group, W. -. H. L. L. P. W., "IEEE Standard for Local and | Group, W. -. H. L. L. P. W., "IEEE Standard for Local and | |||
| metropolitan area networks - Secure Device Identity", 14 | metropolitan area networks - Secure Device Identity", 14 | |||
| June 2018, <http://standards.ieee.org/findstds/ | June 2018, <http://standards.ieee.org/findstds/ | |||
| standard/802.1AR-2018.html>. | standard/802.1AR-2018.html>. | |||
| Acknowledgements | ||||
| The authors would like to thank for following for lively discussions | ||||
| on list and in the halls (ordered by first name): David von Oheimb, | ||||
| Hendrik Brockhaus, Guy Fedorkow, Joe Clarke, Rich Salz, Rob Wilton, | ||||
| and Qin Wu. | ||||
| Contributors | ||||
| Special thanks goes to David von Oheimb and Hendrik Brockhaus for | ||||
| helping with the descriptions for the "cmc-csr" and "cmp-csr" nodes. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Kent Watsen | Kent Watsen | |||
| Watsen Networks | Watsen Networks | |||
| Email: kent+ietf@watsen.net | Email: kent+ietf@watsen.net | |||
| Russ Housley | Russ Housley | |||
| Vigil Security, LLC | Vigil Security, LLC | |||
| End of changes. 104 change blocks. | ||||
| 440 lines changed or deleted | 637 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||