| module ietf-tls-common { |
| yang-version 1.1; |
| namespace "urn:ietf:params:xml:ns:yang:ietf-tls-common"; |
| prefix tlscmn; |
| |
| import iana-tls-cipher-suite-algs { |
| prefix tlscsa; |
| reference |
| "RFC FFFF: YANG Groupings for TLS Clients and SSH Servers"; |
| } |
| |
| import ietf-crypto-types { |
| prefix ct; |
| reference |
| "RFC AAAA: YANG Data Types and Groupings for Cryptography"; |
| } |
| |
| import ietf-keystore { |
| prefix ks; |
| reference |
| "RFC CCCC: A YANG Data Model for a Keystore"; |
| } |
| |
| organization |
| "IETF NETCONF (Network Configuration) Working Group"; |
| |
| contact |
| "WG List: NETCONF WG list <mailto:netconf@ietf.org> |
| WG Web: https://datatracker.ietf.org/wg/netconf |
| Author: Kent Watsen <mailto:kent+ietf@watsen.net> |
| Author: Jeff Hartley <mailto:jeff.hartley@commscope.com> |
| Author: Gary Wu <mailto:garywu@cisco.com>"; |
| |
| description |
| "This module defines a common features and groupings for |
| Transport Layer Security (TLS). |
| |
| Copyright (c) 2022 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 Revised |
| 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 FFFF |
| (https://www.rfc-editor.org/info/rfcFFFF); 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 2022-07-18 { |
| description |
| "Initial version"; |
| reference |
| "RFC FFFF: YANG Groupings for TLS Clients and TLS Servers"; |
| } |
| |
| // Features |
| |
| feature tls10 { |
| status "obsolete"; |
| description |
| "TLS Protocol Version 1.0 is supported. TLS 1.0 is obsolete |
| and thus it is NOT RECOMMENDED to enable this feature."; |
| reference |
| "RFC 2246: The TLS Protocol Version 1.0"; |
| } |
| |
| feature tls11 { |
| status "obsolete"; |
| description |
| "TLS Protocol Version 1.1 is supported. TLS 1.1 is obsolete |
| and thus it is NOT RECOMMENDED to enable this feature."; |
| reference |
| "RFC 4346: The Transport Layer Security (TLS) Protocol |
| Version 1.1"; |
| } |
| |
| feature tls12 { |
| status "deprecated"; |
| description |
| "TLS Protocol Version 1.2 is supported TLS 1.2 is obsolete |
| and thus it is NOT RECOMMENDED to enable this feature."; |
| reference |
| "RFC 5246: The Transport Layer Security (TLS) Protocol |
| Version 1.2"; |
| } |
| |
| feature tls13 { |
| description |
| "TLS Protocol Version 1.3 is supported."; |
| reference |
| "RFC 8446: The Transport Layer Security (TLS) |
| Protocol Version 1.3"; |
| } |
| |
| feature hello-params { |
| description |
| "TLS hello message parameters are configurable."; |
| } |
| |
| feature public-key-generation { |
| description |
| "Indicates that the server implements the |
| 'generate-public-key' RPC."; |
| } |
| |
| // Identities |
| |
| identity tls-version-base { |
| description |
| "Base identity used to identify TLS protocol versions."; |
| } |
| |
| identity tls10 { |
| if-feature "tls10"; |
| base tls-version-base; |
| status "obsolete"; |
| description |
| "TLS Protocol Version 1.0."; |
| reference |
| "RFC 2246: The TLS Protocol Version 1.0"; |
| } |
| |
| identity tls11 { |
| if-feature "tls11"; |
| base tls-version-base; |
| status "obsolete"; |
| description |
| "TLS Protocol Version 1.1."; |
| reference |
| "RFC 4346: The Transport Layer Security (TLS) Protocol |
| Version 1.1"; |
| } |
| |
| identity tls12 { |
| if-feature "tls12"; |
| base tls-version-base; |
| status "deprecated"; |
| description |
| "TLS Protocol Version 1.2."; |
| reference |
| "RFC 5246: The Transport Layer Security (TLS) Protocol |
| Version 1.2"; |
| } |
| |
| identity tls13 { |
| if-feature "tls13"; |
| base tls-version-base; |
| description |
| "TLS Protocol Version 1.3."; |
| reference |
| "RFC 8446: The Transport Layer Security (TLS) |
| Protocol Version 1.3"; |
| } |
| |
| typedef epsk-supported-hash { |
| type enumeration { |
| enum sha-256 { |
| description |
| "The SHA-256 Hash."; |
| } |
| enum sha-384 { |
| description |
| "The SHA-384 Hash."; |
| } |
| } |
| description |
| "As per Section 4.2.11 of RFC 8446, the hash algorithm |
| supported by an instance of an External Pre-Shared |
| Key (EPSK)."; |
| reference |
| "RFC 8446: The Transport Layer Security (TLS) |
| Protocol Version 1.3 |
| I-D.ietf-tls-external-psk-importer: Importing |
| External PSKs for TLS |
| I-D.ietf-tls-external-psk-guidance: Guidance |
| for External PSK Usage in TLS"; |
| } |
| |
| // Groupings |
| |
| grouping hello-params-grouping { |
| description |
| "A reusable grouping for TLS hello message parameters."; |
| reference |
| "RFC 5246: The Transport Layer Security (TLS) Protocol |
| Version 1.2 |
| RFC 8446: The Transport Layer Security (TLS) Protocol |
| Version 1.3"; |
| container tls-versions { |
| description |
| "Parameters regarding TLS versions."; |
| leaf-list tls-version { |
| type identityref { |
| base tls-version-base; |
| } |
| description |
| "Acceptable TLS protocol versions. |
| |
| If this leaf-list is not configured (has zero elements) |
| the acceptable TLS protocol versions are implementation- |
| defined."; |
| } |
| } |
| container cipher-suites { |
| description |
| "Parameters regarding cipher suites."; |
| leaf-list cipher-suite { |
| type identityref { |
| base tlscsa:cipher-suite-alg-base; |
| } |
| ordered-by user; |
| description |
| "Acceptable cipher suites in order of descending |
| preference. The configured host key algorithms should |
| be compatible with the algorithm used by the configured |
| private key. Please see Section 5 of RFC FFFF for |
| valid combinations. |
| |
| If this leaf-list is not configured (has zero elements) |
| the acceptable cipher suites are implementation- |
| defined."; |
| reference |
| "RFC FFFF: YANG Groupings for TLS Clients and TLS Servers"; |
| } |
| } |
| } // hello-params-grouping |
| |
| rpc generate-public-key { |
| if-feature "public-key-generation"; |
| description |
| "Requests the device to generate an public key using |
| the specified key algorithm."; |
| input { |
| leaf algorithm { |
| type tlscsa:cipher-suite-algorithm-ref; |
| mandatory true; |
| description |
| "The cipher suite algorithm that the generated key is |
| to work with. Implementations derive the public key |
| algorithm from the cipher suite algorithm. Example: |
| cipher suite 'tls-rsa-with-aes-256-cbc-sha256' maps |
| to the RSA public key."; |
| } |
| leaf bits { |
| type uint16; |
| description |
| "Specifies the number of bits in the key to create. |
| For RSA keys, the minimum size is 1024 bits and |
| the default is 3072 bits. Generally, 3072 bits is |
| considered sufficient. DSA keys must be exactly 1024 |
| bits as specified by FIPS 186-2. For elliptical |
| keys, the 'bits' value determines the key length |
| of the curve (e.g., 256, 384 or 521), where valid |
| values supported by the server are conveyed via an |
| unspecified mechanism. For some public algorithms, |
| the keys have a fixed length and the 'bits' value, |
| if specified, will be ignored."; |
| } |
| choice private-key-encoding { |
| default cleartext; |
| description |
| "A choice amongst optional private key handling."; |
| case cleartext { |
| leaf cleartext { |
| type empty; |
| description |
| "Indicates that the private key is to be returned |
| as a cleartext value."; |
| } |
| } |
| case encrypt { |
| if-feature "ct:private-key-encryption"; |
| container encrypt-with { |
| description |
| "Indicates that the key is to be encrypted using |
| the specified symmetric or asymmetric key."; |
| uses ks:encrypted-by-choice-grouping; |
| } |
| } |
| case hide { |
| if-feature "ct:hidden-keys"; |
| leaf hide { |
| type empty; |
| description |
| "Indicates that the private key is to be hidden. |
| |
| Unlike the 'cleartext' and 'encrypt' options, the |
| key returned is a placeholder for an internally |
| stored key. See the 'Support for Built-in Keys' |
| section in RFC CCCC for information about hidden |
| keys."; |
| } |
| } |
| } |
| } |
| output { |
| uses ct:asymmetric-key-pair-grouping; |
| } |
| } // end generate-public-key |
| |
| } |