| < draft-ietf-isms-dtls-tm-08.txt | draft-ietf-isms-dtls-tm-09.txt > | |||
|---|---|---|---|---|
| ISMS W. Hardaker | ISMS W. Hardaker | |||
| Internet-Draft Sparta, Inc. | Internet-Draft Sparta, Inc. | |||
| Intended status: Standards Track February 2, 2010 | Intended status: Standards Track March 6, 2010 | |||
| Expires: August 6, 2010 | Expires: September 7, 2010 | |||
| Transport Layer Security (TLS) Transport Model for SNMP | Transport Layer Security (TLS) Transport Model for SNMP | |||
| draft-ietf-isms-dtls-tm-08.txt | draft-ietf-isms-dtls-tm-09.txt | |||
| Abstract | Abstract | |||
| This document describes a Transport Model for the Simple Network | This document describes a Transport Model for the Simple Network | |||
| Management Protocol (SNMP), that uses either the Transport Layer | Management Protocol (SNMP), that uses either the Transport Layer | |||
| Security protocol or the Datagram Transport Layer Security (DTLS) | Security protocol or the Datagram Transport Layer Security (DTLS) | |||
| protocol. The TLS and DTLS protocols provide authentication and | protocol. The TLS and DTLS protocols provide authentication and | |||
| privacy services for SNMP applications. This document describes how | privacy services for SNMP applications. This document describes how | |||
| the TLS Transport Model (TLSTM) implements the needed features of a | the TLS Transport Model (TLSTM) implements the needed features of a | |||
| SNMP Transport Subsystem to make this protection possible in an | SNMP Transport Subsystem to make this protection possible in an | |||
| interoperable way. | interoperable way. | |||
| This transport model is designed to meet the security and operational | This transport model is designed to meet the security and operational | |||
| needs of network administrators. It supports sending of SNMP | needs of network administrators. It supports sending of SNMP | |||
| messages over TLS/TCP, DTLS/UDP and DTLS/SCTP. The TLS mode can make | messages over TLS/TCP and DTLS/UDP. The TLS mode can make use of | |||
| use of TCP's improved support for larger packet sizes and the DTLS | TCP's improved support for larger packet sizes and the DTLS mode | |||
| mode provides potentially superior operation in environments where a | provides potentially superior operation in environments where a | |||
| connectionless (e.g. UDP or SCTP) transport is preferred. Both TLS | connectionless (e.g. UDP) transport is preferred. Both TLS and DTLS | |||
| and DTLS integrate well into existing public keying infrastructures. | integrate well into existing public keying infrastructures. | |||
| This document also defines a portion of the Management Information | This document also defines a portion of the Management Information | |||
| Base (MIB) for use with network management protocols. In particular | Base (MIB) for use with network management protocols. In particular | |||
| it defines objects for managing the TLS Transport Model for SNMP. | it defines objects for managing the TLS Transport Model for SNMP. | |||
| Status of this Memo | Status of this Memo | |||
| This Internet-Draft is submitted to IETF in full conformance with the | This Internet-Draft is submitted to IETF in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| skipping to change at page 2, line 9 ¶ | skipping to change at page 2, line 9 ¶ | |||
| 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." | |||
| The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
| http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
| This Internet-Draft will expire on August 6, 2010. | This Internet-Draft will expire on September 7, 2010. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2010 IETF Trust and the persons identified as the | Copyright (c) 2010 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 3, line 8 ¶ | skipping to change at page 3, line 8 ¶ | |||
| Without obtaining an adequate license from the person(s) controlling | Without obtaining an adequate license from the person(s) controlling | |||
| the copyright in such materials, this document may not be modified | the copyright in such materials, this document may not be modified | |||
| outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
| not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
| it for publication as an RFC or to translate it into languages other | it for publication as an RFC or to translate it into languages other | |||
| than English. | than English. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 1.1. Conventions . . . . . . . . . . . . . . . . . . . . . . . 7 | 1.1. Conventions . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 2. The Transport Layer Security Protocol . . . . . . . . . . . . 8 | 2. The Transport Layer Security Protocol . . . . . . . . . . . . 9 | |||
| 3. How the TLSTM fits into the Transport Subsystem . . . . . . . 8 | 3. How the TLSTM fits into the Transport Subsystem . . . . . . . 9 | |||
| 3.1. Security Capabilities of this Model . . . . . . . . . . . 10 | 3.1. Security Capabilities of this Model . . . . . . . . . . . 11 | |||
| 3.1.1. Threats . . . . . . . . . . . . . . . . . . . . . . . 10 | 3.1.1. Threats . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 3.1.2. Message Protection . . . . . . . . . . . . . . . . . . 12 | 3.1.2. Message Protection . . . . . . . . . . . . . . . . . . 12 | |||
| 3.1.3. (D)TLS Sessions . . . . . . . . . . . . . . . . . . . 12 | 3.1.3. (D)TLS Connections . . . . . . . . . . . . . . . . . . 13 | |||
| 3.2. Security Parameter Passing . . . . . . . . . . . . . . . . 13 | 3.2. Security Parameter Passing . . . . . . . . . . . . . . . . 14 | |||
| 3.3. Notifications and Proxy . . . . . . . . . . . . . . . . . 14 | 3.3. Notifications and Proxy . . . . . . . . . . . . . . . . . 14 | |||
| 4. Elements of the Model . . . . . . . . . . . . . . . . . . . . 14 | 4. Elements of the Model . . . . . . . . . . . . . . . . . . . . 15 | |||
| 4.1. X.509 Certificates . . . . . . . . . . . . . . . . . . . . 15 | 4.1. X.509 Certificates . . . . . . . . . . . . . . . . . . . . 15 | |||
| 4.1.1. Provisioning for the Certificate . . . . . . . . . . . 15 | 4.1.1. Provisioning for the Certificate . . . . . . . . . . . 15 | |||
| 4.2. Messages . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 4.2. (D)TLS Usage . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 4.3. SNMP Services . . . . . . . . . . . . . . . . . . . . . . 16 | 4.3. SNMP Services . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 4.3.1. SNMP Services for an Outgoing Message . . . . . . . . 17 | 4.3.1. SNMP Services for an Outgoing Message . . . . . . . . 18 | |||
| 4.3.2. SNMP Services for an Incoming Message . . . . . . . . 17 | 4.3.2. SNMP Services for an Incoming Message . . . . . . . . 18 | |||
| 4.4. Cached Information and References . . . . . . . . . . . . 18 | 4.4. Cached Information and References . . . . . . . . . . . . 19 | |||
| 4.4.1. TLS Transport Model Cached Information . . . . . . . . 18 | 4.4.1. TLS Transport Model Cached Information . . . . . . . . 19 | |||
| 4.4.1.1. tmSecurityName . . . . . . . . . . . . . . . . . . 19 | 4.4.1.1. tmSecurityName . . . . . . . . . . . . . . . . . . 20 | |||
| 4.4.1.2. tmSessionID . . . . . . . . . . . . . . . . . . . 19 | 4.4.1.2. tmSessionID . . . . . . . . . . . . . . . . . . . 20 | |||
| 4.4.1.3. Session State . . . . . . . . . . . . . . . . . . 19 | 4.4.1.3. Session State . . . . . . . . . . . . . . . . . . 20 | |||
| 5. Elements of Procedure . . . . . . . . . . . . . . . . . . . . 19 | 5. Elements of Procedure . . . . . . . . . . . . . . . . . . . . 20 | |||
| 5.1. Procedures for an Incoming Message . . . . . . . . . . . . 20 | 5.1. Procedures for an Incoming Message . . . . . . . . . . . . 21 | |||
| 5.1.1. DTLS Processing for Incoming Messages . . . . . . . . 20 | 5.1.1. DTLS over UDP Processing for Incoming Messages . . . . 21 | |||
| 5.1.2. Transport Processing for Incoming SNMP Messages . . . 22 | 5.1.2. Transport Processing for Incoming SNMP Messages . . . 23 | |||
| 5.2. Procedures for an Outgoing SNMP Message . . . . . . . . . 23 | 5.2. Procedures for an Outgoing SNMP Message . . . . . . . . . 24 | |||
| 5.3. Establishing or Accepting a Session . . . . . . . . . . . 25 | 5.3. Establishing or Accepting a Session . . . . . . . . . . . 25 | |||
| 5.3.1. Establishing a Session as a Client . . . . . . . . . . 25 | 5.3.1. Establishing a Session as a Client . . . . . . . . . . 26 | |||
| 5.3.2. Accepting a Session as a Server . . . . . . . . . . . 27 | 5.3.2. Accepting a Session as a Server . . . . . . . . . . . 28 | |||
| 5.4. Closing a Session . . . . . . . . . . . . . . . . . . . . 28 | 5.4. Closing a Session . . . . . . . . . . . . . . . . . . . . 29 | |||
| 6. MIB Module Overview . . . . . . . . . . . . . . . . . . . . . 28 | 6. MIB Module Overview . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 6.1. Structure of the MIB Module . . . . . . . . . . . . . . . 28 | 6.1. Structure of the MIB Module . . . . . . . . . . . . . . . 29 | |||
| 6.2. Textual Conventions . . . . . . . . . . . . . . . . . . . 29 | 6.2. Textual Conventions . . . . . . . . . . . . . . . . . . . 29 | |||
| 6.3. Statistical Counters . . . . . . . . . . . . . . . . . . . 29 | 6.3. Statistical Counters . . . . . . . . . . . . . . . . . . . 30 | |||
| 6.4. Configuration Tables . . . . . . . . . . . . . . . . . . . 29 | 6.4. Configuration Tables . . . . . . . . . . . . . . . . . . . 30 | |||
| 6.4.1. Notifications . . . . . . . . . . . . . . . . . . . . 29 | 6.4.1. Notifications . . . . . . . . . . . . . . . . . . . . 30 | |||
| 6.5. Relationship to Other MIB Modules . . . . . . . . . . . . 29 | 6.5. Relationship to Other MIB Modules . . . . . . . . . . . . 30 | |||
| 6.5.1. MIB Modules Required for IMPORTS . . . . . . . . . . . 30 | 6.5.1. MIB Modules Required for IMPORTS . . . . . . . . . . . 30 | |||
| 7. MIB Module Definition . . . . . . . . . . . . . . . . . . . . 30 | 7. MIB Module Definition . . . . . . . . . . . . . . . . . . . . 31 | |||
| 8. Operational Considerations . . . . . . . . . . . . . . . . . . 51 | 8. Operational Considerations . . . . . . . . . . . . . . . . . . 52 | |||
| 8.1. Sessions . . . . . . . . . . . . . . . . . . . . . . . . . 52 | 8.1. Sessions . . . . . . . . . . . . . . . . . . . . . . . . . 52 | |||
| 8.2. Notification Receiver Credential Selection . . . . . . . . 52 | 8.2. Notification Receiver Credential Selection . . . . . . . . 53 | |||
| 8.3. contextEngineID Discovery . . . . . . . . . . . . . . . . 53 | 8.3. contextEngineID Discovery . . . . . . . . . . . . . . . . 53 | |||
| 8.4. Transport Considerations . . . . . . . . . . . . . . . . . 53 | 8.4. Transport Considerations . . . . . . . . . . . . . . . . . 54 | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 53 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 54 | |||
| 9.1. Certificates, Authentication, and Authorization . . . . . 53 | 9.1. Certificates, Authentication, and Authorization . . . . . 54 | |||
| 9.2. Use with SNMPv1/SNMPv2c Messages . . . . . . . . . . . . . 54 | 9.2. Use with SNMPv1/SNMPv2c Messages . . . . . . . . . . . . . 55 | |||
| 9.3. MIB Module Security . . . . . . . . . . . . . . . . . . . 55 | 9.3. MIB Module Security . . . . . . . . . . . . . . . . . . . 55 | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 56 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 57 | |||
| 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 57 | 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 57 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 58 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 58 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . . 58 | 12.1. Normative References . . . . . . . . . . . . . . . . . . . 58 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . . 59 | 12.2. Informative References . . . . . . . . . . . . . . . . . . 59 | |||
| Appendix A. (D)TLS Overview . . . . . . . . . . . . . . . . . . . 60 | Appendix A. Target and Notification Configuration Example . . . . 60 | |||
| A.1. The (D)TLS Record Protocol . . . . . . . . . . . . . . . . 60 | A.1. Configuring the Notification Originator . . . . . . . . . 60 | |||
| A.2. The (D)TLS Handshake Protocol . . . . . . . . . . . . . . 61 | A.2. Configuring the Command Responder . . . . . . . . . . . . 62 | |||
| Appendix B. PKIX Certificate Infrastructure . . . . . . . . . . . 62 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 63 | |||
| Appendix C. Target and Notification Configuration Example . . . . 63 | ||||
| C.1. Configuring the Notification Originator . . . . . . . . . 64 | ||||
| C.2. Configuring the Command Responder . . . . . . . . . . . . 64 | ||||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 65 | ||||
| 1. Introduction | 1. Introduction | |||
| It is important to understand the modular SNMPv3 architecture as | It is important to understand the modular SNMPv3 architecture as | |||
| defined by [RFC3411] and enhanced by the Transport Subsystem | defined by [RFC3411] and enhanced by the Transport Subsystem | |||
| [RFC5590]. It is also important to understand the terminology of the | [RFC5590]. It is also important to understand the terminology of the | |||
| SNMPv3 architecture in order to understand where the Transport Model | SNMPv3 architecture in order to understand where the Transport Model | |||
| described in this document fits into the architecture and how it | described in this document fits into the architecture and how it | |||
| interacts with the other architecture subsystems. For a detailed | interacts with the other architecture subsystems. For a detailed | |||
| overview of the documents that describe the current Internet-Standard | overview of the documents that describe the current Internet-Standard | |||
| skipping to change at page 5, line 29 ¶ | skipping to change at page 5, line 29 ¶ | |||
| subsystem [RFC5590]. DTLS is the datagram variant of the Transport | subsystem [RFC5590]. DTLS is the datagram variant of the Transport | |||
| Layer Security (TLS) protocol [RFC5246]. The Transport Model in this | Layer Security (TLS) protocol [RFC5246]. The Transport Model in this | |||
| document is referred to as the Transport Layer Security Transport | document is referred to as the Transport Layer Security Transport | |||
| Model (TLSTM). TLS and DTLS take advantage of the X.509 public | Model (TLSTM). TLS and DTLS take advantage of the X.509 public | |||
| keying infrastructure [RFC5280]. While (D)TLS supports multiple | keying infrastructure [RFC5280]. While (D)TLS supports multiple | |||
| authentication mechanisms, this document only discusses X.509 | authentication mechanisms, this document only discusses X.509 | |||
| certificate based authentication. Although other forms of | certificate based authentication. Although other forms of | |||
| authentication are possible they are outside the scope of this | authentication are possible they are outside the scope of this | |||
| specification. This transport model is designed to meet the security | specification. This transport model is designed to meet the security | |||
| and operational needs of network administrators, operating in both | and operational needs of network administrators, operating in both | |||
| environments where a connectionless (e.g. UDP or SCTP) transport is | environments where a connectionless (e.g. UDP) transport is | |||
| preferred and in environments where large quantities of data need to | preferred and in environments where large quantities of data need to | |||
| be sent (e.g. over a TCP based stream). Both TLS and DTLS integrate | be sent (e.g. over a TCP based stream). Both TLS and DTLS integrate | |||
| well into existing public keying infrastructures. This document | well into existing public keying infrastructures. This document | |||
| supports sending of SNMP messages over TLS/TCP, DTLS/UDP and DTLS/ | supports sending of SNMP messages over TLS/TCP and DTLS/UDP. | |||
| SCTP. | ||||
| This document also defines a portion of the Management Information | This document also defines a portion of the Management Information | |||
| Base (MIB) for use with network management protocols. In particular | Base (MIB) for use with network management protocols. In particular | |||
| it defines objects for managing the TLS Transport Model for SNMP. | it defines objects for managing the TLS Transport Model for SNMP. | |||
| Managed objects are accessed via a virtual information store, termed | Managed objects are accessed via a virtual information store, termed | |||
| the Management Information Base or MIB. MIB objects are generally | the Management Information Base or MIB. MIB objects are generally | |||
| accessed through the Simple Network Management Protocol (SNMP). | accessed through the Simple Network Management Protocol (SNMP). | |||
| Objects in the MIB are defined using the mechanisms defined in the | Objects in the MIB are defined using the mechanisms defined in the | |||
| Structure of Management Information (SMI). This memo specifies a MIB | Structure of Management Information (SMI). This memo specifies a MIB | |||
| skipping to change at page 6, line 11 ¶ | skipping to change at page 7, line 8 ¶ | |||
| contains a command responder and notification originator application, | contains a command responder and notification originator application, | |||
| and the other a command generator and notification responder | and the other a command generator and notification responder | |||
| application. It should be understood that this particular mix of | application. It should be understood that this particular mix of | |||
| application types is an example only and other combinations are | application types is an example only and other combinations are | |||
| equally valid. Note: this diagram shows the Transport Security Model | equally valid. Note: this diagram shows the Transport Security Model | |||
| (TSM) being used as the security model which is defined in [RFC5591]. | (TSM) being used as the security model which is defined in [RFC5591]. | |||
| +---------------------------------------------------------------------+ | +---------------------------------------------------------------------+ | |||
| | Network | | | Network | | |||
| +---------------------------------------------------------------------+ | +---------------------------------------------------------------------+ | |||
| ^ | ^ | | ^ | ^ | | |||
| |Notifications |Commands |Commands |Notifications | |Notifications |Commands |Commands |Notifications | |||
| +---|---------------------|--------+ +--|---------------|-------------+ | +---|---------------------|-------+ +--|---------------|--------------+ | |||
| | | V | | | V | | | | V | | | V | | |||
| | +------------+ +------------+ | | +-----------+ +----------+ | | | +------------+ +------------+ | | +-----------+ +----------+ | | |||
| | | (D)TLS | | (D)TLS | | | | (D)TLS | | (D)TLS | | | | | (D)TLS | | (D)TLS | | | | (D)TLS | | (D)TLS | | | |||
| | | Service | | Service | | | | Service | | Service | | | | | (Client) | | (Server) | | | | (Client) | | (Server) | | | |||
| | | (Client) | | (Server) | | | | (Client) | | (Server)| | | | +------------+ +------------+ | | +-----------+ +----------+ | | |||
| | +------------+ +------------+ | | +-----------+ +----------+ | | | ^ ^ | | ^ ^ | | |||
| | ^ ^ | | ^ ^ | | | | | | | | | | | |||
| | | | | | | | | | | +-------------+ | | +--------------+ | | |||
| | +-------------+ | | +--------------+ | | | +-----|------------+ | | +-----|------------+ | | |||
| | +-----|--------------+ | | +-----|-----------+ | | | | V | | | | V | | | |||
| | | V | +-------+ | | | V | +--------+ | | | | +--------+ | +-----+ | | | +--------+ | +-----+ | | |||
| | | +--------+ | | | | | | +--------+ | | | | | | | | TLS TM |<--------->|Cache| | | | | TLS TM |<--------->|Cache| | | |||
| | | | TLS TM |---------->| Cache | | | | | TLS TM | <---->| Cache | | | | | +--------+ | +-----+ | | | +--------+ | +-----+ | | |||
| | | | | | | | | | | | | | | | | | | |Transport Subsys. | ^ | | |Transport Subsys. | ^ | | |||
| | | +--------+ | +-------+ | | | +--------+ | +--------+ | | | +------------------+ | | | +------------------+ | | | |||
| | |Transport Subsystem | ^ | | |Transport Sub. | ^ | | | ^ | | | ^ | | | |||
| | +--------------------+ | | | +-----------------+ | | | | | +--+ | | | +--+ | | |||
| | ^ +----+ | | ^ | | | | v | | | V | | | |||
| | | | | | | | | | | +-----+ +--------+ +-------+ | | | +-----+ +--------+ +-------+ | | | |||
| | v | | | V | | | | | | |Message | |Securi.| | | | | | |Message | |Securi.| | | | |||
| | +-------+ +----------+ +-----+ | | | +-----+ +------+ +-----+ | | | | |Disp.| |Proc. | |Subsys.| | | | |Disp.| |Proc. | |Subsys.| | | | |||
| | | | |Message | |Sec. | | | | | | | MP | |Sec. | | | | | | | |Subsys. | | | | | | | | |Subsys. | | | | | | |||
| | | Disp. | |Processing| |Sub- | | | | |Disp.| | Sub- | |Sub- | | | | | | | | | | | | | | | | | | | | | | | |||
| | | | |Subsystem | |sys. | | | | | | |system| |sys. | | | | | | | | +----+ | | +---+ | | | | | | | +----+ | | +---+ | | | | |||
| | | | | | | | | | | | | | | | | | | | | | <--->|v3MP|<--> |TSM|<--+ | | | <--->|v3MP|<--->|TSM|<--+ | | |||
| | | | | | |+---+| | | | | | | | |+---+| | | | | | | | +----+ | | +---+ | | | | | | +----+ | | +---+ | | | |||
| | | | | +-----+ | || || | | | | | |+----+| || || | | | | | | | | | | | | | | | | | | | | |||
| | | <--->|v3MP |<--->|TSM|<-+ | | | <-->|v3MP|<->|TSM|<-+ | | | +-----+ +--------+ +-------+ | | +-----+ +--------+ +-------+ | | |||
| | | | | +-----+ | || || | | | | |+----+| || || | | | ^ | | ^ | | |||
| | +-------+ | | |+---+| | | +-----+ | | |+---+| | | | | | | | | | |||
| | ^ | | | | | | ^ | | | | | | | +-+------------+ | | +-+----------+ | | |||
| | | +----------+ +-----+ | | | +------+ +-----+ | | | | | | | | | | | |||
| | +-+------------+ | | +-+----------+ | | | v v | | v V | | |||
| | ^ ^ | | | ^ | | | +-------------+ +-------------+ | | +-------------+ +-------------+ | | |||
| | | | | | | | | | | | COMMAND | | NOTIFICAT. | | | | COMMAND | | NOTIFICAT. | | | |||
| | v v | | v V | | | | RESPONDER | | ORIGINATOR | | | | GENERATOR | | RECEIVER | | | |||
| | +-------------+ +--------------+ | | +-----------+ +--------------+ | | | | application | | application | | | | application | | application | | | |||
| | | COMMAND | | NOTIFICATION | | | | COMMAND | | NOTIFICATION | | | | +-------------+ +-------------+ | | +-------------+ +-------------+ | | |||
| | | RESPONDER | | ORIGINATOR | | | | GENERATOR | | RECEIVER | | | | SNMP entity | | SNMP entity | | |||
| | | application | | application | | | |application| | application | | | +---------------------------------+ +---------------------------------+ | |||
| | +-------------+ +--------------+ | | +-----------+ +--------------+ | | ||||
| | SNMP entity | | SNMP entity | | ||||
| +----------------------------------+ +--------------------------------+ | ||||
| 1.1. Conventions | 1.1. Conventions | |||
| For consistency with SNMP-related specifications, this document | For consistency with SNMP-related specifications, this document | |||
| favors terminology as defined in STD 62, rather than favoring | favors terminology as defined in STD 62, rather than favoring | |||
| terminology that is consistent with non-SNMP specifications. This is | terminology that is consistent with non-SNMP specifications. This is | |||
| consistent with the IESG decision to not require the SNMPv3 | consistent with the IESG decision to not require the SNMPv3 | |||
| terminology be modified to match the usage of other non-SNMP | terminology be modified to match the usage of other non-SNMP | |||
| specifications when SNMPv3 was advanced to Full Standard. | specifications when SNMPv3 was advanced to Full Standard. | |||
| skipping to change at page 8, line 17 ¶ | skipping to change at page 9, line 10 ¶ | |||
| among other things, an individual acting in a particular role; a set | among other things, an individual acting in a particular role; a set | |||
| of individuals, with each acting in a particular role; an application | of individuals, with each acting in a particular role; an application | |||
| or a set of applications, or a combination of these within an | or a set of applications, or a combination of these within an | |||
| administrative domain. | administrative domain. | |||
| Throughout this document, the term "session" is used to refer to a | Throughout this document, the term "session" is used to refer to a | |||
| secure association between two TLS Transport Models that permits the | secure association between two TLS Transport Models that permits the | |||
| transmission of one or more SNMP messages within the lifetime of the | transmission of one or more SNMP messages within the lifetime of the | |||
| session. The (D)TLS protocols also have an internal notion of a | session. The (D)TLS protocols also have an internal notion of a | |||
| session and although these two concepts of a session are related, | session and although these two concepts of a session are related, | |||
| this document (unless otherwise specified) is referring to TLSTM's | when the term "session" is used this document is referring to the | |||
| specific session and not directly to the (D)TLS protocol's session. | TLSTM's specific session and not directly to the (D)TLS protocol's | |||
| session. | ||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
| 2. The Transport Layer Security Protocol | 2. The Transport Layer Security Protocol | |||
| (D)TLS provides authentication, data message integrity, and privacy | (D)TLS provides authentication, data message integrity, and privacy | |||
| at the transport layer. (See [RFC4347]) | at the transport layer. (See [RFC4347]) | |||
| The primary goals of the TLS Transport Model are to provide privacy, | The primary goals of the TLS Transport Model are to provide privacy, | |||
| peer identity authentication and data integrity between two | peer identity authentication and data integrity between two | |||
| communicating SNMP entities. The TLS and DTLS protocols provide a | communicating SNMP entities. The TLS and DTLS protocols provide a | |||
| secure transport upon which the TLSTM is based. An overview of | secure transport upon which the TLSTM is based. Please refer to | |||
| (D)TLS can be found in section Appendix A. Please refer to [RFC5246] | [RFC5246] and [RFC4347] for complete descriptions of the protocols. | |||
| and [RFC4347] for complete descriptions of the protocols. | ||||
| 3. How the TLSTM fits into the Transport Subsystem | 3. How the TLSTM fits into the Transport Subsystem | |||
| A transport model is a component of the Transport Subsystem. The TLS | A transport model is a component of the Transport Subsystem. The TLS | |||
| Transport Model thus fits between the underlying (D)TLS transport | Transport Model thus fits between the underlying (D)TLS transport | |||
| layer and the Message Dispatcher [RFC3411] component of the SNMP | layer and the Message Dispatcher [RFC3411] component of the SNMP | |||
| engine and the Transport Subsystem. | engine and the Transport Subsystem. | |||
| The TLS Transport Model will establish a session between itself and | The TLS Transport Model will establish a session between itself and | |||
| the TLS Transport Model of another SNMP engine. The sending | the TLS Transport Model of another SNMP engine. The sending | |||
| skipping to change at page 9, line 10 ¶ | skipping to change at page 9, line 49 ¶ | |||
| the Dispatcher to (D)TLS to be encrypted and authenticated, and the | the Dispatcher to (D)TLS to be encrypted and authenticated, and the | |||
| receiving transport model accepts decrypted and authenticated/ | receiving transport model accepts decrypted and authenticated/ | |||
| integrity-checked incoming messages from (D)TLS and passes them to | integrity-checked incoming messages from (D)TLS and passes them to | |||
| the Dispatcher. | the Dispatcher. | |||
| After a TLS Transport Model session is established, SNMP messages can | After a TLS Transport Model session is established, SNMP messages can | |||
| conceptually be sent through the session from one SNMP message | conceptually be sent through the session from one SNMP message | |||
| Dispatcher to another SNMP Message Dispatcher. If multiple SNMP | Dispatcher to another SNMP Message Dispatcher. If multiple SNMP | |||
| messages are needed to be passed between two SNMP applications they | messages are needed to be passed between two SNMP applications they | |||
| MAY be passed through the same session. A TLSTM implementation | MAY be passed through the same session. A TLSTM implementation | |||
| engine MAY choose to close a (D)TLS session to conserve resources. | engine MAY choose to close the session to conserve resources. | |||
| The TLS Transport Model of an SNMP engine will perform the | The TLS Transport Model of an SNMP engine will perform the | |||
| translation between (D)TLS-specific security parameters and SNMP- | translation between (D)TLS-specific security parameters and SNMP- | |||
| specific, model-independent parameters. | specific, model-independent parameters. | |||
| The diagram below depicts where the TLS Transport Model fits into the | The diagram below depicts where the TLS Transport Model fits into the | |||
| architecture described in RFC3411 and the Transport Subsystem: | architecture described in RFC3411 and the Transport Subsystem: | |||
| +------------------------------+ | +------------------------------+ | |||
| | Network | | | Network | | |||
| skipping to change at page 10, line 46 ¶ | skipping to change at page 11, line 39 ¶ | |||
| network, data has not been altered or destroyed in an | network, data has not been altered or destroyed in an | |||
| unauthorized manner, and data sequences have not been altered to | unauthorized manner, and data sequences have not been altered to | |||
| an extent greater than can occur non-maliciously. | an extent greater than can occur non-maliciously. | |||
| 2. Masquerade - The masquerade threat is the danger that management | 2. Masquerade - The masquerade threat is the danger that management | |||
| operations unauthorized for a given principal may be attempted by | operations unauthorized for a given principal may be attempted by | |||
| assuming the identity of another principal that has the | assuming the identity of another principal that has the | |||
| appropriate authorizations. | appropriate authorizations. | |||
| The TLSTM verifies of the identity of the (D)TLS server through | The TLSTM verifies of the identity of the (D)TLS server through | |||
| the use of the (D)TLS protocol and X.509 certificates. The TLS | the use of the (D)TLS protocol and X.509 certificates. A TLS | |||
| Transport Model MUST support authentication of both the server | Transport Model implementation MUST support authentication of | |||
| and the client. | both the server and the client. | |||
| 3. Message stream modification - The re-ordering, delay or replay of | 3. Message stream modification - The re-ordering, delay or replay of | |||
| messages can and does occur through the natural operation of many | messages can and does occur through the natural operation of many | |||
| connectionless transport services. The message stream | connectionless transport services. The message stream | |||
| modification threat is the danger that messages may be | modification threat is the danger that messages may be | |||
| maliciously re-ordered, delayed or replayed to an extent which is | maliciously re-ordered, delayed or replayed to an extent which is | |||
| greater than can occur through the natural operation of | greater than can occur through the natural operation of | |||
| connectionless transport services, in order to effect | connectionless transport services, in order to effect | |||
| unauthorized management operations. | unauthorized management operations. | |||
| (D)TLS provides replay protection with a MAC that includes a | (D)TLS provides replay protection with a MAC that includes a | |||
| sequence number. Since UDP provides no sequencing ability, DTLS | sequence number. Since UDP provides no sequencing ability, DTLS | |||
| uses a sliding window protocol with the sequence number used for | uses a sliding window protocol with the sequence number used for | |||
| replay protection (see [RFC4347]). | replay protection (see [RFC4347]). | |||
| 4. Disclosure - The disclosure threat is the danger of eavesdropping | 4. Disclosure - The disclosure threat is the danger of eavesdropping | |||
| on the exchanges between SNMP engines. | on the exchanges between SNMP engines. | |||
| (D)TLS provides protection against the disclosure of information | (D)TLS provides protection against the disclosure of information | |||
| to unauthorized recipients or eavesdroppers by allowing for | to unauthorized recipients or eavesdroppers by allowing for | |||
| encryption of all traffic between SNMP engines. The TLS | encryption of all traffic between SNMP engines. A TLS Transport | |||
| Transport Model SHOULD support the message encryption to protect | Model implementation SHOULD support the message encryption to | |||
| sensitive data from eavesdropping attacks. | protect sensitive data from eavesdropping attacks. | |||
| 5. Denial of Service - the RFC 3411 architecture [RFC3411] states | 5. Denial of Service - the RFC 3411 architecture [RFC3411] states | |||
| that denial of service (DoS) attacks need not be addressed by an | that denial of service (DoS) attacks need not be addressed by an | |||
| SNMP security protocol. However, datagram-based security | SNMP security protocol. However, connectionless transports (like | |||
| protocols like DTLS are susceptible to a variety of denial of | DTLS over UDP) are susceptible to a variety of denial of service | |||
| service attacks because they are more vulnerable to spoofed | attacks because they are more vulnerable to spoofed IP addresses. | |||
| messages. | See Section 4.2 for details how the cookie mechanism is used. | |||
| Note, however, that this mechanism does not provide any defense | ||||
| In order to counter these attacks, DTLS borrows the stateless | against denial of service attacks mounted from valid IP | |||
| cookie technique used by Photuris [RFC2522] and IKEv2 [RFC4306] | addresses. | |||
| and is described fully in section 4.2.1 of [RFC4347]. This | ||||
| mechanism, though, does not provide any defense against denial of | ||||
| service attacks mounted from valid IP addresses. DTLS Transport | ||||
| Model server implementations MUST support DTLS cookies. | ||||
| Implementations are not required to perform the stateless cookie | ||||
| exchange for every DTLS handshake, but in environments where an | ||||
| overload on server side resources is detectable by the | ||||
| implementation it is RECOMMENDED that the cookie exchange is | ||||
| utilized by the implementation. | ||||
| See Section 9 for more detail on the security considerations | See Section 9 for more detail on the security considerations | |||
| associated with the TLSTM and these security threats. | associated with the TLSTM and these security threats. | |||
| 3.1.2. Message Protection | 3.1.2. Message Protection | |||
| The RFC 3411 architecture recognizes three levels of security: | The RFC 3411 architecture recognizes three levels of security: | |||
| o without authentication and without privacy (noAuthNoPriv) | o without authentication and without privacy (noAuthNoPriv) | |||
| skipping to change at page 12, line 23 ¶ | skipping to change at page 12, line 50 ¶ | |||
| o with authentication and with privacy (authPriv) | o with authentication and with privacy (authPriv) | |||
| The TLS Transport Model determines from (D)TLS the identity of the | The TLS Transport Model determines from (D)TLS the identity of the | |||
| authenticated principal, the transport type and the transport address | authenticated principal, the transport type and the transport address | |||
| associated with an incoming message. The TLS Transport Model | associated with an incoming message. The TLS Transport Model | |||
| provides the identity and destination type and address to (D)TLS for | provides the identity and destination type and address to (D)TLS for | |||
| outgoing messages. | outgoing messages. | |||
| When an application requests a session for a message it also requests | When an application requests a session for a message it also requests | |||
| a security level for that session. The TLS Transport Model MUST | a security level for that session. The TLS Transport Model MUST | |||
| ensure that the (D)TLS session provides security at least as high as | ensure that the (D)TLS connection provides security at least as high | |||
| the requested level of security. How the security level is | as the requested level of security. How the security level is | |||
| translated into the algorithms used to provide data integrity and | translated into the algorithms used to provide data integrity and | |||
| privacy is implementation-dependent. However, the NULL integrity and | privacy is implementation-dependent. However, the NULL integrity and | |||
| encryption algorithms MUST NOT be used to fulfill security level | encryption algorithms MUST NOT be used to fulfill security level | |||
| requests for authentication or privacy. Implementations MAY choose | requests for authentication or privacy. Implementations MAY choose | |||
| to force (D)TLS to only allow cipher_suites that provide both | to force (D)TLS to only allow cipher_suites that provide both | |||
| authentication and privacy to guarantee this assertion. | authentication and privacy to guarantee this assertion. | |||
| If a suitable interface between the TLS Transport Model and the | If a suitable interface between the TLS Transport Model and the | |||
| (D)TLS Handshake Protocol is implemented to allow the selection of | (D)TLS Handshake Protocol is implemented to allow the selection of | |||
| security level dependent algorithms (for example a security level to | security level dependent algorithms (for example a security level to | |||
| skipping to change at page 12, line 46 ¶ | skipping to change at page 13, line 24 ¶ | |||
| utilized by the application. | utilized by the application. | |||
| The authentication, integrity and privacy algorithms used by the | The authentication, integrity and privacy algorithms used by the | |||
| (D)TLS Protocols may vary over time as the science of cryptography | (D)TLS Protocols may vary over time as the science of cryptography | |||
| continues to evolve and the development of (D)TLS continues over | continues to evolve and the development of (D)TLS continues over | |||
| time. Implementers are encouraged to plan for changes in operator | time. Implementers are encouraged to plan for changes in operator | |||
| trust of particular algorithms. Implementations should offer | trust of particular algorithms. Implementations should offer | |||
| configuration settings for mapping algorithms to SNMPv3 security | configuration settings for mapping algorithms to SNMPv3 security | |||
| levels. | levels. | |||
| 3.1.3. (D)TLS Sessions | 3.1.3. (D)TLS Connections | |||
| (D)TLS sessions are opened by the TLS Transport Model during the | (D)TLS connections are opened by the TLS Transport Model during the | |||
| elements of procedure for an outgoing SNMP message. Since the sender | elements of procedure for an outgoing SNMP message. Since the sender | |||
| of a message initiates the creation of a (D)TLS session if needed, | of a message initiates the creation of a (D)TLS connection if needed, | |||
| the (D)TLS session will already exist for an incoming message. | the (D)TLS connection will already exist for an incoming message. | |||
| Implementations MAY choose to instantiate (D)TLS sessions in | Implementations MAY choose to instantiate (D)TLS connections in | |||
| anticipation of outgoing messages. This approach might be useful to | anticipation of outgoing messages. This approach might be useful to | |||
| ensure that a (D)TLS session to a given target can be established | ensure that a (D)TLS connection to a given target can be established | |||
| before it becomes important to send a message over the (D)TLS | before it becomes important to send a message over the (D)TLS | |||
| session. Of course, there is no guarantee that a pre-established | connection. Of course, there is no guarantee that a pre-established | |||
| session will still be valid when needed. | session will still be valid when needed. | |||
| DTLS sessions, when used over UDP, are uniquely identified within the | DTLS connections, when used over UDP, are uniquely identified within | |||
| TLS Transport Model by the combination of transportDomain, | the TLS Transport Model by the combination of transportDomain, | |||
| transportAddress, tmSecurityName, and requestedSecurityLevel | transportAddress, tmSecurityName, and requestedSecurityLevel | |||
| associated with each session. Each unique combination of these | associated with each session. Each unique combination of these | |||
| parameters MUST have a locally-chosen unique tlstmSessionID for each | parameters MUST have a locally-chosen unique tlstmSessionID for each | |||
| active session. For further information see Section 5. TLS over TCP | active session. For further information see Section 5. TLS over TCP | |||
| and DTLS over SCTP sessions, on the other hand, do not require a | sessions, on the other hand, do not require a unique pairing of | |||
| unique pairing of address and port attributes since their lower layer | address and port attributes since their lower layer protocols (TCP) | |||
| protocols (TCP and SCTP) already provide adequate session framing. | already provide adequate session framing. But they must still | |||
| But they must still provide a unique tlstmSessionID for referencing | provide a unique tlstmSessionID for referencing the session. | |||
| the session. | ||||
| As an implementation hint: although the tlstmSessionID may be the | ||||
| same as the (D)TLS internal SessionID caution must be exercised since | ||||
| the (D)TLS internal SessionID may change over the life of the | ||||
| connection as seen by the TLSTM (for example during renegotiation). | ||||
| The tlstmSessionID identifier MUST NOT change during the entire | The tlstmSessionID identifier MUST NOT change during the entire | |||
| duration of the session from the TLSTM's perspective even if the TLS | duration of the session from the TLSTM's perspective, and MUST | |||
| internal session identifier does change. | uniquely identify a single session. As an implementation hint: note | |||
| that the (D)TLS internal SessionID does not meet these requirements, | ||||
| since it can change over the life of the connection as seen by the | ||||
| TLSTM (for example, during renegotiation), and does not necessarily | ||||
| uniquely idenfify a TLSTM session (there can be multiple TLSTM | ||||
| sessions sharing the same D(TLS) internal SessionID). | ||||
| 3.2. Security Parameter Passing | 3.2. Security Parameter Passing | |||
| For the (D)TLS server-side, (D)TLS-specific security parameters | For the (D)TLS server-side, (D)TLS-specific security parameters | |||
| (i.e., cipher_suites, X.509 certificate fields, IP address and port) | (i.e., cipher_suites, X.509 certificate fields, IP address and port) | |||
| are translated by the TLS Transport Model into security parameters | are translated by the TLS Transport Model into security parameters | |||
| for the TLS Transport Model and security model (e.g., | for the TLS Transport Model and security model (e.g., | |||
| tmSecurityLevel, tmSecurityName, transportDomain, transportAddress). | tmSecurityLevel, tmSecurityName, transportDomain, transportAddress). | |||
| The transport-related and (D)TLS-security-related information, | The transport-related and (D)TLS-security-related information, | |||
| including the authenticated identity, are stored in a cache | including the authenticated identity, are stored in a cache | |||
| skipping to change at page 14, line 7 ¶ | skipping to change at page 14, line 32 ¶ | |||
| provided by the Dispatcher in the sendMessage() Abstract Service | provided by the Dispatcher in the sendMessage() Abstract Service | |||
| Interface (ASI) and input from the tmStateReference cache. The | Interface (ASI) and input from the tmStateReference cache. The | |||
| (D)TLS Transport Model converts that information into suitable | (D)TLS Transport Model converts that information into suitable | |||
| security parameters for (D)TLS and establishes sessions as needed. | security parameters for (D)TLS and establishes sessions as needed. | |||
| The elements of procedure in Section 5 discuss these concepts in much | The elements of procedure in Section 5 discuss these concepts in much | |||
| greater detail. | greater detail. | |||
| 3.3. Notifications and Proxy | 3.3. Notifications and Proxy | |||
| (D)TLS sessions may be initiated by (D)TLS clients on behalf of SNMP | (D)TLS connections may be initiated by (D)TLS clients on behalf of | |||
| appplications that initiate communications, such as command | SNMP appplications that initiate communications, such as command | |||
| generators, notification originators, proxy forwarders. Command | generators, notification originators, proxy forwarders. Command | |||
| generators are frequently operated by a human, but notification | generators are frequently operated by a human, but notification | |||
| originators and proxy forwarders are usually unmanned automated | originators and proxy forwarders are usually unmanned automated | |||
| processes. The targets to whom notifications and proxied requests | processes. The targets to whom notifications and proxied requests | |||
| should be sent is typically determined and configured by a network | should be sent is typically determined and configured by a network | |||
| administrator. | administrator. | |||
| The SNMP-TARGET-MIB module [RFC3413] contains objects for defining | The SNMP-TARGET-MIB module [RFC3413] contains objects for defining | |||
| management targets, including transportDomain, transportAddress, | management targets, including transportDomain, transportAddress, | |||
| securityName, securityModel, and securityLevel parameters, for | securityName, securityModel, and securityLevel parameters, for | |||
| notification originator, proxy forwarder, and SNMP-controllable | notification originator, proxy forwarder, and SNMP-controllable | |||
| command generator applications. Transport domains and transport | command generator applications. Transport domains and transport | |||
| addresses are configured in the snmpTargetAddrTable, and the | addresses are configured in the snmpTargetAddrTable, and the | |||
| securityModel, securityName, and securityLevel parameters are | securityModel, securityName, and securityLevel parameters are | |||
| configured in the snmpTargetParamsTable. This document defines a MIB | configured in the snmpTargetParamsTable. This document defines a MIB | |||
| module that extends the SNMP-TARGET-MIB's snmpTargetParamsTable to | module that extends the SNMP-TARGET-MIB's snmpTargetParamsTable to | |||
| specify a (D)TLS client-side certificate to use for the connection. | specify a (D)TLS client-side certificate to use for the connection. | |||
| When configuring a (D)TLS target, the snmpTargetAddrTDomain and | When configuring a (D)TLS target, the snmpTargetAddrTDomain and | |||
| snmpTargetAddrTAddress parameters in snmpTargetAddrTable should be | snmpTargetAddrTAddress parameters in snmpTargetAddrTable should be | |||
| set to the snmpTLSTCPDomain, snmpDTLSUDPDomain, or snmpDTLSSCTPDomain | set to the snmpTLSTCPDomain or snmpDTLSUDPDomain object and an | |||
| object and an appropriate snmpTLSAddress value. When used with the | appropriate snmpTLSAddress value. When used with the SNMPv3 message | |||
| SNMPv3 message processing model, the snmpTargetParamsMPModel column | processing model, the snmpTargetParamsMPModel column of the | |||
| of the snmpTargetParamsTable should be set to a value of 3. The | snmpTargetParamsTable should be set to a value of 3. The | |||
| snmpTargetParamsSecurityName should be set to an appropriate | snmpTargetParamsSecurityName should be set to an appropriate | |||
| securityName value and the tlstmParamsClientFingerprint parameter of | securityName value and the tlstmParamsClientFingerprint parameter of | |||
| the tlstmParamsTable should be set a value that refers to a locally | the tlstmParamsTable should be set a value that refers to a locally | |||
| held certificate to be used. Other parameters, for example | held certificate (and the corresponding private key) to be used. | |||
| cryptographic configuration such as which cipher suites to use, must | Other parameters, for example cryptographic configuration such as | |||
| come from configuration mechanisms not defined in this document. | which cipher suites to use, must come from configuration mechanisms | |||
| not defined in this document. | ||||
| The securityName defined in the snmpTargetParamsSecurityName column | The securityName defined in the snmpTargetParamsSecurityName column | |||
| will be used by the access control model to authorize any | will be used by the access control model to authorize any | |||
| notifications that need to be sent. | notifications that need to be sent. | |||
| 4. Elements of the Model | 4. Elements of the Model | |||
| This section contains definitions required to realize the (D)TLS | This section contains definitions required to realize the (D)TLS | |||
| Transport Model defined by this document. | Transport Model defined by this document. | |||
| 4.1. X.509 Certificates | 4.1. X.509 Certificates | |||
| (D)TLS can make use of X.509 certificates for authentication of both | (D)TLS can make use of X.509 certificates for authentication of both | |||
| sides of the transport. This section discusses the use of X.509 | sides of the transport. This section discusses the use of X.509 | |||
| certificates in the TLSTM. A brief overview of X.509 certificate | certificates in the TLSTM. | |||
| infrastructure can be found in Appendix B. | ||||
| While (D)TLS supports multiple authentication mechanisms, this | While (D)TLS supports multiple authentication mechanisms, this | |||
| document only discusses X.509 certificate based authentication. | document only discusses X.509 certificate based authentication; Other | |||
| Although other forms of authentication are possible they are outside | forms of authentication are are outside the scope of this | |||
| the scope of this specification. TLSTM implementations are REQUIRED | specification. TLSTM implementations are REQUIRED to support X.509 | |||
| to support X.509 certificates. | certificates. | |||
| 4.1.1. Provisioning for the Certificate | 4.1.1. Provisioning for the Certificate | |||
| Authentication using (D)TLS will require that SNMP entities are | Authentication using (D)TLS will require that SNMP entities have | |||
| provisioned with certificates, which are signed by trusted | certificates, either signed by trusted certification authorities, or | |||
| certificate authorities (possibly the certificate itself). | self-signed. Furthermore, SNMP entities will most commonly need to | |||
| Furthermore, SNMP entities will most commonly need to be provisioned | be provisioned with root certificates which represent the list of | |||
| with root certificates which represent the list of trusted | trusted certificate authorities that an SNMP entity can use for | |||
| certificate authorities that an SNMP entity can use for certificate | certificate verification. SNMP entities SHOULD also be provisioned | |||
| verification. SNMP entities SHOULD also be provisioned with a X.509 | with a X.509 certificate revocation mechanism which can be used to | |||
| certificate revocation mechanism which can be used to verify that a | verify that a certificate has not been revoked. Trusted public keys | |||
| certificate has not been revoked. Trusted public keys from either CA | from either CA certificates and/or self-signed certificates, MUST be | |||
| certificates and/or self-signed certificates, MUST be installed into | installed into the server through a trusted out of band mechanism and | |||
| the server through a trusted out of band mechanism and their | their authenticity MUST be verified before access is granted. | |||
| authenticity MUST be verified before access is granted. | ||||
| Having received a certificate from a connecting TLSTM client, the | Having received a certificate from a connecting TLSTM client, the | |||
| authenticated tmSecurityName of the principal is derived using the | authenticated tmSecurityName of the principal is derived using the | |||
| tlstmCertToTSNTable. This table allows mapping of incoming | tlstmCertToTSNTable. This table allows mapping of incoming | |||
| connections to tmSecurityNames through defined transformations. The | connections to tmSecurityNames through defined transformations. The | |||
| transformations defined in the TLSTM-MIB include: | transformations defined in the TLSTM-MIB include: | |||
| o Mapping a certificate's subjectAltName or CommonName components to | o Mapping a certificate's subjectAltName or CommonName components to | |||
| a tmSecurityName, or | a tmSecurityName, or | |||
| skipping to change at page 16, line 9 ¶ | skipping to change at page 16, line 31 ¶ | |||
| computational resources associated with certificate verification. | computational resources associated with certificate verification. | |||
| Enterprise configurations are encouraged to map a "subjectAltName" | Enterprise configurations are encouraged to map a "subjectAltName" | |||
| component of the X.509 certificate to the TLSTM specific | component of the X.509 certificate to the TLSTM specific | |||
| tmSecurityName. The authenticated identity can be obtained by the | tmSecurityName. The authenticated identity can be obtained by the | |||
| TLS Transport Model by extracting the subjectAltName(s) from the | TLS Transport Model by extracting the subjectAltName(s) from the | |||
| peer's certificate. The receiving application will then have an | peer's certificate. The receiving application will then have an | |||
| appropriate tmSecurityName for use by other SNMPv3 components like an | appropriate tmSecurityName for use by other SNMPv3 components like an | |||
| access control model. | access control model. | |||
| An example of this type of mapping setup can be found in Appendix C. | An example of this type of mapping setup can be found in Appendix A. | |||
| This tmSecurityName may be later translated from a TLSTM specific | This tmSecurityName may be later translated from a TLSTM specific | |||
| tmSecurityName to a SNMP engine securityName by the security model. | tmSecurityName to a SNMP engine securityName by the security model. | |||
| A security model, like the TSM security model [RFC5591], may perform | A security model, like the TSM security model [RFC5591], may perform | |||
| an identity mapping or a more complex mapping to derive the | an identity mapping or a more complex mapping to derive the | |||
| securityName from the tmSecurityName offered by the TLS Transport | securityName from the tmSecurityName offered by the TLS Transport | |||
| Model. | Model. | |||
| A pictorial view of the complete transformation process (using the | A pictorial view of the complete transformation process (using the | |||
| TSM security model for the example) is shown below: | TSM security model for the example) is shown below: | |||
| +-------------+ +-------+ +-----+ | +-------------+ +-------+ +-----+ | |||
| | Certificate | | | | | | | Certificate | | | | | | |||
| | Path | | TLSTM | tmpSecurityName | TSM | | | Path | | TLSTM | tmSecurityName | TSM | | |||
| | Validation | --> | | ----------------->| | | | Validation | --> | | ----------------->| | | |||
| +-------------+ +-------+ +-----+ | +-------------+ +-------+ +-----+ | |||
| | | | | |||
| | securityName | | securityName | |||
| V | V | |||
| +-------------+ | +-------------+ | |||
| | application | | | application | | |||
| +-------------+ | +-------------+ | |||
| 4.2. Messages | 4.2. (D)TLS Usage | |||
| As stated in Section 4.1.1 of [RFC4347], each DTLS record must fit | (D)TLS MUST negotiate a cipher suite that uses X.509 certificates for | |||
| within a single DTLS datagram. The TLSTM SHOULD prohibit SNMP | authentication, and MUST authenticate both the client and the server. | |||
| messages from being sent that exceeds the maximum DTLS message size. | The mandatory-to-implement cipher suite is specified in the TLS | |||
| The TLSTM implementation SHOULD return an error when the DTLS message | specification [RFC5246]. | |||
| size would be exceeded and the message won't be sent. | ||||
| TLSTM verifies the certificates when the connection is opened (see | ||||
| Section 5.3). For this reason, TLS renegotiation with different | ||||
| certificates MUST NOT be done. That is, implementations MUST either | ||||
| disable renegotiation completely (RECOMMENDED), or MUST present the | ||||
| same certificate during renegotiation (and MUST verify that the other | ||||
| end presented the same certificate). | ||||
| For DTLS over UDP, each SNMP message MUST be placed in a single UDP | ||||
| datagram; it MAY be split to multiple DTLS records. In other words, | ||||
| if a single datagram contains multiple DTLS application_data records, | ||||
| they are concatenated when received. The TLSTM implementation SHOULD | ||||
| return an error if the SNMP message does not fit in the UDP datagram, | ||||
| and thus cannot be sent. | ||||
| For DTLS over UDP, the DTLS server implementation MUST support DTLS | ||||
| cookies ([RFC4347] already requires that clients support DTLS | ||||
| cookies). Implementations are not required to perform the cookie | ||||
| exchange for every DTLS handshake; however, enabling it by default is | ||||
| RECOMMENDED. | ||||
| For DTLS, replay protection MUST be used. | ||||
| 4.3. SNMP Services | 4.3. SNMP Services | |||
| This section describes the services provided by the TLS Transport | This section describes the services provided by the TLS Transport | |||
| Model with their inputs and outputs. The services are between the | Model with their inputs and outputs. The services are between the | |||
| Transport Model and the Dispatcher. | Transport Model and the Dispatcher. | |||
| The services are described as primitives of an abstract service | The services are described as primitives of an abstract service | |||
| interface (ASI) and the inputs and outputs are described as abstract | interface (ASI) and the inputs and outputs are described as abstract | |||
| data elements as they are passed in these abstract service | data elements as they are passed in these abstract service | |||
| skipping to change at page 17, line 29 ¶ | skipping to change at page 18, line 32 ¶ | |||
| The abstract data elements returned from or passed as parameters into | The abstract data elements returned from or passed as parameters into | |||
| the abstract service primitives are as follows: | the abstract service primitives are as follows: | |||
| statusInformation: An indication of whether the sending of the | statusInformation: An indication of whether the sending of the | |||
| message was successful. If not, it is an indication of the | message was successful. If not, it is an indication of the | |||
| problem. | problem. | |||
| destTransportDomain: The transport domain for the associated | destTransportDomain: The transport domain for the associated | |||
| destTransportAddress. The Transport Model uses this parameter to | destTransportAddress. The Transport Model uses this parameter to | |||
| determine the transport type of the associated | determine the transport type of the associated | |||
| destTransportAddress. This document specifies the snmpTLSDomain, | destTransportAddress. This document specifies the | |||
| the snmpDTLSUDPDomain and the snmpDTLSSCTPDomain transport | snmpTLSTCPDomain and the snmpDTLSUDPDomain transport domains. | |||
| domains. | ||||
| destTransportAddress: The transport address of the destination TLS | destTransportAddress: The transport address of the destination TLS | |||
| Transport Model in a format specified by the SnmpTLSAddress | Transport Model in a format specified by the SnmpTLSAddress | |||
| TEXTUAL-CONVENTION. | TEXTUAL-CONVENTION. | |||
| outgoingMessage: The outgoing message to send to (D)TLS for | outgoingMessage: The outgoing message to send to (D)TLS for | |||
| encapsulation and transmission. | encapsulation and transmission. | |||
| outgoingMessageLength: The length of the outgoingMessage field. | outgoingMessageLength: The length of the outgoingMessage field. | |||
| skipping to change at page 18, line 22 ¶ | skipping to change at page 19, line 22 ¶ | |||
| ) | ) | |||
| The abstract data elements returned from or passed as parameters into | The abstract data elements returned from or passed as parameters into | |||
| the abstract service primitives are as follows: | the abstract service primitives are as follows: | |||
| statusInformation: An indication of whether the passing of the | statusInformation: An indication of whether the passing of the | |||
| message was successful. If not, it is an indication of the | message was successful. If not, it is an indication of the | |||
| problem. | problem. | |||
| transportDomain: The transport domain for the associated | transportDomain: The transport domain for the associated | |||
| transportAddress. This document specifies the snmpTLSDomain, the | transportAddress. This document specifies the snmpTLSTCPDomain | |||
| snmpDTLSUDPDomain and the snmpDTLSSCTPDomain transport domains. | and the snmpDTLSUDPDomain transport domains. | |||
| transportAddress: The transport address of the source of the | transportAddress: The transport address of the source of the | |||
| received message in a format specified by the SnmpTLSAddress | received message in a format specified by the SnmpTLSAddress | |||
| TEXTUAL-CONVENTION. | TEXTUAL-CONVENTION. | |||
| incomingMessage: The whole SNMP message after being processed by | incomingMessage: The whole SNMP message after being processed by | |||
| (D)TLS and the (D)TLS transport layer data has been removed. | (D)TLS and the (D)TLS transport layer data has been removed. | |||
| incomingMessageLength: The length of the incomingMessage field. | incomingMessageLength: The length of the incomingMessage field. | |||
| skipping to change at page 19, line 11 ¶ | skipping to change at page 20, line 11 ¶ | |||
| cached information. See the Elements of Procedure in Section 5 for | cached information. See the Elements of Procedure in Section 5 for | |||
| detailed processing instructions on the use of the tmStateReference | detailed processing instructions on the use of the tmStateReference | |||
| fields by the TLS Transport Model. | fields by the TLS Transport Model. | |||
| 4.4.1.1. tmSecurityName | 4.4.1.1. tmSecurityName | |||
| The tmSecurityName MUST be a human-readable name (in snmpAdminString | The tmSecurityName MUST be a human-readable name (in snmpAdminString | |||
| format) representing the identity that has been set according to the | format) representing the identity that has been set according to the | |||
| procedures in Section 5. The tmSecurityName MUST be constant for all | procedures in Section 5. The tmSecurityName MUST be constant for all | |||
| traffic passing through an TLSTM session. Messages MUST NOT be sent | traffic passing through an TLSTM session. Messages MUST NOT be sent | |||
| through an existing (D)TLS session that was established using a | through an existing (D)TLS connection that was established using a | |||
| different tmSecurityName. | different tmSecurityName. | |||
| On the (D)TLS server side of a connection the tmSecurityName is | On the (D)TLS server side of a connection the tmSecurityName is | |||
| derived using the procedures described in Section 5.3.2 and the | derived using the procedures described in Section 5.3.2 and the | |||
| TLSTM-MIB's tlstmCertToTSNTable DESCRIPTION clause. | TLSTM-MIB's tlstmCertToTSNTable DESCRIPTION clause. | |||
| On the (D)TLS client side of a connection the tmSecurityName is | On the (D)TLS client side of a connection the tmSecurityName is | |||
| presented to the TLS Transport Model by the application (possibly | presented to the TLS Transport Model by the application (possibly | |||
| because of configuration specified in the SNMP-TARGET-MIB). | because of configuration specified in the SNMP-TARGET-MIB). | |||
| The securityName MAY be derived from the tmSecurityName by a Security | The securityName MAY be derived from the tmSecurityName by a Security | |||
| Model and MAY be used to configure notifications and access controls | Model and MAY be used to configure notifications and access controls | |||
| in MIB modules. Transport Models SHOULD generate a predictable | in MIB modules. Transport Models SHOULD generate a predictable | |||
| tmSecurityName so operators will know what to use when configuring | tmSecurityName so operators will know what to use when configuring | |||
| MIB modules that use securityNames derived from tmSecurityNames. | MIB modules that use securityNames derived from tmSecurityNames. The | |||
| TLSTM generates predictable tmSecurityNames based on the | ||||
| configuration found in the TLSTM-MIB's tlstmCertToTSNTable and relies | ||||
| on the network operators to have configured this table appropriately. | ||||
| 4.4.1.2. tmSessionID | 4.4.1.2. tmSessionID | |||
| The tmSessionID MUST be recorded per message at the time of receipt. | The tmSessionID MUST be recorded per message at the time of receipt. | |||
| When tmSameSecurity is set, the recorded tmSessionID can be used to | When tmSameSecurity is set, the recorded tmSessionID can be used to | |||
| determine whether the (D)TLS session available for sending a | determine whether the (D)TLS connection available for sending a | |||
| corresponding outgoing message is the same (D)TLS session as was used | corresponding outgoing message is the same (D)TLS connection as was | |||
| when receiving the incoming message (e.g., a response to a request). | used when receiving the incoming message (e.g., a response to a | |||
| request). | ||||
| 4.4.1.3. Session State | 4.4.1.3. Session State | |||
| The per-session state that is referenced by tmStateReference may be | The per-session state that is referenced by tmStateReference may be | |||
| saved across multiple messages in a Local Configuration Datastore. | saved across multiple messages in a Local Configuration Datastore. | |||
| Additional session/connection state information might also be stored | Additional session/connection state information might also be stored | |||
| in a Local Configuration Datastore. | in a Local Configuration Datastore. | |||
| 5. Elements of Procedure | 5. Elements of Procedure | |||
| skipping to change at page 20, line 27 ¶ | skipping to change at page 21, line 31 ¶ | |||
| contextEngine would be set to the local value of snmpEngineID and | contextEngine would be set to the local value of snmpEngineID and | |||
| contextName to the default context for error counters. | contextName to the default context for error counters. | |||
| 5.1. Procedures for an Incoming Message | 5.1. Procedures for an Incoming Message | |||
| This section describes the procedures followed by the (D)TLS | This section describes the procedures followed by the (D)TLS | |||
| Transport Model when it receives a (D)TLS protected packet. The | Transport Model when it receives a (D)TLS protected packet. The | |||
| required functionality is broken into two different sections. | required functionality is broken into two different sections. | |||
| Section 5.1.1 describes the processing required for de-multiplexing | Section 5.1.1 describes the processing required for de-multiplexing | |||
| multiple DTLS sessions, which is specifically needed for DTLS over | multiple DTLS connections, which is specifically needed for DTLS over | |||
| UDP sessions. It is assumed that TLS and DTLS/SCP protocol | UDP sessions. It is assumed that TLS protocol implementations | |||
| implementations already provide appropriate message demultiplexing. | already provide appropriate message demultiplexing. | |||
| Section 5.1.2describes the transport processing required once the | Section 5.1.2 describes the transport processing required once the | |||
| (D)TLS processing has been completed. This will be needed for all | (D)TLS processing has been completed. This will be needed for all | |||
| (D)TLS-based sessions. | (D)TLS-based connections. | |||
| 5.1.1. DTLS Processing for Incoming Messages | 5.1.1. DTLS over UDP Processing for Incoming Messages | |||
| DTLS over UDP is significantly different in terms of session handling | For connection-oriented transport protocols, such as TCP, the | |||
| than when TLS or DTLS is run over session based streaming protocols | transport protocol takes care of demultiplexing incoming packets to | |||
| like TCP or SCTP. Specifically, the DTLS protocol, when run over | the right connection. Depending on the DTLS implementation, for DTLS | |||
| UDP, does not have a session identifier that allows implementations | over UDP, this demultiplexing may need to be done by the TLSTM | |||
| to determine through which session a packet arrived. It is critical, | implementation. | |||
| however, that implementations are always able to derive a | ||||
| tlstmSessionID from any session demultiplexing process. When | Like TCP, DTLS over UDP uses the four-tuple <source IP, destination | |||
| establishing a new session implementations MUST use a different UDP | IP, source port, destination port> for identifying the connection | |||
| (and relevant DTLS connection state). This means that when | ||||
| establishing a new session, implementations MUST use a different UDP | ||||
| source port number for each active connection to a remote destination | source port number for each active connection to a remote destination | |||
| IP-address/port-number combination to ensure the remote entity can | IP-address/port-number combination to ensure the remote entity can | |||
| easily disambiguate between multiple sessions from a host to the same | disambiguate between multiple connections. | |||
| port on a server. | ||||
| A process for demultiplexing multiple DTLS sessions arriving over UDP | If demultiplexing received UDP datagrams to DTLS connection state is | |||
| must be incorporated into the procedures for processing an incoming | done by the TLSTM implementation (instead of the DTLS | |||
| message. The steps in this section describe one possible method to | implementation), the steps below describe one possible method to | |||
| accomplish this, although any implementation-dependent method should | accomplish this. | |||
| be suitable as long as the results are deterministic. The important | ||||
| output results from the steps in this process are the | ||||
| transportDomain, the transportAddress, the wholeMessage, the | ||||
| wholeMessageLength, and a unique implementation-dependent session | ||||
| identifier (tlstmSessionID). | ||||
| This demultiplexing procedure assumes that upon session establishment | The important output results from the steps in this process are the | |||
| an entry in a local transport mapping table is created in the | remote transport address, incomingMessage, incomingMessageLength, and | |||
| Transport Model's Local Configuration Datastore (LCD). The transport | the tlstmSessionID. | |||
| mapping table's entry should map a unique combination of the remote | ||||
| address, remote port number, local address and local port number to | ||||
| an implementation-dependent tlstmSessionID. | ||||
| 1) The TLS Transport Model examines the raw UDP message, in an | 1) The TLS Transport Model examines the raw UDP message, in an | |||
| implementation-dependent manner. | implementation-dependent manner. | |||
| 2) The TLS Transport Model queries the LCD using the transport | 2) The TLS Transport Model queries the LCD using the transport | |||
| parameters (source and destination addresses and ports) to | parameters (source and destination IP addresses and ports) to | |||
| determine if a session already exists. | determine if a session already exists. | |||
| If a matching entry in the LCD does not exist then the message is | 2a) f a matching entry in the LCD does not exist, then the UDP | |||
| passed to DTLS for processing without a corresponding | packet is passed to the DTLS implementation for processing. | |||
| tlstmSessionID. The incoming packet may result in a new session | If the DTLS implementation decides to continue with the | |||
| being established if the receiving entity is acting as a DTLS | connection and allocate state for it, it returns a new DTLS | |||
| server. If DTLS returns success then stop processing of this | connection handle (an implementation dependent detail). In | |||
| message. If DTLS returns an error then increment the | this case, TLSTM selects a new tlstmSessionId, and caches | |||
| snmpTlstmSessionNoSessions counter and stop processing the | this and the DTLS connection handle as a new entry in the | |||
| message. | LCD (indexed by the transport parameters). If the DTLS | |||
| implementation returns an error or does not allocate | ||||
| Note that an entry would already exist if the client and server's | connection state (which can happen with the stateless cookie | |||
| session establishment procedures had been successfully completed | exchange), processing stops. | |||
| previously (as described both above and in Section 5.3) even if | ||||
| no message had yet been sent through the newly established | ||||
| session. An entry may not exist, however, if a message not | ||||
| intended the SNMP entity was routed to it by mistake. An entry | ||||
| might also be missing because of a "broken" session (see | ||||
| operational considerations). | ||||
| 3) Retrieve the tlstmSessionID from the LCD. | ||||
| 4) The UDP packet and the tlstmSessionID are passed to DTLS for | 2b) If a session does exist in the LCD then its DTLS connection | |||
| integrity checking and decryption. If processing does not return | handle (an implementation dependent detail) and its | |||
| an incomingMessage and an incomingMessageLength then processing | tlstmSessionId is extracted from the LCD. The UDP packet | |||
| stops. | and the connection handle is passed to the DTLS | |||
| implementation. If the DTLS implementation returns success | ||||
| but does not return an incomingMessage and an | ||||
| incomingMessageLength then processing stops (this is the | ||||
| case when the UDP datagram contained DTLS handshake | ||||
| messages, for example). If the DTLS implementation returns | ||||
| an error then processing stops. | ||||
| 5) Retrieve the incomingMessage and an incomingMessageLength from | 3) Retrieve the incomingMessage and an incomingMessageLength from | |||
| DTLS. These results and the tlstmSessionID are used below in | DTLS. These results and the tlstmSessionID are used below in | |||
| Section 5.1.2 to complete the processing of the incoming message. | Section 5.1.2 to complete the processing of the incoming message. | |||
| 5.1.2. Transport Processing for Incoming SNMP Messages | 5.1.2. Transport Processing for Incoming SNMP Messages | |||
| The procedures in this section describe how the TLS Transport Model | The procedures in this section describe how the TLS Transport Model | |||
| should process messages that have already been properly extracted | should process messages that have already been properly extracted | |||
| from the (D)TLS stream. Note that care must be taken when processing | from the (D)TLS stream. Note that care must be taken when processing | |||
| messages originating from either TLS or DTLS to ensure they're | messages originating from either TLS or DTLS to ensure they're | |||
| complete and single. For example, multiple SNMP messages can be | complete and single. For example, multiple SNMP messages can be | |||
| skipping to change at page 22, line 47 ¶ | skipping to change at page 23, line 43 ¶ | |||
| on the server side of a connection because a client would have | on the server side of a connection because a client would have | |||
| already assigned a tlstmSessionID during the openSession() | already assigned a tlstmSessionID during the openSession() | |||
| invocation. Implementations may have performed the procedures | invocation. Implementations may have performed the procedures | |||
| described in Section 5.3.2 prior to this point or they may | described in Section 5.3.2 prior to this point or they may | |||
| perform them now, but the procedures described in Section 5.3.2 | perform them now, but the procedures described in Section 5.3.2 | |||
| MUST be performed before continuing beyond this point. | MUST be performed before continuing beyond this point. | |||
| 2) Create a tmStateReference cache for the subsequent reference and | 2) Create a tmStateReference cache for the subsequent reference and | |||
| assign the following values within it: | assign the following values within it: | |||
| tmTransportDomain = snmpTLSTCPDomain, snmpDTLSUDPDomain or | tmTransportDomain = snmpTLSTCPDomain or snmpDTLSUDPDomain as | |||
| snmpDTLSSCTPDomain as appropriate. | appropriate. | |||
| tmTransportAddress = The address the message originated from. | tmTransportAddress = The address the message originated from. | |||
| tmSecurityLevel = The derived tmSecurityLevel for the session, | tmSecurityLevel = The derived tmSecurityLevel for the session, | |||
| as discussed in Section 3.1.2 and Section 5.3. | as discussed in Section 3.1.2 and Section 5.3. | |||
| tmSecurityName = The derived tmSecurityName for the session as | tmSecurityName = The derived tmSecurityName for the session as | |||
| discussed in Section 5.3. This value MUST be constant during | discussed in Section 5.3. This value MUST be constant during | |||
| the lifetime of the (D)TLS session. | the lifetime of the session. | |||
| tmSessionID = The tlstmSessionID described in step 1 above. | tmSessionID = The tlstmSessionID described in step 1 above. | |||
| 3) The incomingMessage and incomingMessageLength are assigned values | 3) The incomingMessage and incomingMessageLength are assigned values | |||
| from the (D)TLS processing. | from the (D)TLS processing. | |||
| 4) The TLS Transport Model passes the transportDomain, | 4) The TLS Transport Model passes the transportDomain, | |||
| transportAddress, incomingMessage, and incomingMessageLength to | transportAddress, incomingMessage, and incomingMessageLength to | |||
| the Dispatcher using the receiveMessage ASI: | the Dispatcher using the receiveMessage ASI: | |||
| statusInformation = | statusInformation = | |||
| receiveMessage( | receiveMessage( | |||
| IN transportDomain -- snmpTLSTCPDomain, snmpDTLSUDPDomain, | IN transportDomain -- snmpTLSTCPDomain or snmpDTLSUDPDomain, | |||
| -- or snmpDTLSSCTPDomain | IN transportAddress -- address for the received message | |||
| IN transportAddress -- address for the received message | IN incomingMessage -- the whole SNMP message from (D)TLS | |||
| IN incomingMessage -- the whole SNMP message from (D)TLS | IN incomingMessageLength -- the length of the SNMP message | |||
| IN incomingMessageLength -- the length of the SNMP message | IN tmStateReference -- transport info | |||
| IN tmStateReference -- transport info | ) | |||
| ) | ||||
| 5.2. Procedures for an Outgoing SNMP Message | 5.2. Procedures for an Outgoing SNMP Message | |||
| The Dispatcher sends a message to the TLS Transport Model using the | The Dispatcher sends a message to the TLS Transport Model using the | |||
| following ASI: | following ASI: | |||
| statusInformation = | statusInformation = | |||
| sendMessage( | sendMessage( | |||
| IN destTransportDomain -- transport domain to be used | IN destTransportDomain -- transport domain to be used | |||
| IN destTransportAddress -- transport address to be used | IN destTransportAddress -- transport address to be used | |||
| skipping to change at page 25, line 12 ¶ | skipping to change at page 25, line 49 ¶ | |||
| return an error indication to the calling module and stop | return an error indication to the calling module and stop | |||
| processing of the message. | processing of the message. | |||
| 6) Using either the session indicated by the tmSessionID if there | 6) Using either the session indicated by the tmSessionID if there | |||
| was one or the session resulting from a previous step (4 or 5), | was one or the session resulting from a previous step (4 or 5), | |||
| pass the outgoingMessage to (D)TLS for encapsulation and | pass the outgoingMessage to (D)TLS for encapsulation and | |||
| transmission. | transmission. | |||
| 5.3. Establishing or Accepting a Session | 5.3. Establishing or Accepting a Session | |||
| Establishing a (D)TLS session as either a client or a server requires | Establishing a (D)TLS connection as either a client or a server | |||
| slightly different processing. The following two sections describe | requires slightly different processing. The following two sections | |||
| the necessary processing steps. | describe the necessary processing steps. | |||
| 5.3.1. Establishing a Session as a Client | 5.3.1. Establishing a Session as a Client | |||
| The TLS Transport Model provides the following primitive for use by a | The TLS Transport Model provides the following primitive for use by a | |||
| client to establish a new (D)TLS session: | client to establish a new (D)TLS connection: | |||
| statusInformation = -- errorIndication or success | statusInformation = -- errorIndication or success | |||
| openSession( | openSession( | |||
| IN tmStateReference -- transport information to be used | IN tmStateReference -- transport information to be used | |||
| OUT tmStateReference -- transport information to be used | OUT tmStateReference -- transport information to be used | |||
| IN maxMessageSize -- of the sending SNMP entity | IN maxMessageSize -- of the sending SNMP entity | |||
| ) | ) | |||
| The following describes the procedure to follow when establishing a | The following describes the procedure to follow when establishing a | |||
| SNMP over (D)TLS session between SNMP engines for exchanging SNMP | SNMP over (D)TLS connection between SNMP engines for exchanging SNMP | |||
| messages. This process is followed by any SNMP client's engine when | messages. This process is followed by any SNMP client's engine when | |||
| establishing a session for subsequent use. | establishing a session for subsequent use. | |||
| This MAY be done automatically for an SNMP application that initiates | This MAY be done automatically for an SNMP application that initiates | |||
| a transaction, such as a command generator, a notification | a transaction, such as a command generator, a notification | |||
| originator, or a proxy forwarder. | originator, or a proxy forwarder. | |||
| 1) The snmpTlstmSessionOpens counter is incremented. | 1) The snmpTlstmSessionOpens counter is incremented. | |||
| 2) The client selects the appropriate certificate and cipher_suites | 2) The client selects the appropriate certificate and cipher_suites | |||
| for the key agreement based on the tmSecurityName and the | for the key agreement based on the tmSecurityName and the | |||
| tmRequestedSecurityLevel for the session. For sessions being | tmRequestedSecurityLevel for the session. For sessions being | |||
| established as a result of a SNMP-TARGET-MIB based operation, the | established as a result of a SNMP-TARGET-MIB based operation, the | |||
| certificate will potentially have been identified via the | certificate will potentially have been identified via the | |||
| tlstmParamsTable mapping and the cipher_suites will have to be | tlstmParamsTable mapping and the cipher_suites will have to be | |||
| taken from system-wide or implementation-specific configuration. | taken from system-wide or implementation-specific configuration. | |||
| Otherwise, the certificate and appropriate cipher_suites will | If no row in the tlstmParamsTable exists then implementations MAY | |||
| need to be passed to the openSession() ASI as supplemental | choose to establish the connection using a default client | |||
| information or configured through an implementation-dependent | certificate available to the application. Otherwise, the | |||
| mechanism. It is also implementation-dependent and possibly | certificate and appropriate cipher_suites will need to be passed | |||
| policy-dependent how tmRequestedSecurityLevel will be used to | to the openSession() ASI as supplemental information or | |||
| influence the security capabilities provided by the (D)TLS | configured through an implementation-dependent mechanism. It is | |||
| session. However this is done, the security capabilities | also implementation-dependent and possibly policy-dependent how | |||
| provided by (D)TLS MUST be at least as high as the level of | tmRequestedSecurityLevel will be used to influence the security | |||
| security indicated by the tmRequestedSecurityLevel parameter. | capabilities provided by the (D)TLS connection. However this is | |||
| The actual security level of the session is reported in the | done, the security capabilities provided by (D)TLS MUST be at | |||
| tmStateReference cache as tmSecurityLevel. For (D)TLS to provide | least as high as the level of security indicated by the | |||
| strong authentication, each principal acting as a command | tmRequestedSecurityLevel parameter. The actual security level of | |||
| generator SHOULD have its own certificate. | the session is reported in the tmStateReference cache as | |||
| tmSecurityLevel. For (D)TLS to provide strong authentication, | ||||
| each principal acting as a command generator SHOULD have its own | ||||
| certificate. | ||||
| 3) Using the destTransportDomain and destTransportAddress values, | 3) Using the destTransportDomain and destTransportAddress values, | |||
| the client will initiate the (D)TLS handshake protocol to | the client will initiate the (D)TLS handshake protocol to | |||
| establish session keys for message integrity and encryption. | establish session keys for message integrity and encryption. | |||
| If the attempt to establish a session is unsuccessful, then | If the attempt to establish a session is unsuccessful, then | |||
| snmpTlstmSessionOpenErrors is incremented, an error indication is | snmpTlstmSessionOpenErrors is incremented, an error indication is | |||
| returned, and processing stops. If the session failed to open | returned, and processing stops. If the session failed to open | |||
| because the presented server certificate was unknown or invalid | because the presented server certificate was unknown or invalid | |||
| then the snmpTlstmSessionUnknownServerCertificate or | then the snmpTlstmSessionUnknownServerCertificate or | |||
| skipping to change at page 26, line 35 ¶ | skipping to change at page 27, line 28 ¶ | |||
| cryptographic validation failures and an unexpected presented | cryptographic validation failures and an unexpected presented | |||
| certificate identity. | certificate identity. | |||
| 4) The (D)TLS client MUST then verify that the (D)TLS server's | 4) The (D)TLS client MUST then verify that the (D)TLS server's | |||
| presented certificate is the expected certificate. The (D)TLS | presented certificate is the expected certificate. The (D)TLS | |||
| client MUST NOT transmit SNMP messages until the server | client MUST NOT transmit SNMP messages until the server | |||
| certificate has been authenticated and the client certificate has | certificate has been authenticated and the client certificate has | |||
| been transmitted. | been transmitted. | |||
| If the connection is being established from configuration based | If the connection is being established from configuration based | |||
| on SNMP-TARGET-MIB configuration then the procedures in the | on SNMP-TARGET-MIB configuration, then the tlstmAddrTable | |||
| tlstmAddrTable DESCRIPTION clause should be followed to determine | DESCRIPTION clause describes how the verification is done (using | |||
| if the presented identity matches the expectations of the | either a certificate fingerprint, or an identity authenticated | |||
| configuration. Validation procedures (like the path validation | via certification path validation). | |||
| procedures defined in [RFC5280] or through the use of | ||||
| fingerprints as defined by the tlstmAddrServerIdentity column) | ||||
| MUST be followed. If a server identity name has been configured | ||||
| in the tlstmAddrServerIdentity column then this reference | ||||
| identity must be compared against the presented identity (for | ||||
| example using procedures described in | ||||
| [I-D.saintandre-tls-server-id-check]). | ||||
| If the connection is being established for reasons other than | If the connection is being established for reasons other than | |||
| configuration found in the SNMP-TARGET-MIB then configuration and | configuration found in the SNMP-TARGET-MIB then configuration and | |||
| procedures outside the scope of this document should be followed. | procedures outside the scope of this document should be followed. | |||
| Configuration mechanisms SHOULD be similar in nature to those | ||||
| defined in the tlstmAddrTable to ensure consistency across | ||||
| management configuration systems. For example, a command-line | ||||
| tool for generating SNMP GETs might support specifying either the | ||||
| server's certificate fingerprint or the expected host name as a | ||||
| command line argument. | ||||
| 5) (D)TLS provides assurance that the authenticated identity has | 5) (D)TLS provides assurance that the authenticated identity has | |||
| been signed by a trusted configured certificate authority. If | been signed by a trusted configured certification authority. If | |||
| verification of the server's certificate fails in any way (for | verification of the server's certificate fails in any way (for | |||
| example because of failures in cryptographic verification or the | example because of failures in cryptographic verification or the | |||
| presented identity did not match the expected named entity) then | presented identity did not match the expected named entity) then | |||
| the session establishment MUST fail, the | the session establishment MUST fail, the | |||
| snmpTlstmSessionInvalidServerCertificates object is incremented. | snmpTlstmSessionInvalidServerCertificates object is incremented. | |||
| If the session can not be opened for any reason at all, including | If the session can not be opened for any reason at all, including | |||
| cryptographic verification failures, then the | cryptographic verification failures, then the | |||
| snmpTlstmSessionOpenErrors counter is incremented and processing | snmpTlstmSessionOpenErrors counter is incremented and processing | |||
| stops. | stops. | |||
| 6) The TLSTM-specific session identifier (tlstmSessionID) is set in | 6) The TLSTM-specific session identifier (tlstmSessionID) is set in | |||
| the tmSessionID of the tmStateReference passed to the TLS | the tmSessionID of the tmStateReference passed to the TLS | |||
| Transport Model to indicate that the session has been established | Transport Model to indicate that the session has been established | |||
| successfully and to point to a specific (D)TLS session for future | successfully and to point to a specific (D)TLS connection for | |||
| use. The tlstmSessionID is also stored in the LCD for later | future use. The tlstmSessionID is also stored in the LCD for | |||
| lookup during processing of incoming messages (Section 5.1.2). | later lookup during processing of incoming messages | |||
| (Section 5.1.2). | ||||
| 5.3.2. Accepting a Session as a Server | 5.3.2. Accepting a Session as a Server | |||
| A (D)TLS server should accept new session connections from any client | A (D)TLS server should accept new session connections from any client | |||
| that it is able to verify the client's credentials for. This is done | that it is able to verify the client's credentials for. This is done | |||
| by authenticating the client's presented certificate through a | by authenticating the client's presented certificate through a | |||
| certificate path validation process (e.g. [RFC5280]) or through | certificate path validation process (e.g. [RFC5280]) or through | |||
| certificate fingerprint verification using fingerprints configure in | certificate fingerprint verification using fingerprints configure in | |||
| the tlstmCertToTSNTable. Afterward the server will determine the | the tlstmCertToTSNTable. Afterward the server will determine the | |||
| identity of the remote entity using the following procedures. | identity of the remote entity using the following procedures. | |||
| The (D)TLS server identifies the authenticated identity from the | The (D)TLS server identifies the authenticated identity from the | |||
| (D)TLS client's principal certificate using configuration information | (D)TLS client's principal certificate using configuration information | |||
| from the tlstmCertToTSNTable mapping table. The (D)TLS server MUST | from the tlstmCertToTSNTable mapping table. The (D)TLS server MUST | |||
| request and expect a certificate from the client and MUST NOT accept | request and expect a certificate from the client and MUST NOT accept | |||
| SNMP messages over the (D)TLS session until the client has sent a | SNMP messages over the (D)TLS connection until the client has sent a | |||
| certificate and it has been authenticated. The resulting derived | certificate and it has been authenticated. The resulting derived | |||
| tmSecurityName is recorded in the tmStateReference cache as | tmSecurityName is recorded in the tmStateReference cache as | |||
| tmSecurityName. The details of the lookup process are fully | tmSecurityName. The details of the lookup process are fully | |||
| described in the DESCRIPTION clause of the tlstmCertToTSNTable MIB | described in the DESCRIPTION clause of the tlstmCertToTSNTable MIB | |||
| object. If any verification fails in any way (for example because of | object. If any verification fails in any way (for example because of | |||
| failures in cryptographic verification or because of the lack of an | failures in cryptographic verification or because of the lack of an | |||
| appropriate row in the tlstmCertToTSNTable) then the session | appropriate row in the tlstmCertToTSNTable) then the session | |||
| establishment MUST fail, the | establishment MUST fail, the | |||
| snmpTlstmSessionInvalidClientCertificates object is incremented. If | snmpTlstmSessionInvalidClientCertificates object is incremented. If | |||
| the session can not be opened for any reason at all, including | the session can not be opened for any reason at all, including | |||
| cryptographic verification failures, then the | cryptographic verification failures, then the | |||
| snmpTlstmSessionOpenErrors counter is incremented and processing | snmpTlstmSessionOpenErrors counter is incremented and processing | |||
| stops. | stops. | |||
| Servers that wish to support multiple principals at a particular port | Servers that wish to support multiple principals at a particular port | |||
| SHOULD make use of a (D)TLS extension that allows server-side | SHOULD make use of a (D)TLS extension that allows server-side | |||
| principal selection like the Server Name Indication extension defined | principal selection like the Server Name Indication extension defined | |||
| in Section 3.1 of [RFC4366]. Supporting this will allow, for | in Section 3.1 of [RFC4366]. Supporting this will allow, for | |||
| example, sending notifications to a specific principal at a given | example, sending notifications to a specific principal at a given TCP | |||
| TCP, UDP or SCTP port. | or UDP port. | |||
| 5.4. Closing a Session | 5.4. Closing a Session | |||
| The TLS Transport Model provides the following primitive to close a | The TLS Transport Model provides the following primitive to close a | |||
| session: | session: | |||
| statusInformation = | statusInformation = | |||
| closeSession( | closeSession( | |||
| IN tmSessionID -- session ID of the session to be closed | IN tmSessionID -- session ID of the session to be closed | |||
| ) | ) | |||
| skipping to change at page 28, line 34 ¶ | skipping to change at page 29, line 27 ¶ | |||
| engine closing the corresponding SNMP session. | engine closing the corresponding SNMP session. | |||
| 1) Increment either the snmpTlstmSessionClientCloses or the | 1) Increment either the snmpTlstmSessionClientCloses or the | |||
| snmpTlstmSessionServerCloses counter as appropriate. | snmpTlstmSessionServerCloses counter as appropriate. | |||
| 2) Look up the session using the tmSessionID. | 2) Look up the session using the tmSessionID. | |||
| 3) If there is no open session associated with the tmSessionID, then | 3) If there is no open session associated with the tmSessionID, then | |||
| closeSession processing is completed. | closeSession processing is completed. | |||
| 4) Have (D)TLS close the specified session. This SHOULD include | 4) Have (D)TLS close the specified connection. This SHOULD include | |||
| sending a close_notify TLS Alert to inform the other side that | sending a close_notify TLS Alert to inform the other side that | |||
| session cleanup may be performed. | session cleanup may be performed. | |||
| 6. MIB Module Overview | 6. MIB Module Overview | |||
| This MIB module provides management of the TLS Transport Model. It | This MIB module provides management of the TLS Transport Model. It | |||
| defines needed textual conventions, statistical counters, | defines needed textual conventions, statistical counters, | |||
| notifications and configuration infrastructure necessary for session | notifications and configuration infrastructure necessary for session | |||
| establishment. Example usage of the configuration tables can be | establishment. Example usage of the configuration tables can be | |||
| found in Appendix C. | found in Appendix A. | |||
| 6.1. Structure of the MIB Module | 6.1. Structure of the MIB Module | |||
| Objects in this MIB module are arranged into subtrees. Each subtree | Objects in this MIB module are arranged into subtrees. Each subtree | |||
| is organized as a set of related objects. The overall structure and | is organized as a set of related objects. The overall structure and | |||
| assignment of objects to their subtrees, and the intended purpose of | assignment of objects to their subtrees, and the intended purpose of | |||
| each subtree, is shown below. | each subtree, is shown below. | |||
| 6.2. Textual Conventions | 6.2. Textual Conventions | |||
| skipping to change at page 29, line 10 ¶ | skipping to change at page 30, line 4 ¶ | |||
| Objects in this MIB module are arranged into subtrees. Each subtree | Objects in this MIB module are arranged into subtrees. Each subtree | |||
| is organized as a set of related objects. The overall structure and | is organized as a set of related objects. The overall structure and | |||
| assignment of objects to their subtrees, and the intended purpose of | assignment of objects to their subtrees, and the intended purpose of | |||
| each subtree, is shown below. | each subtree, is shown below. | |||
| 6.2. Textual Conventions | 6.2. Textual Conventions | |||
| Generic and Common Textual Conventions used in this module can be | Generic and Common Textual Conventions used in this module can be | |||
| found summarized at http://www.ops.ietf.org/mib-common-tcs.html | found summarized at http://www.ops.ietf.org/mib-common-tcs.html | |||
| This module defines the following new Textual Conventions: | This module defines the following new Textual Conventions: | |||
| o A new TransportAddress format for describing (D)TLS connection | o A new TransportAddress format for describing (D)TLS connection | |||
| addressing requirements. | addressing requirements. | |||
| o A certificate fingerprint allowing MIB module objects to | o A certificate fingerprint allowing MIB module objects to | |||
| generically refer to a stored X.509 certificate using a | generically refer to a stored X.509 certificate using a | |||
| cryptographic hash as a reference pointer. | cryptographic hash as a reference pointer. | |||
| 6.3. Statistical Counters | 6.3. Statistical Counters | |||
| The TLSTM-MIB defines some counters that can provide network managers | The TLSTM-MIB defines some counters that can provide network | |||
| with information about (D)TLS session usage and potential errors that | management stations with information about session usage and | |||
| a MIB-instrumented device may be experiencing. | potential errors that a MIB-instrumented device may be experiencing. | |||
| 6.4. Configuration Tables | 6.4. Configuration Tables | |||
| The TLSTM-MIB defines configuration tables that a manager can use for | The TLSTM-MIB defines configuration tables that an administrator can | |||
| configuring a MIB-instrumented device for sending and receiving SNMP | use for configuring a MIB-instrumented device for sending and | |||
| messages over (D)TLS. In particular, there are MIB tables that | receiving SNMP messages over (D)TLS. In particular, there are MIB | |||
| extend the SNMP-TARGET-MIB for configuring (D)TLS certificate usage | tables that extend the SNMP-TARGET-MIB for configuring (D)TLS | |||
| and a MIB table for mapping incoming (D)TLS client certificates to | certificate usage and a MIB table for mapping incoming (D)TLS client | |||
| SNMPv3 securityNames. | certificates to SNMPv3 securityNames. | |||
| 6.4.1. Notifications | 6.4.1. Notifications | |||
| The TLSTM-MIB defines notifications to alert management stations when | The TLSTM-MIB defines notifications to alert management stations when | |||
| a (D)TLS connection fails because a server's presented certificate | a (D)TLS connection fails because a server's presented certificate | |||
| did not meet an expected value (tlstmServerCertificateUnknown) or | did not meet an expected value (tlstmServerCertificateUnknown) or | |||
| because cryptographic validation failed | because cryptographic validation failed | |||
| (tlstmServerInvalidCertificate). | (tlstmServerInvalidCertificate). | |||
| 6.5. Relationship to Other MIB Modules | 6.5. Relationship to Other MIB Modules | |||
| skipping to change at page 30, line 35 ¶ | skipping to change at page 31, line 28 ¶ | |||
| FROM SNMPv2-TC | FROM SNMPv2-TC | |||
| MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP | MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP | |||
| FROM SNMPv2-CONF | FROM SNMPv2-CONF | |||
| SnmpAdminString | SnmpAdminString | |||
| FROM SNMP-FRAMEWORK-MIB | FROM SNMP-FRAMEWORK-MIB | |||
| snmpTargetParamsName, snmpTargetAddrName | snmpTargetParamsName, snmpTargetAddrName | |||
| FROM SNMP-TARGET-MIB | FROM SNMP-TARGET-MIB | |||
| ; | ; | |||
| tlstmMIB MODULE-IDENTITY | tlstmMIB MODULE-IDENTITY | |||
| LAST-UPDATED "201002020000Z" | LAST-UPDATED "201003060000Z" | |||
| ORGANIZATION "ISMS Working Group" | ORGANIZATION "ISMS Working Group" | |||
| CONTACT-INFO "WG-EMail: isms@lists.ietf.org | CONTACT-INFO "WG-EMail: isms@lists.ietf.org | |||
| Subscribe: isms-request@lists.ietf.org | Subscribe: isms-request@lists.ietf.org | |||
| Chairs: | Chairs: | |||
| Juergen Schoenwaelder | Juergen Schoenwaelder | |||
| Jacobs University Bremen | Jacobs University Bremen | |||
| Campus Ring 1 | Campus Ring 1 | |||
| 28725 Bremen | 28725 Bremen | |||
| Germany | Germany | |||
| skipping to change at page 31, line 37 ¶ | skipping to change at page 32, line 30 ¶ | |||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | set forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
| This version of this MIB module is part of RFC XXXX; | This version of this MIB module is part of RFC XXXX; | |||
| see the RFC itself for full legal notices." | see the RFC itself for full legal notices." | |||
| -- NOTE to RFC editor: replace XXXX with actual RFC number | -- NOTE to RFC editor: replace XXXX with actual RFC number | |||
| -- for this document and remove this note | -- for this document and remove this note | |||
| REVISION "201002020000Z" | REVISION "201003060000Z" | |||
| DESCRIPTION "The initial version, published in RFC XXXX." | DESCRIPTION "The initial version, published in RFC XXXX." | |||
| -- NOTE to RFC editor: replace XXXX with actual RFC number | -- NOTE to RFC editor: replace XXXX with actual RFC number | |||
| -- for this document and remove this note | -- for this document and remove this note | |||
| ::= { snmpModules xxxx } | ::= { snmpModules xxxx } | |||
| -- RFC Ed.: replace xxxx with IANA-assigned number and | -- RFC Ed.: replace xxxx with IANA-assigned number and | |||
| -- remove this note | -- remove this note | |||
| -- ************************************************ | -- ************************************************ | |||
| -- subtrees of the TLSTM-MIB | -- subtrees of the TLSTM-MIB | |||
| skipping to change at page 32, line 13 ¶ | skipping to change at page 33, line 6 ¶ | |||
| tlstmObjects OBJECT IDENTIFIER ::= { tlstmMIB 2 } | tlstmObjects OBJECT IDENTIFIER ::= { tlstmMIB 2 } | |||
| tlstmConformance OBJECT IDENTIFIER ::= { tlstmMIB 3 } | tlstmConformance OBJECT IDENTIFIER ::= { tlstmMIB 3 } | |||
| -- ************************************************ | -- ************************************************ | |||
| -- tlstmObjects - Objects | -- tlstmObjects - Objects | |||
| -- ************************************************ | -- ************************************************ | |||
| snmpTLSTCPDomain OBJECT-IDENTITY | snmpTLSTCPDomain OBJECT-IDENTITY | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "The SNMP over TLS transport domain. The corresponding | "The SNMP over TLS transport domain. The corresponding | |||
| transport address is of type SnmpTLSAddress. | transport address is of type SnmpTLSAddress. | |||
| The securityName prefix to be associated with the | The securityName prefix to be associated with the | |||
| snmpTLSTCPDomain is 'tls'. This prefix may be used by | snmpTLSTCPDomain is 'tls'. This prefix may be used by | |||
| security models or other components to identify which secure | security models or other components to identify which secure | |||
| transport infrastructure authenticated a securityName." | transport infrastructure authenticated a securityName." | |||
| ::= { snmpDomains xx } | ::= { snmpDomains xx } | |||
| -- RFC Ed.: replace xx with IANA-assigned number and | -- RFC Ed.: replace xx with IANA-assigned number and | |||
| -- remove this note | -- remove this note | |||
| -- RFC Ed.: replace 'tls' with the actual IANA assigned prefix string | -- RFC Ed.: replace 'tls' with the actual IANA assigned prefix string | |||
| -- if 'tls' is not assigned to this document. | -- if 'tls' is not assigned to this document. | |||
| snmpDTLSUDPDomain OBJECT-IDENTITY | snmpDTLSUDPDomain OBJECT-IDENTITY | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "The SNMP over DTLS/UDP transport domain. The corresponding | "The SNMP over DTLS/UDP transport domain. The corresponding | |||
| transport address is of type SnmpTLSAddress. | transport address is of type SnmpTLSAddress. | |||
| The securityName prefix to be associated with the | The securityName prefix to be associated with the | |||
| snmpDTLSUDPDomain is 'dudp'. This prefix may be used by | snmpDTLSUDPDomain is 'dudp'. This prefix may be used by | |||
| security models or other components to identify which secure | security models or other components to identify which secure | |||
| transport infrastructure authenticated a securityName." | transport infrastructure authenticated a securityName." | |||
| ::= { snmpDomains yy } | ::= { snmpDomains yy } | |||
| -- RFC Ed.: replace yy with IANA-assigned number and | -- RFC Ed.: replace yy with IANA-assigned number and | |||
| -- remove this note | -- remove this note | |||
| -- RFC Ed.: replace 'dudp' with the actual IANA assigned prefix string | -- RFC Ed.: replace 'dudp' with the actual IANA assigned prefix string | |||
| -- if 'dudp' is not assigned to this document. | -- if 'dudp' is not assigned to this document. | |||
| snmpDTLSSCTPDomain OBJECT-IDENTITY | ||||
| STATUS current | ||||
| DESCRIPTION | ||||
| "The SNMP over DTLS/SCTP transport domain. The corresponding | ||||
| transport address is of type SnmpTLSAddress. | ||||
| The securityName prefix to be associated with the | ||||
| snmpDTLSSCTPDomain is 'dsct'. This prefix may be used by | ||||
| security models or other components to identify which secure | ||||
| transport infrastructure authenticated a securityName." | ||||
| ::= { snmpDomains zz } | ||||
| SnmpTLSAddress ::= TEXTUAL-CONVENTION | SnmpTLSAddress ::= TEXTUAL-CONVENTION | |||
| DISPLAY-HINT "1a" | DISPLAY-HINT "1a" | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "Represents a IPv4 address, an IPv6 address or an US-ASCII | "Represents a IPv4 address, an IPv6 address or an US-ASCII | |||
| encoded hostname and port number. | encoded hostname and port number. | |||
| An IPv4 address must be in dotted decimal format followed by a | An IPv4 address must be in dotted decimal format followed by a | |||
| colon ':' (US-ASCII character 0x3A) and a decimal port number | colon ':' (US-ASCII character 0x3A) and a decimal port number | |||
| in US-ASCII. | in US-ASCII. | |||
| skipping to change at page 33, line 46 ¶ | skipping to change at page 34, line 20 ¶ | |||
| A hostname is always in US-ASCII (as per RFC1033); | A hostname is always in US-ASCII (as per RFC1033); | |||
| internationalized hostnames are encoded in US-ASCII as | internationalized hostnames are encoded in US-ASCII as | |||
| specified in RFC 3490. The hostname is followed by a colon | specified in RFC 3490. The hostname is followed by a colon | |||
| ':' (US-ASCII character 0x3A) and a decimal port number in | ':' (US-ASCII character 0x3A) and a decimal port number in | |||
| US-ASCII. The name SHOULD be fully qualified whenever | US-ASCII. The name SHOULD be fully qualified whenever | |||
| possible. | possible. | |||
| Values of this textual convention may not be directly usable | Values of this textual convention may not be directly usable | |||
| as transport-layer addressing information, and may require | as transport-layer addressing information, and may require | |||
| run-time resolution. As such, applications that write them | run-time resolution. As such, applications that write them | |||
| must be prepared for handling errors if such values are not | must be prepared for handling errors if such values are not | |||
| supported, or cannot be resolved (if resolution occurs at the | supported, or cannot be resolved (if resolution occurs at the | |||
| time of the management operation). | time of the management operation). | |||
| The DESCRIPTION clause of TransportAddress objects that may | The DESCRIPTION clause of TransportAddress objects that may | |||
| have SnmpTLSAddress values must fully describe how (and | have SnmpTLSAddress values must fully describe how (and | |||
| when) such names are to be resolved to IP addresses and vice | when) such names are to be resolved to IP addresses and vice | |||
| versa. | versa. | |||
| This textual convention SHOULD NOT be used directly in object | This textual convention SHOULD NOT be used directly in object | |||
| definitions since it restricts addresses to a specific | definitions since it restricts addresses to a specific | |||
| format. However, if it is used, it MAY be used either on its | format. However, if it is used, it MAY be used either on its | |||
| own or in conjunction with TransportAddressType or | own or in conjunction with TransportAddressType or | |||
| TransportDomain as a pair. | TransportDomain as a pair. | |||
| When this textual convention is used as a syntax of an index | When this textual convention is used as a syntax of an index | |||
| object, there may be issues with the limit of 128 | object, there may be issues with the limit of 128 | |||
| sub-identifiers specified in SMIv2 (STD 58). It is RECOMMENDED | sub-identifiers specified in SMIv2 (STD 58). It is RECOMMENDED | |||
| that all MIB documents using this textual convention make | that all MIB documents using this textual convention make | |||
| explicit any limitations on index component lengths that | explicit any limitations on index component lengths that | |||
| management software must observe. This may be done either by | management software must observe. This may be done either by | |||
| including SIZE constraints on the index components or by | including SIZE constraints on the index components or by | |||
| specifying applicable constraints in the conceptual row | specifying applicable constraints in the conceptual row | |||
| DESCRIPTION clause or in the surrounding documentation." | DESCRIPTION clause or in the surrounding documentation." | |||
| REFERENCE | REFERENCE | |||
| "RFC 1033: DOMAIN ADMINISTRATORS OPERATIONS GUIDE | "RFC 1033: DOMAIN ADMINISTRATORS OPERATIONS GUIDE | |||
| RFC 3490: Internationalizing Domain Names in Applications | RFC 3490: Internationalizing Domain Names in Applications | |||
| RFC 3986: Uniform Resource Identifier (URI): Generic Syntax | RFC 3986: Uniform Resource Identifier (URI): Generic Syntax | |||
| skipping to change at page 35, line 37 ¶ | skipping to change at page 36, line 8 ¶ | |||
| passed unaltered but the host-part of the name must | passed unaltered but the host-part of the name must | |||
| be passed in lower case. | be passed in lower case. | |||
| Example rfc822Name Field: FooBar@Example.COM | Example rfc822Name Field: FooBar@Example.COM | |||
| is mapped to tmSecurityName: FooBar@example.com" | is mapped to tmSecurityName: FooBar@example.com" | |||
| ::= { tlstmCertToTSNMIdentities 2 } | ::= { tlstmCertToTSNMIdentities 2 } | |||
| tlstmCertSANDNSName OBJECT-IDENTITY | tlstmCertSANDNSName OBJECT-IDENTITY | |||
| STATUS current | STATUS current | |||
| DESCRIPTION "Maps a subjectAltName's dNSName to a | DESCRIPTION "Maps a subjectAltName's dNSName to a | |||
| tmSecurityName by directly passing the value without | tmSecurityName after first converting it to all | |||
| any transformations." | lower case." | |||
| ::= { tlstmCertToTSNMIdentities 3 } | ::= { tlstmCertToTSNMIdentities 3 } | |||
| tlstmCertSANIpAddress OBJECT-IDENTITY | tlstmCertSANIpAddress OBJECT-IDENTITY | |||
| STATUS current | STATUS current | |||
| DESCRIPTION "Maps a subjectAltName's iPAddress to a | DESCRIPTION "Maps a subjectAltName's iPAddress to a | |||
| tmSecurityName by transforming the binary encoded | tmSecurityName by transforming the binary encoded | |||
| address as follows: | address as follows: | |||
| 1) for IPv4 the value is converted into a decimal | 1) for IPv4 the value is converted into a decimal | |||
| dotted quad address (e.g. '192.0.2.1') | dotted quad address (e.g. '192.0.2.1') | |||
| 2) for IPv6 addresses the value is converted into a | 2) for IPv6 addresses the value is converted into a | |||
| 32-character hexadecimal string without any colon | 32-character all lowercase hexadecimal string | |||
| separators. | without any colon separators. | |||
| Note that the resulting length is the maximum | Note that the resulting length is the maximum | |||
| length supported by the View-Based Access Control | length supported by the View-Based Access Control | |||
| Model (VACM). Note that using both the Transport | Model (VACM). Note that using both the Transport | |||
| Security Model's support for transport prefixes | Security Model's support for transport prefixes | |||
| (see the SNMP-TSM-MIB's | (see the SNMP-TSM-MIB's | |||
| snmpTsmConfigurationUsePrefix object for details) | snmpTsmConfigurationUsePrefix object for details) | |||
| will result in securityName lengths that exceed | will result in securityName lengths that exceed | |||
| what VACM can handle." | what VACM can handle." | |||
| ::= { tlstmCertToTSNMIdentities 4 } | ::= { tlstmCertToTSNMIdentities 4 } | |||
| skipping to change at page 36, line 36 ¶ | skipping to change at page 37, line 7 ¶ | |||
| | iPAddress | tlstmCertSANIpAddress | | | iPAddress | tlstmCertSANIpAddress | | |||
| |------------+------------------------| | |------------+------------------------| | |||
| The first matching subjectAltName value found in the | The first matching subjectAltName value found in the | |||
| certificate of the above types MUST be used when | certificate of the above types MUST be used when | |||
| deriving the tmSecurityName." | deriving the tmSecurityName." | |||
| ::= { tlstmCertToTSNMIdentities 5 } | ::= { tlstmCertToTSNMIdentities 5 } | |||
| tlstmCertCommonName OBJECT-IDENTITY | tlstmCertCommonName OBJECT-IDENTITY | |||
| STATUS current | STATUS current | |||
| DESCRIPTION "Maps a certificate's CommonName to a | ||||
| tmSecurityName by directly passing the value without | DESCRIPTION "Maps a certificate's CommonName to a tmSecurityName | |||
| any transformations." | after converting it to a UTF-8 encoding." | |||
| ::= { tlstmCertToTSNMIdentities 6 } | ::= { tlstmCertToTSNMIdentities 6 } | |||
| -- The snmpTlstmSession Group | -- The snmpTlstmSession Group | |||
| snmpTlstmSession OBJECT IDENTIFIER ::= { tlstmObjects 1 } | snmpTlstmSession OBJECT IDENTIFIER ::= { tlstmObjects 1 } | |||
| snmpTlstmSessionOpens OBJECT-TYPE | snmpTlstmSessionOpens OBJECT-TYPE | |||
| SYNTAX Counter32 | SYNTAX Counter32 | |||
| MAX-ACCESS read-only | MAX-ACCESS read-only | |||
| STATUS current | STATUS current | |||
| skipping to change at page 37, line 31 ¶ | skipping to change at page 37, line 50 ¶ | |||
| DESCRIPTION | DESCRIPTION | |||
| "The number of times an openSession() request failed to open a | "The number of times an openSession() request failed to open a | |||
| session as a (D)TLS client, for any reason." | session as a (D)TLS client, for any reason." | |||
| ::= { snmpTlstmSession 3 } | ::= { snmpTlstmSession 3 } | |||
| snmpTlstmSessionAccepts OBJECT-TYPE | snmpTlstmSessionAccepts OBJECT-TYPE | |||
| SYNTAX Counter32 | SYNTAX Counter32 | |||
| MAX-ACCESS read-only | MAX-ACCESS read-only | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "The number of times a server has accepted a (D)TLS session and | "The number of times a (D)TLS server has accepted a new | |||
| at least one SNMP message has been accepted through it." | connection from a client and has received at least one SNMP | |||
| message through it." | ||||
| ::= { snmpTlstmSession 4 } | ::= { snmpTlstmSession 4 } | |||
| snmpTlstmSessionServerCloses OBJECT-TYPE | snmpTlstmSessionServerCloses OBJECT-TYPE | |||
| SYNTAX Counter32 | SYNTAX Counter32 | |||
| MAX-ACCESS read-only | MAX-ACCESS read-only | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "The number of times a closeSession() request has been | "The number of times a closeSession() request has been | |||
| executed as an (D)TLS server, regardless of whether it | executed as an (D)TLS server, regardless of whether it | |||
| succeeded or failed." | succeeded or failed." | |||
| skipping to change at page 38, line 30 ¶ | skipping to change at page 38, line 50 ¶ | |||
| SYNTAX Counter32 | SYNTAX Counter32 | |||
| MAX-ACCESS read-only | MAX-ACCESS read-only | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "The number of times an outgoing session was not established | "The number of times an outgoing session was not established | |||
| on an (D)TLS client because the server certificate presented | on an (D)TLS client because the server certificate presented | |||
| by a SNMP over (D)TLS server was invalid because no | by a SNMP over (D)TLS server was invalid because no | |||
| configured fingerprint or CA was acceptable to validate it. | configured fingerprint or CA was acceptable to validate it. | |||
| This may result because there was no entry in the | This may result because there was no entry in the | |||
| tlstmAddrTable or because no path could be found to a known | tlstmAddrTable or because no path could be found to a known | |||
| certificate authority." | certification authority." | |||
| ::= { snmpTlstmSession 8 } | ::= { snmpTlstmSession 8 } | |||
| snmpTlstmSessionInvalidServerCertificates OBJECT-TYPE | snmpTlstmSessionInvalidServerCertificates OBJECT-TYPE | |||
| SYNTAX Counter32 | SYNTAX Counter32 | |||
| MAX-ACCESS read-only | MAX-ACCESS read-only | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "The number of times an outgoing session was not established | "The number of times an outgoing session was not established | |||
| on an (D)TLS client because the server certificate presented | on an (D)TLS client because the server certificate presented | |||
| by an SNMP over (D)TLS server could not be validated even if | by an SNMP over (D)TLS server could not be validated even if | |||
| skipping to change at page 42, line 46 ¶ | skipping to change at page 43, line 17 ¶ | |||
| value in this column MUST be ignored for any mapping type that | value in this column MUST be ignored for any mapping type that | |||
| does not require data present in this column." | does not require data present in this column." | |||
| DEFVAL { "" } | DEFVAL { "" } | |||
| ::= { tlstmCertToTSNEntry 4 } | ::= { tlstmCertToTSNEntry 4 } | |||
| tlstmCertToTSNStorageType OBJECT-TYPE | tlstmCertToTSNStorageType OBJECT-TYPE | |||
| SYNTAX StorageType | SYNTAX StorageType | |||
| MAX-ACCESS read-create | MAX-ACCESS read-create | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "The storage type for this conceptual row. Conceptual rows | "The storage type for this conceptual row. Conceptual rows | |||
| having the value 'permanent' need not allow write-access to | having the value 'permanent' need not allow write-access to | |||
| any columnar objects in the row." | any columnar objects in the row." | |||
| DEFVAL { nonVolatile } | DEFVAL { nonVolatile } | |||
| ::= { tlstmCertToTSNEntry 5 } | ::= { tlstmCertToTSNEntry 5 } | |||
| tlstmCertToTSNRowStatus OBJECT-TYPE | tlstmCertToTSNRowStatus OBJECT-TYPE | |||
| SYNTAX RowStatus | SYNTAX RowStatus | |||
| MAX-ACCESS read-create | MAX-ACCESS read-create | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "The status of this conceptual row. This object may be used | "The status of this conceptual row. This object may be used | |||
| to create or remove rows from this table. | to create or remove rows from this table. | |||
| To create a row in this table, a manager must set this object | To create a row in this table, an administrator must set this | |||
| to either createAndGo(4) or createAndWait(5). | object to either createAndGo(4) or createAndWait(5). | |||
| Until instances of all corresponding columns are appropriately | Until instances of all corresponding columns are appropriately | |||
| configured, the value of the corresponding instance of the | configured, the value of the corresponding instance of the | |||
| tlstmParamsRowStatus column is 'notReady'. | tlstmParamsRowStatus column is 'notReady'. | |||
| In particular, a newly created row cannot be made active until | In particular, a newly created row cannot be made active until | |||
| the corresponding tlstmCertToTSNFingerprint, | the corresponding tlstmCertToTSNFingerprint, | |||
| tlstmCertToTSNMapType, and tlstmCertToTSNData columns have been | tlstmCertToTSNMapType, and tlstmCertToTSNData columns have been | |||
| set. | set. | |||
| skipping to change at page 44, line 4 ¶ | skipping to change at page 44, line 23 ¶ | |||
| ::= { tlstmCertificateMapping 4 } | ::= { tlstmCertificateMapping 4 } | |||
| tlstmParamsTableLastChanged OBJECT-TYPE | tlstmParamsTableLastChanged OBJECT-TYPE | |||
| SYNTAX TimeStamp | SYNTAX TimeStamp | |||
| MAX-ACCESS read-only | MAX-ACCESS read-only | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "The value of sysUpTime.0 when the tlstmParamsTable | "The value of sysUpTime.0 when the tlstmParamsTable | |||
| was last modified through any means, or 0 if it has not been | was last modified through any means, or 0 if it has not been | |||
| modified since the command responder was started." | modified since the command responder was started." | |||
| ::= { tlstmCertificateMapping 5 } | ::= { tlstmCertificateMapping 5 } | |||
| tlstmParamsTable OBJECT-TYPE | tlstmParamsTable OBJECT-TYPE | |||
| SYNTAX SEQUENCE OF TlstmParamsEntry | SYNTAX SEQUENCE OF TlstmParamsEntry | |||
| MAX-ACCESS not-accessible | MAX-ACCESS not-accessible | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "This table is used by a (D)TLS client when a (D)TLS session is | "This table is used by a (D)TLS client when a (D)TLS | |||
| being set up using an entry in the SNMP-TARGET-MIB. It | connection is being set up using an entry in the | |||
| extends the SNMP-TARGET-MIB's snmpTargetParamsTable with a | SNMP-TARGET-MIB. It extends the SNMP-TARGET-MIB's | |||
| fingerprint of a certificate to use when establishing such a | snmpTargetParamsTable with a fingerprint of a certificate to | |||
| (D)TLS connection." | use when establishing such a (D)TLS connection." | |||
| ::= { tlstmCertificateMapping 6 } | ::= { tlstmCertificateMapping 6 } | |||
| tlstmParamsEntry OBJECT-TYPE | tlstmParamsEntry OBJECT-TYPE | |||
| SYNTAX TlstmParamsEntry | SYNTAX TlstmParamsEntry | |||
| MAX-ACCESS not-accessible | MAX-ACCESS not-accessible | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "A conceptual row containing a fingerprint hash of a locally | "A conceptual row containing a fingerprint hash of a locally | |||
| held certificate for a given snmpTargetParamsEntry. The | held certificate for a given snmpTargetParamsEntry. The | |||
| values in this row should be ignored if the connection that | values in this row should be ignored if the connection that | |||
| skipping to change at page 44, line 49 ¶ | skipping to change at page 45, line 18 ¶ | |||
| tlstmParamsStorageType StorageType, | tlstmParamsStorageType StorageType, | |||
| tlstmParamsRowStatus RowStatus | tlstmParamsRowStatus RowStatus | |||
| } | } | |||
| tlstmParamsClientFingerprint OBJECT-TYPE | tlstmParamsClientFingerprint OBJECT-TYPE | |||
| SYNTAX Fingerprint | SYNTAX Fingerprint | |||
| MAX-ACCESS read-create | MAX-ACCESS read-create | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "A cryptographic hash of a X.509 certificate. This object | "A cryptographic hash of a X.509 certificate. This object | |||
| should store the hash of a locally held X.509 certificate that | should store the hash of a locally held X.509 certificate (and | |||
| should be used when initiating a (D)TLS connection as a (D)TLS | the corresponding private key) that should be used when | |||
| client." | initiating a (D)TLS connection as a (D)TLS client." | |||
| ::= { tlstmParamsEntry 1 } | ::= { tlstmParamsEntry 1 } | |||
| tlstmParamsStorageType OBJECT-TYPE | tlstmParamsStorageType OBJECT-TYPE | |||
| SYNTAX StorageType | SYNTAX StorageType | |||
| MAX-ACCESS read-create | MAX-ACCESS read-create | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "The storage type for this conceptual row. Conceptual rows | "The storage type for this conceptual row. Conceptual rows | |||
| having the value 'permanent' need not allow write-access to | having the value 'permanent' need not allow write-access to | |||
| any columnar objects in the row." | any columnar objects in the row." | |||
| skipping to change at page 45, line 24 ¶ | skipping to change at page 45, line 42 ¶ | |||
| ::= { tlstmParamsEntry 2 } | ::= { tlstmParamsEntry 2 } | |||
| tlstmParamsRowStatus OBJECT-TYPE | tlstmParamsRowStatus OBJECT-TYPE | |||
| SYNTAX RowStatus | SYNTAX RowStatus | |||
| MAX-ACCESS read-create | MAX-ACCESS read-create | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "The status of this conceptual row. This object may be used | "The status of this conceptual row. This object may be used | |||
| to create or remove rows from this table. | to create or remove rows from this table. | |||
| To create a row in this table, a manager must set this object | To create a row in this table, an administrator must set this | |||
| to either createAndGo(4) or createAndWait(5). | object to either createAndGo(4) or createAndWait(5). | |||
| Until instances of all corresponding columns are appropriately | Until instances of all corresponding columns are appropriately | |||
| configured, the value of the corresponding instance of the | configured, the value of the corresponding instance of the | |||
| tlstmParamsRowStatus column is 'notReady'. | tlstmParamsRowStatus column is 'notReady'. | |||
| In particular, a newly created row cannot be made active until | In particular, a newly created row cannot be made active until | |||
| the corresponding tlstmParamsClientFingerprint column has | the corresponding tlstmParamsClientFingerprint column has | |||
| been set. | been set. | |||
| The tlstmParamsClientFingerprint object may not be modified | The tlstmParamsClientFingerprint object may not be modified | |||
| skipping to change at page 46, line 18 ¶ | skipping to change at page 46, line 37 ¶ | |||
| "The value of sysUpTime.0 when the tlstmAddrTable | "The value of sysUpTime.0 when the tlstmAddrTable | |||
| was last modified through any means, or 0 if it has not been | was last modified through any means, or 0 if it has not been | |||
| modified since the command responder was started." | modified since the command responder was started." | |||
| ::= { tlstmCertificateMapping 8 } | ::= { tlstmCertificateMapping 8 } | |||
| tlstmAddrTable OBJECT-TYPE | tlstmAddrTable OBJECT-TYPE | |||
| SYNTAX SEQUENCE OF TlstmAddrEntry | SYNTAX SEQUENCE OF TlstmAddrEntry | |||
| MAX-ACCESS not-accessible | MAX-ACCESS not-accessible | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "This table is used by a (D)TLS client when a (D)TLS session | "This table is used by a (D)TLS client when a (D)TLS | |||
| is being set up using an entry in the SNMP-TARGET-MIB. It | connection is being set up using an entry in the | |||
| extends the SNMP-TARGET-MIB's snmpTargetAddrTable so that the | SNMP-TARGET-MIB. It extends the SNMP-TARGET-MIB's | |||
| client can validate the certificate that the server presents. | snmpTargetAddrTable so that the client can verify that the | |||
| correct server has been reached. This verification can use | ||||
| either a certificate fingerprint, or an identity | ||||
| authenticated via certification path validation. | ||||
| If there is a row in this table corresponding to the entry in | If there is an active row in this table corresponding to the | |||
| the SNMP-TARGET-MIB that was used to establish the session | entry in the SNMP-TARGET-MIB that was used to establish the | |||
| (and that row is active), then the fingerprint of the server's | connection, and the row's tlstmAddrServerFingerprint column | |||
| presented certificate is compared with the value of the | has non-empty value, then the server's presented certificate | |||
| tlstmAddrServerFingerprint column. If fingerprint does not | is compared with the tlstmAddrServerFingerprint value (and | |||
| match, then the connection MUST NOT be established. | the tlstmAddrServerIdentity column is ignored). If the | |||
| fingerprint matches, the verification has succeeded. If the | ||||
| fingerprint does not match then the connection MUST be | ||||
| closed. | ||||
| If the row exists with a zero-length | If the server's presented certificate has passed | |||
| tlstmAddrServerFingerprint value and the certificate can be | certification path validation [RFC5280] to a configured | |||
| validated through another certificate validation path (such as | trust anchor, and an active row exists with a zero-length | |||
| the path validation procedures defined in [RFC5280]) then the | tlstmAddrServerFingerprint value, then the | |||
| server's presented identity should be checked against the | tlstmAddrServerIdentity column contains the expected host | |||
| value of the tlstmAddrServerIdentity column. If the server's | name. This expected host name is then compared against the | |||
| identity does not match the reference identity found in the | server's certificate as follows: | |||
| tlstmAddrServerIdentity column then the connection MUST NOT be | ||||
| established. | ||||
| A tlstmAddrServerIdentity may contain a single ASCII '*' | - Implementations MUST support matching the expected host | |||
| character (ASCII code 0x2a) to match any server's identity if | name against a dNSName in the subjectAltName extension field | |||
| the tlstmAddrServerFingerprint column is not blank. A row | and SHOULD support checking the name against the common name | |||
| MUST NOT contain both a blank tlstmAddrServerFingerprint | portion of the subject distinguished name. | |||
| column and a '*' in the tlstmAddrServerIdentity column since | ||||
| this would insecurely accept any presented certificate. | ||||
| If there is no row in this table corresponding to an entry in | - The '*' (ASCII 0x2a) wildcard character is allowed in the | |||
| the SNMP-TARGET-MIB and another certificate validation path | dNSName of the subjectAltName extension (and in common name, | |||
| algorithm (such as the path validation procedures defined in | if used to store the host name), but only as the left-most | |||
| [RFC5280]) can be used, then the connection SHOULD still | (least significant) DNS label in that value. This wildcard | |||
| proceed." | matches any left-most DNS label in the server name. That | |||
| is, the subject *.example.com matches the server names | ||||
| a.example.com and b.example.com, but does not match | ||||
| example.com or a.b.example.com. Implementations MUST | ||||
| support wildcards in certificates as specified above, but | ||||
| MAY provide a configuration option to disable them. | ||||
| - If the locally configured name is an internationalized | ||||
| domain name, conforming implementations MUST convert it to | ||||
| the ASCII Compatible Encoding (ACE) format for performing | ||||
| comparisons, as specified in Section 7 of [RFC5280]. | ||||
| If the expected host name fails these conditions then the | ||||
| connection MUST be closed. | ||||
| If there is no row in this table corresponding to the entry | ||||
| in the SNMP-TARGET-MIB and the server can be authorized by | ||||
| another, implementation dependent means, then the connection | ||||
| MAY still proceed." | ||||
| ::= { tlstmCertificateMapping 9 } | ::= { tlstmCertificateMapping 9 } | |||
| tlstmAddrEntry OBJECT-TYPE | tlstmAddrEntry OBJECT-TYPE | |||
| SYNTAX TlstmAddrEntry | SYNTAX TlstmAddrEntry | |||
| MAX-ACCESS not-accessible | MAX-ACCESS not-accessible | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "A conceptual row containing a copy of a certificate's | "A conceptual row containing a copy of a certificate's | |||
| fingerprint for a given snmpTargetAddrEntry. The values in | fingerprint for a given snmpTargetAddrEntry. The values in | |||
| skipping to change at page 48, line 4 ¶ | skipping to change at page 48, line 44 ¶ | |||
| connection MUST NOT be established." | connection MUST NOT be established." | |||
| DEFVAL { "" } | DEFVAL { "" } | |||
| ::= { tlstmAddrEntry 1 } | ::= { tlstmAddrEntry 1 } | |||
| tlstmAddrServerIdentity OBJECT-TYPE | tlstmAddrServerIdentity OBJECT-TYPE | |||
| SYNTAX SnmpAdminString | SYNTAX SnmpAdminString | |||
| MAX-ACCESS read-create | MAX-ACCESS read-create | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "The reference identity to check against the identity | "The reference identity to check against the identity | |||
| presented by the remote system. A single ASCII '*' character | presented by the remote system." | |||
| (ASCII code 0x2a) may be used as a wildcard string and will | DEFVAL { "" } | |||
| match any presented server identity." | ||||
| REFERENCE "draft-saintandre-tls-server-id-check" | ||||
| DEFVAL { "*" } | ||||
| ::= { tlstmAddrEntry 2 } | ::= { tlstmAddrEntry 2 } | |||
| tlstmAddrStorageType OBJECT-TYPE | tlstmAddrStorageType OBJECT-TYPE | |||
| SYNTAX StorageType | SYNTAX StorageType | |||
| MAX-ACCESS read-create | MAX-ACCESS read-create | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "The storage type for this conceptual row. Conceptual rows | "The storage type for this conceptual row. Conceptual rows | |||
| having the value 'permanent' need not allow write-access to | having the value 'permanent' need not allow write-access to | |||
| any columnar objects in the row." | any columnar objects in the row." | |||
| DEFVAL { nonVolatile } | DEFVAL { nonVolatile } | |||
| ::= { tlstmAddrEntry 3 } | ::= { tlstmAddrEntry 3 } | |||
| tlstmAddrRowStatus OBJECT-TYPE | tlstmAddrRowStatus OBJECT-TYPE | |||
| SYNTAX RowStatus | SYNTAX RowStatus | |||
| MAX-ACCESS read-create | MAX-ACCESS read-create | |||
| STATUS current | STATUS current | |||
| DESCRIPTION | DESCRIPTION | |||
| "The status of this conceptual row. This object may be used | "The status of this conceptual row. This object may be used | |||
| to create or remove rows from this table. | to create or remove rows from this table. | |||
| To create a row in this table, a manager must | To create a row in this table, an administrator must set this | |||
| set this object to either createAndGo(4) or | object to either createAndGo(4) or createAndWait(5). | |||
| createAndWait(5). | ||||
| Until instances of all corresponding columns are | Until instances of all corresponding columns are | |||
| appropriately configured, the value of the | appropriately configured, the value of the | |||
| corresponding instance of the tlstmAddrRowStatus | corresponding instance of the tlstmAddrRowStatus | |||
| column is 'notReady'. | column is 'notReady'. | |||
| In particular, a newly created row cannot be made active until | In particular, a newly created row cannot be made active until | |||
| the corresponding tlstmAddrServerFingerprint column has been | the corresponding tlstmAddrServerFingerprint column has been | |||
| set. | set. | |||
| skipping to change at page 52, line 8 ¶ | skipping to change at page 52, line 46 ¶ | |||
| END | END | |||
| 8. Operational Considerations | 8. Operational Considerations | |||
| This section discusses various operational aspects of deploying | This section discusses various operational aspects of deploying | |||
| TLSTM. | TLSTM. | |||
| 8.1. Sessions | 8.1. Sessions | |||
| A session is discussed throughout this document as meaning a security | A session is discussed throughout this document as meaning a security | |||
| association between the (D)TLS client and the (D)TLS server. State | association between two TLSTM instances. State information for the | |||
| information for the sessions are maintained in each TLSTM | sessions are maintained in each TLSTM implementation and this | |||
| implementation and this information is created and destroyed as | information is created and destroyed as sessions are opened and | |||
| sessions are opened and closed. A "broken" session (one side up and | closed. A "broken" session (one side up and one side down) can | |||
| one side down) can result if one side of a session is brought down | result if one side of a session is brought down abruptly (i.e., | |||
| abruptly (i.e., reboot, power outage, etc.). Whenever possible, | reboot, power outage, etc.). Whenever possible, implementations | |||
| implementations SHOULD provide graceful session termination through | SHOULD provide graceful session termination through the use of | |||
| the use of disconnect messages. Implementations SHOULD also have a | disconnect messages. Implementations SHOULD also have a system in | |||
| system in place for detecting "broken" sessions through the use of | place for detecting "broken" sessions through the use of heartbeats | |||
| heartbeats [I-D.seggelmann-tls-dtls-heartbeat] or other detection | [I-D.seggelmann-tls-dtls-heartbeat] or other detection mechanisms. | |||
| mechanisms. | ||||
| Implementations SHOULD limit the lifetime of established sessions | Implementations SHOULD limit the lifetime of established sessions | |||
| depending on the algorithms used for generation of the master session | depending on the algorithms used for generation of the master session | |||
| secret, the privacy and integrity algorithms used to protect | secret, the privacy and integrity algorithms used to protect | |||
| messages, the environment of the session, the amount of data | messages, the environment of the session, the amount of data | |||
| transferred, and the sensitivity of the data. | transferred, and the sensitivity of the data. | |||
| 8.2. Notification Receiver Credential Selection | 8.2. Notification Receiver Credential Selection | |||
| When an SNMP engine needs to establish an outgoing session for | When an SNMP engine needs to establish an outgoing session for | |||
| skipping to change at page 53, line 22 ¶ | skipping to change at page 54, line 9 ¶ | |||
| generators to discover a suitable default contextEngineID. | generators to discover a suitable default contextEngineID. | |||
| Implementations should consider offering another engineID discovery | Implementations should consider offering another engineID discovery | |||
| mechanism to continue providing Command Generators with a suitable | mechanism to continue providing Command Generators with a suitable | |||
| contextEngineID mechanism. A recommended discovery solution is | contextEngineID mechanism. A recommended discovery solution is | |||
| documented in [RFC5343]. | documented in [RFC5343]. | |||
| 8.4. Transport Considerations | 8.4. Transport Considerations | |||
| This document defines how SNMP messages can be transmitted over the | This document defines how SNMP messages can be transmitted over the | |||
| TLS and DTLS based protocols. Each of these protocols are | TLS and DTLS based protocols. Each of these protocols are | |||
| additionally based on other transports (TCP, UDP and SCTP). These | additionally based on other transports (TCP and UDP). These three | |||
| three protocols also have operational considerations that must be | protocols also have operational considerations that must be taken | |||
| taken into consideration when selecting a (D)TLS based protocol to | into consideration when selecting a (D)TLS based protocol to use such | |||
| use such as its performance in degraded or limited networks. It is | as its performance in degraded or limited networks. It is beyond the | |||
| beyond the scope of this document to summarize the characteristics of | scope of this document to summarize the characteristics of these | |||
| these transport mechanisms. Please refer to the base protocol | transport mechanisms. Please refer to the base protocol documents | |||
| documents for details on messaging considerations with respect to MTU | for details on messaging considerations with respect to MTU size, | |||
| size, fragmentation, performance in lossy-networks, etc. | fragmentation, performance in lossy-networks, etc. | |||
| 9. Security Considerations | 9. Security Considerations | |||
| This document describes a transport model that permits SNMP to | This document describes a transport model that permits SNMP to | |||
| utilize (D)TLS security services. The security threats and how the | utilize (D)TLS security services. The security threats and how the | |||
| (D)TLS transport model mitigates these threats are covered in detail | (D)TLS transport model mitigates these threats are covered in detail | |||
| throughout this document. Security considerations for DTLS are | throughout this document. Security considerations for DTLS are | |||
| covered in [RFC4347] and security considerations for TLS are | covered in [RFC4347] and security considerations for TLS are | |||
| described in Section 11 and Appendices D, E, and F of TLS 1.2 | described in Section 11 and Appendices D, E, and F of TLS 1.2 | |||
| [RFC5246]. DTLS adds to the security considerations of TLS only | [RFC5246]. When run over UDP, DTLS is more vulnerable to denial of | |||
| because it is more vulnerable to denial of service attacks. A random | service attacks from spoofed IP addresses; see Section 4.2 for | |||
| cookie exchange was added to the handshake to prevent anonymous | details how the cookie exchange is used to address this issue. | |||
| denial of service attacks. RFC 4347 recommends that the cookie | ||||
| exchange is utilized for all handshakes. It is also RECOMMENDED by | ||||
| this specification that users enable this cookie exchange. | ||||
| 9.1. Certificates, Authentication, and Authorization | 9.1. Certificates, Authentication, and Authorization | |||
| Implementations are responsible for providing a security certificate | Implementations are responsible for providing a security certificate | |||
| installation and configuration mechanism. Implementations SHOULD | installation and configuration mechanism. Implementations SHOULD | |||
| support certificate revocation lists. | support certificate revocation lists. | |||
| (D)TLS provides for authentication of the identity of both the (D)TLS | (D)TLS provides for authentication of the identity of both the (D)TLS | |||
| server and the (D)TLS client. Access to MIB objects for the | server and the (D)TLS client. Access to MIB objects for the | |||
| authenticated principal MUST be enforced by an access control | authenticated principal MUST be enforced by an access control | |||
| skipping to change at page 54, line 19 ¶ | skipping to change at page 54, line 50 ¶ | |||
| Authentication of the command generator principal's identity is | Authentication of the command generator principal's identity is | |||
| important for use with the SNMP access control subsystem to ensure | important for use with the SNMP access control subsystem to ensure | |||
| that only authorized principals have access to potentially sensitive | that only authorized principals have access to potentially sensitive | |||
| data. The authenticated identity of the command generator | data. The authenticated identity of the command generator | |||
| principal's certificate is mapped to an SNMP model-independent | principal's certificate is mapped to an SNMP model-independent | |||
| securityName for use with SNMP access control. | securityName for use with SNMP access control. | |||
| The (D)TLS handshake only provides assurance that the certificate of | The (D)TLS handshake only provides assurance that the certificate of | |||
| the authenticated identity has been signed by an configured accepted | the authenticated identity has been signed by an configured accepted | |||
| Certificate Authority. (D)TLS has no way to further authorize or | certification authority. (D)TLS has no way to further authorize or | |||
| reject access based on the authenticated identity. An Access Control | reject access based on the authenticated identity. An Access Control | |||
| Model (such as the VACM) provides access control and authorization of | Model (such as the VACM) provides access control and authorization of | |||
| a command generator's requests to a command responder and a | a command generator's requests to a command responder and a | |||
| notification responder's authorization to receive Notifications from | notification responder's authorization to receive Notifications from | |||
| a notification originator. However to avoid man-in-the-middle | a notification originator. However to avoid man-in-the-middle | |||
| attacks both ends of the (D)TLS based connection MUST check the | attacks both ends of the (D)TLS based connection MUST check the | |||
| certificate presented by the other side against what was expected. | certificate presented by the other side against what was expected. | |||
| For example, command generators must check that the command responder | For example, command generators must check that the command responder | |||
| presented and authenticated itself with a X.509 certificate that was | presented and authenticated itself with a X.509 certificate that was | |||
| expected. Not doing so would allow an impostor, at a minimum, to | expected. Not doing so would allow an impostor, at a minimum, to | |||
| skipping to change at page 56, line 31 ¶ | skipping to change at page 57, line 17 ¶ | |||
| enable cryptographic security. It is then a customer/operator | enable cryptographic security. It is then a customer/operator | |||
| responsibility to ensure that the SNMP entity giving access to an | responsibility to ensure that the SNMP entity giving access to an | |||
| instance of this MIB module is properly configured to give access to | instance of this MIB module is properly configured to give access to | |||
| the objects only to those principals (users) that have legitimate | the objects only to those principals (users) that have legitimate | |||
| rights to indeed GET or SET (change/create/delete) them. | rights to indeed GET or SET (change/create/delete) them. | |||
| 10. IANA Considerations | 10. IANA Considerations | |||
| IANA is requested to assign: | IANA is requested to assign: | |||
| 1. a TCP port number above 1023 in the | 1. Two TCP/UDP port numbers from the "Registered Ports" range of the | |||
| http://www.iana.org/assignments/port-numbers registry which will | Port Numbers registry, with keywords "snmptls" and "snmptls- | |||
| be the default port for receipt of SNMP command messages over a | trap". These are the default ports for receipt of SNMP command | |||
| TLS Transport Model as defined in this document, | messages (snmptls) and SNMP notification messages (snmptls-trap) | |||
| over a TLS Transport Model as defined in this document. | ||||
| 2. a TCP port number above 1023 in the | ||||
| http://www.iana.org/assignments/port-numbers registry which will | ||||
| be the default port for receipt of SNMP notification messages | ||||
| over a TLS Transport Model as defined in this document, | ||||
| 3. a UDP port number above 1023 in the | ||||
| http://www.iana.org/assignments/port-numbers registry which will | ||||
| be the default port for receipt of SNMP command messages over a | ||||
| DTLS/UDP connection as defined in this document, | ||||
| 4. a UDP port number above 1023 in the | ||||
| http://www.iana.org/assignments/port-numbers registry which will | ||||
| be the default port for receipt of SNMP notification messages | ||||
| over a DTLS/UDP connection as defined in this document, | ||||
| 5. a SCTP port number above 1023 in the | ||||
| http://www.iana.org/assignments/port-numbers registry which will | ||||
| be the default port for receipt of SNMP command messages over a | ||||
| DTLS/SCTP connection as defined in this document, | ||||
| 6. a SCTP port number above 1023 in the | ||||
| http://www.iana.org/assignments/port-numbers registry which will | ||||
| be the default port for receipt of SNMP notification messages | ||||
| over a DTLS/SCTP connection as defined in this document, | ||||
| 7. an SMI number under snmpDomains for the snmpTLSTCPDomain object | ||||
| identifier, | ||||
| 8. an SMI number under snmpDomains for the snmpDTLSUDPDomain object | ||||
| identifier, | ||||
| 9. an SMI number under snmpDomains for the snmpDTLSSCTPDomain | ||||
| object identifier, | ||||
| 10. a SMI number under snmpModules, for the MIB module in this | ||||
| document, | ||||
| 11. "tls" as the corresponding prefix for the snmpTLSTCPDomain in | 2. an SMI number under snmpDomains for the snmpTLSTCPDomain object | |||
| the SNMP Transport Model registry, | identifier, | |||
| 12. "dudp" as the corresponding prefix for the snmpDTLSUDPDomain in | 3. an SMI number under snmpDomains for the snmpDTLSUDPDomain object | |||
| the SNMP Transport Model registry, | identifier, | |||
| 13. "dsct" as the corresponding prefix for the snmpDTLSSCTPDomain in | 4. a SMI number under snmpModules, for the MIB module in this | |||
| the SNMP Transport Model registry; | document, | |||
| If possible, IANA is requested to use matching port numbers for all | 5. "tls" as the corresponding prefix for the snmpTLSTCPDomain in the | |||
| assignments for SNMP Commands being sent over TLS, DTLS/UDP, DTLS/ | SNMP Transport Model registry, | |||
| SCTP. | ||||
| If possible, IANA is requested to use matching port numbers for all | 6. "dudp" as the corresponding prefix for the snmpDTLSUDPDomain in | |||
| assignments for SNMP Notifications being sent over TLS, DTLS/UDP, | the SNMP Transport Model registry, | |||
| DTLS/SCTP. | ||||
| Editor's note: this section should be replaced with appropriate | Editor's note: this section should be replaced with appropriate | |||
| descriptive assignment text after IANA assignments are made and prior | descriptive assignment text after IANA assignments are made and prior | |||
| to publication. | to publication. | |||
| 11. Acknowledgements | 11. Acknowledgements | |||
| This document closely follows and copies the Secure Shell Transport | This document closely follows and copies the Secure Shell Transport | |||
| Model for SNMP defined by David Harrington and Joseph Salowey in | Model for SNMP defined by David Harrington and Joseph Salowey in | |||
| [RFC5292]. | [RFC5292]. | |||
| This document was reviewed by the following people who helped provide | This document was reviewed by the following people who helped provide | |||
| useful comments (in alphabetical order): Andy Donati, Pasi Eronen, | useful comments (in alphabetical order): Andy Donati, Pasi Eronen, | |||
| David Harrington, Jeffrey Hutzelman, Alan Luchuk, Tom Petch, Randy | David Harrington, Jeffrey Hutzelman, Alan Luchuk, Tom Petch, Randy | |||
| Presuhn, Ray Purvis, Joseph Salowey, Jurgen Schonwalder, Dave Shield, | Presuhn, Ray Purvis, Joseph Salowey, Jurgen Schonwalder, Dave Shield, | |||
| Robert Story. | Robert Story. | |||
| This work was supported in part by the United States Department of | This work was supported in part by the United States Department of | |||
| Defense. Large portions of this document are based on work by | Defense. Large portions of this document are based on work by | |||
| skipping to change at page 59, line 40 ¶ | skipping to change at page 59, line 35 ¶ | |||
| [RFC5590] Harrington, D. and J. Schoenwaelder, "Transport Subsystem | [RFC5590] Harrington, D. and J. Schoenwaelder, "Transport Subsystem | |||
| for the Simple Network Management Protocol (SNMP)", | for the Simple Network Management Protocol (SNMP)", | |||
| RFC 5590, June 2009. | RFC 5590, June 2009. | |||
| [RFC5591] Harrington, D. and W. Hardaker, "Transport Security Model | [RFC5591] Harrington, D. and W. Hardaker, "Transport Security Model | |||
| for the Simple Network Management Protocol (SNMP)", | for the Simple Network Management Protocol (SNMP)", | |||
| RFC 5591, June 2009. | RFC 5591, June 2009. | |||
| 12.2. Informative References | 12.2. Informative References | |||
| [RFC2522] Karn, P. and W. Simpson, "Photuris: Session-Key Management | ||||
| Protocol", RFC 2522, March 1999. | ||||
| [RFC3410] Case, J., Mundy, R., Partain, D., and B. Stewart, | [RFC3410] Case, J., Mundy, R., Partain, D., and B. Stewart, | |||
| "Introduction and Applicability Statements for Internet- | "Introduction and Applicability Statements for Internet- | |||
| Standard Management Framework", RFC 3410, December 2002. | Standard Management Framework", RFC 3410, December 2002. | |||
| [RFC4306] Kaufman, C., "Internet Key Exchange (IKEv2) Protocol", | ||||
| RFC 4306, December 2005. | ||||
| [RFC4366] Blake-Wilson, S., Nystrom, M., Hopwood, D., Mikkelsen, J., | [RFC4366] Blake-Wilson, S., Nystrom, M., Hopwood, D., Mikkelsen, J., | |||
| and T. Wright, "Transport Layer Security (TLS) | and T. Wright, "Transport Layer Security (TLS) | |||
| Extensions", RFC 4366, April 2006. | Extensions", RFC 4366, April 2006. | |||
| [RFC5292] Chen, E. and S. Sangli, "Address-Prefix-Based Outbound | [RFC5292] Chen, E. and S. Sangli, "Address-Prefix-Based Outbound | |||
| Route Filter for BGP-4", RFC 5292, August 2008. | Route Filter for BGP-4", RFC 5292, August 2008. | |||
| [RFC5343] Schoenwaelder, J., "Simple Network Management Protocol | [RFC5343] Schoenwaelder, J., "Simple Network Management Protocol | |||
| (SNMP) Context EngineID Discovery", RFC 5343, | (SNMP) Context EngineID Discovery", RFC 5343, | |||
| September 2008. | September 2008. | |||
| [I-D.saintandre-tls-server-id-check] | ||||
| Saint-Andre, P., Zeilenga, K., Hodges, J., and B. Morgan, | ||||
| "Best Practices for Checking of Server Identities in the | ||||
| Context of Transport Layer Security (TLS)". | ||||
| [I-D.seggelmann-tls-dtls-heartbeat] | [I-D.seggelmann-tls-dtls-heartbeat] | |||
| Seggelmann, R., Tuexen, M., and M. Williams, "Transport | Seggelmann, R., Tuexen, M., and M. Williams, "Transport | |||
| Layer Security and Datagram Transport Layer Security | Layer Security and Datagram Transport Layer Security | |||
| Heartbeat Extension". | Heartbeat Extension". | |||
| [AES] National Institute of Standards, "Specification for the | Appendix A. Target and Notification Configuration Example | |||
| Advanced Encryption Standard (AES)". | ||||
| [DES] National Institute of Standards, "American National | ||||
| Standard for Information Systems-Data Link Encryption". | ||||
| [DSS] National Institute of Standards, "Digital Signature | ||||
| Standard". | ||||
| [RSA] Rivest, R., Shamir, A., and L. Adleman, "A Method for | ||||
| Obtaining Digital Signatures and Public-Key | ||||
| Cryptosystems". | ||||
| [X509] , ITU., "INFORMATION TECHNOLOGY OPEN SYSTEMS | ||||
| INTERCONNECTION THE DIRECTORY: PUBLIC-KEY AND ATTRIBUTE | ||||
| CERTIFICATE FRAMEWORKS". | ||||
| Appendix A. (D)TLS Overview | ||||
| The (D)TLS protocol is composed of two layers: the (D)TLS Record | ||||
| Protocol and the (D)TLS Handshake Protocol. The following | ||||
| subsections provide an overview of these two layers. Please refer to | ||||
| [RFC4347] for a complete description of the protocol. | ||||
| A.1. The (D)TLS Record Protocol | ||||
| At the lowest layer, layered on top of the transport control protocol | ||||
| or a datagram transport protocol (e.g. UDP or SCTP) is the (D)TLS | ||||
| Record Protocol. | ||||
| The (D)TLS Record Protocol provides security that has three basic | ||||
| properties: | ||||
| o The session can be confidential. Symmetric cryptography is used | ||||
| for data encryption (e.g., [AES], [DES] etc.). The keys for this | ||||
| symmetric encryption are generated uniquely for each session and | ||||
| are based on a secret negotiated by another protocol (such as the | ||||
| (D)TLS Handshake Protocol). The Record Protocol can also be used | ||||
| without encryption. | ||||
| o Messages can have data integrity. Message transport includes a | ||||
| message integrity check using a keyed MAC. Secure hash functions | ||||
| (e.g., SHA, MD5, etc.) are used for MAC computations. The Record | ||||
| Protocol can operate without a MAC, but is generally only used in | ||||
| this mode while another protocol is using the Record Protocol as a | ||||
| transport for negotiating security parameters. | ||||
| o Messages are protected against replay. (D)TLS uses explicit | ||||
| sequence numbers and integrity checks. DTLS uses a sliding window | ||||
| to protect against replay of messages within a session. | ||||
| (D)TLS also provides protection against replay of entire sessions. | ||||
| In a properly-implemented keying material exchange, both sides will | ||||
| generate new random numbers for each exchange. This results in | ||||
| different encryption and integrity keys for every session. | ||||
| A.2. The (D)TLS Handshake Protocol | ||||
| The (D)TLS Record Protocol is used for encapsulation of various | ||||
| higher-level protocols. One such encapsulated protocol, the (D)TLS | ||||
| Handshake Protocol, allows the server and client to authenticate each | ||||
| other and to negotiate an integrity algorithm, an encryption | ||||
| algorithm and cryptographic keys before the application protocol | ||||
| transmits or receives its first octet of data. Only the (D)TLS | ||||
| client can initiate the handshake protocol. The (D)TLS Handshake | ||||
| Protocol provides security that has four basic properties: | ||||
| o The peer's identity can be authenticated using asymmetric (public | ||||
| key) cryptography (e.g., RSA [RSA], DSS [DSS], etc.). This | ||||
| authentication can be made optional, but is generally required by | ||||
| at least one of the peers. | ||||
| (D)TLS supports three authentication modes: authentication of both | ||||
| the server and the client, server authentication with an | ||||
| unauthenticated client, and total anonymity. For authentication | ||||
| of both entities, each entity provides a valid certificate chain | ||||
| leading to an acceptable certificate authority. Each entity is | ||||
| responsible for verifying that the other's certificate is valid | ||||
| and has not expired or been revoked. See | ||||
| [I-D.saintandre-tls-server-id-check] for further details on | ||||
| standardized processing when checking server certificate | ||||
| identities. | ||||
| o The negotiation of a shared secret is secure: the negotiated | ||||
| secret is unavailable to eavesdroppers, and for any authenticated | ||||
| handshake the secret cannot be obtained, even by an attacker who | ||||
| can place himself in the middle of the session. | ||||
| o The negotiation is not vulnerable to malicious modification: it is | ||||
| infeasible for an attacker to modify negotiation communication | ||||
| without being detected by the parties to the communication. | ||||
| o DTLS uses a stateless cookie exchange to protect against anonymous | ||||
| denial of service attacks and has retransmission timers, sequence | ||||
| numbers, and counters to handle message loss, reordering, and | ||||
| fragmentation. | ||||
| Appendix B. PKIX Certificate Infrastructure | ||||
| Users of a public key from a PKIX / X.509 certificate can be be | ||||
| confident that the associated private key is owned by the correct | ||||
| remote subject (person or system) with which an encryption or digital | ||||
| signature mechanism will be used. This confidence is obtained | ||||
| through the use of public key certificates, which are data structures | ||||
| that bind public key values to subjects. The binding is asserted by | ||||
| having a trusted CA digitally sign each certificate. The CA may base | ||||
| this assertion upon technical means (i.e., proof of possession | ||||
| through a challenge-response protocol), presentation of the private | ||||
| key, or on an assertion by the subject. A certificate has a limited | ||||
| valid lifetime which is indicated in its signed contents. Because a | ||||
| certificate's signature and timeliness can be independently checked | ||||
| by a certificate-using client, certificates can be distributed via | ||||
| untrusted communications and server systems, and can be cached in | ||||
| unsecured storage in certificate-using systems. | ||||
| ITU-T X.509 (formerly CCITT X.509) or ISO/IEC/ITU 9594-8 [X509], | ||||
| which was first published in 1988 as part of the X.500 Directory | ||||
| recommendations, defines a standard certificate format which is a | ||||
| certificate which binds a subject (principal) to a public key value. | ||||
| This was later further expanded and documented in [RFC5280]. | ||||
| A X.509 certificate is a sequence of three required fields: | ||||
| tbsCertificate: The tbsCertificate field contains the names of the | ||||
| subject and issuer, a public key associated with the subject, a | ||||
| validity period, and other associated information. This field may | ||||
| also contain extension components. | ||||
| signatureAlgorithm: The signatureAlgorithm field contains the | ||||
| identifier for the cryptographic algorithm used by the certificate | ||||
| authority (CA) to sign this certificate. | ||||
| signatureValue: The signatureValue field contains a digital | ||||
| signature computed by the CA upon the ASN.1 DER encoded | ||||
| tbsCertificate field. The ASN.1 DER encoded tbsCertificate is | ||||
| used as the input to the signature function. This signature value | ||||
| is then ASN.1 DER encoded as a BIT STRING and included in the | ||||
| Certificate's signature field. By generating this signature, the | ||||
| CA certifies the validity of the information in the tbsCertificate | ||||
| field. In particular, the CA certifies the binding between the | ||||
| public key material and the subject of the certificate. | ||||
| The basic X.509 authentication procedure is as follows: A system is | ||||
| initialized with a number of root certificates that contain the | ||||
| public keys of a number of trusted CAs. When a system receives a | ||||
| X.509 certificate, signed by one of those CAs, the certificate has to | ||||
| be verified. It first checks the signatureValue field by using the | ||||
| public key of the corresponding trusted CA. Then it compares the | ||||
| digest of the received certificate with a digest of the | ||||
| tbsCertificate field. If they match, then the subject in the | ||||
| tbsCertificate field is authenticated. | ||||
| Appendix C. Target and Notification Configuration Example | ||||
| Configuring the SNMP-TARGET-MIB and NOTIFICATION-MIB along with | Configuring the SNMP-TARGET-MIB and NOTIFICATION-MIB along with | |||
| access control settings for the SNMP-VIEW-BASED-ACM-MIB can be a | access control settings for the SNMP-VIEW-BASED-ACM-MIB can be a | |||
| daunting task without an example to follow. The following section | daunting task without an example to follow. The following section | |||
| describes an example of what pieces must be in place to accomplish | describes an example of what pieces must be in place to accomplish | |||
| this configuration. | this configuration. | |||
| The isAccessAllowed() ASI requires configuration to exist in the | The isAccessAllowed() ASI requires configuration to exist in the | |||
| following SNMP-VIEW-BASED-ACM-MIB tables: | following SNMP-VIEW-BASED-ACM-MIB tables: | |||
| skipping to change at page 64, line 22 ¶ | skipping to change at page 60, line 42 ¶ | |||
| vacmSecurityToGroupStatus = 4 (createAndGo) | vacmSecurityToGroupStatus = 4 (createAndGo) | |||
| This example will assume that the "administrators" group has been | This example will assume that the "administrators" group has been | |||
| given proper permissions via rows in the vacmAccessTable and | given proper permissions via rows in the vacmAccessTable and | |||
| vacmViewTreeFamilyTable. | vacmViewTreeFamilyTable. | |||
| Depending on whether this VACM configuration is for a Command | Depending on whether this VACM configuration is for a Command | |||
| Responder or a command generator the security name "blueberry" will | Responder or a command generator the security name "blueberry" will | |||
| come from a few different locations. | come from a few different locations. | |||
| C.1. Configuring the Notification Originator | A.1. Configuring the Notification Originator | |||
| For notification originators performing authorization checks, the | For notification originators performing authorization checks, the | |||
| server's certificate must be verified against the expected | server's certificate must be verified against the expected | |||
| certificate before proceeding to send the notification. The expected | certificate before proceeding to send the notification. The expected | |||
| certificate from the server may be listed in the tlstmAddrTable or | certificate from the server may be listed in the tlstmAddrTable or | |||
| may be determined through other X.509 path validation mechanisms. | may be determined through other X.509 path validation mechanisms. | |||
| The securityName to use for VACM authorization checks is set by the | The securityName to use for VACM authorization checks is set by the | |||
| SNMP-TARGET-MIB's snmpTargetParamsSecurityName column. | SNMP-TARGET-MIB's snmpTargetParamsSecurityName column. | |||
| The certificate that the notification originator should present to | The certificate that the notification originator should present to | |||
| the server is taken from the tlstmParamsClientFingerprint column from | the server is taken from the tlstmParamsClientFingerprint column from | |||
| the appropriate entry in the tlstmParamsTable table. | the appropriate entry in the tlstmParamsTable table. (Or else a | |||
| default certificate may be used if available.) | ||||
| C.2. Configuring the Command Responder | To configure a notification originator to open a TLS over TCP | |||
| connection to a notification receiver it must be configured so the | ||||
| server's presented certificate can be verified against the expected | ||||
| certificate before proceeding to send the notification. This is done | ||||
| by configuring the tlstmAddrTable accordingly. For example, if the | ||||
| verification is done via certification path validation (to a trust | ||||
| anchor configured in implementation dependent manner), then the table | ||||
| entries could look like: | ||||
| snmpTargetAddrTable row: | ||||
| snmpTargetAddrName = "toNRAddr" | ||||
| snmpTargetAddrTDomain = snmpTLSTCPDomain | ||||
| snmpTargetAddrTAddress = "192.0.2.1:XXXTLSTCPTRAPPORT" | ||||
| snmpTargetAddrTimeout = 1500 | ||||
| snmpTargetAddrRetryCount = 3 | ||||
| snmpTargetAddrTagList = "toNRTag" | ||||
| snmpTargetAddrParams = "toNR" (MUST match below) | ||||
| snmpTargetAddrStorageType = 3 (nonVolatile) | ||||
| snmpTargetAddrColumnStatus = 4 (createAndGo) | ||||
| snmpTargetParamsTable row: | ||||
| snmpTargetParamsName = toNR | ||||
| snmpTargetParamsMPModel = SNMPv3 | ||||
| snmpTargetParamsSecurityModel = 4 (TransportSecurityModel) | ||||
| snmpTargetParamsSecurityName = "blueberry" | ||||
| snmpTargetParamsSecurityLevel = 3 (authPriv) | ||||
| snmpTargetParamsStorageType = 3 (nonVolatile) | ||||
| snmpTargetParamsRowStatus = 4 (createAndGo0 | ||||
| tlstmAddrTable row: | ||||
| snmpTargetAddrName = "toNRAddr" | ||||
| tlstmAddrServerFingerprint = "" | ||||
| tlstmAddrServerIdentity = "server.example.org" | ||||
| tlstmAddrStorageType = 3 (nonVolatile) | ||||
| tlstmAddrRowStatus = 4 (createAndGo) | ||||
| Editor's note: replace the string "XXXTLSTCPTRAPPORT" above with the | ||||
| appropriately assigned "snmptls-trap" port. | ||||
| A.2. Configuring the Command Responder | ||||
| For command responder applications, the vacmSecurityName "blueberry" | For command responder applications, the vacmSecurityName "blueberry" | |||
| value is a value that derived from an incoming (D)TLS session. The | value is a value that derived from an incoming (D)TLS connection. | |||
| mapping from a recevied (D)TLS client certificate to a tmSecurityName | The mapping from a recevied (D)TLS client certificate to a | |||
| is done with the tlstmCertToTSNTable. The certificates must be | tmSecurityName is done with the tlstmCertToTSNTable. The | |||
| loaded into the device so that a tlstmCertToTSNEntry may refer to it. | certificates must be loaded into the device so that a | |||
| As an example, consider the following entry which will provide a | tlstmCertToTSNEntry may refer to it. As an example, consider the | |||
| mapping from a client's public X.509's hash fingerprint directly to | following entry which will provide a mapping from a client's public | |||
| the "blueberry" tmSecurityName: | X.509's hash fingerprint directly to the "blueberry" tmSecurityName: | |||
| tlstmCertToTSNID = 1 (chosen by ordering preference) | tlstmCertToTSNID = 1 (chosen by ordering preference) | |||
| tlstmCertToTSNFingerprint = HASH (appropriate fingerprint) | tlstmCertToTSNFingerprint = HASH (appropriate fingerprint) | |||
| tlstmCertToTSNMapType = 1 (specified) | tlstmCertToTSNMapType = tlstmCertSpecified | |||
| tlstmCertToTSNSecurityName = "blueberry" | tlstmCertToTSNSecurityName = "blueberry" | |||
| tlstmCertToTSNStorageType = 3 (nonVolatile) | tlstmCertToTSNStorageType = 3 (nonVolatile) | |||
| tlstmCertToTSNRowStatus = 4 (createAndGo) | tlstmCertToTSNRowStatus = 4 (createAndGo) | |||
| The above is an example of how to map a particular certificate to a | The above is an example of how to map a particular certificate to a | |||
| particular tmSecurityName. It is recommended, however, that users | particular tmSecurityName. It is recommended, however, that users | |||
| make use of direct subjectAltName or CommonName mappings where | make use of direct subjectAltName or CommonName mappings where | |||
| possible as it provides a more scalable approach to certificate | possible as it provides a more scalable approach to certificate | |||
| management. This entry provides an example of using a subjectAltName | management. This entry provides an example of using a subjectAltName | |||
| mapping: | mapping: | |||
| tlstmCertToTSNID = 1 (chosen by ordering preference) | tlstmCertToTSNID = 1 (chosen by ordering preference) | |||
| tlstmCertToTSNFingerprint = HASH (appropriate fingerprint) | tlstmCertToTSNFingerprint = HASH (appropriate fingerprint) | |||
| tlstmCertToTSNMapType = 2 (bySubjectAltName) | tlstmCertToTSNMapType = tlstmCertSANAny | |||
| tlstmCertToTSNSANType = 1 (any) | tlstmCertToTSNData = "" (not used) | |||
| tlstmCertToTSNStorageType = 3 (nonVolatile) | tlstmCertToTSNStorageType = 3 (nonVolatile) | |||
| tlstmCertToTSNRowStatus = 4 (createAndGo) | tlstmCertToTSNRowStatus = 4 (createAndGo) | |||
| The above entry indicates the subjectAltName field for certificates | The above entry indicates the subjectAltName field for certificates | |||
| created by an issuing certificate with a corresponding fingerprint | created by an issuing certificate with a corresponding fingerprint | |||
| will be trusted to always produce common names that are directly one- | will be trusted to always produce common names that are directly one- | |||
| to-one mappable into tmSecurityNames. This type of configuration | to-one mappable into tmSecurityNames. This type of configuration | |||
| should only be used when the certificate authorities naming | should only be used when the certificate authorities naming | |||
| conventions are carefully controlled. | conventions are carefully controlled. | |||
| End of changes. 128 change blocks. | ||||
| 659 lines changed or deleted | 492 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/ | ||||