Movatterモバイル変換


[0]ホーム

URL:


[RFC Home] [TEXT|PDF|HTML] [Tracker] [IPR] [Errata] [Info page]

PROPOSED STANDARD
Updated by:8447Errata Exist
Internet Engineering Task Force (IETF)                         S. FriedlRequest for Comments: 7301                           Cisco Systems, Inc.Category: Standards Track                                       A. PopovISSN: 2070-1721                                          Microsoft Corp.                                                              A. Langley                                                             Google Inc.                                                              E. Stephan                                                                  Orange                                                               July 2014Transport Layer Security (TLS)Application-Layer Protocol Negotiation ExtensionAbstract   This document describes a Transport Layer Security (TLS) extension   for application-layer protocol negotiation within the TLS handshake.   For instances in which multiple application protocols are supported   on the same TCP or UDP port, this extension allows the application   layer to negotiate which protocol will be used within the TLS   connection.Status of This Memo   This is an Internet Standards Track document.   This document is a product of the Internet Engineering Task Force   (IETF).  It represents the consensus of the IETF community.  It has   received public review and has been approved for publication by the   Internet Engineering Steering Group (IESG).  Further information on   Internet Standards is available inSection 2 of RFC 5741.   Information about the current status of this document, any errata,   and how to provide feedback on it may be obtained athttp://www.rfc-editor.org/info/rfc7301.Friedl, et al.               Standards Track                    [Page 1]

RFC 7301         TLS App-Layer Protocol Negotiation Ext        July 2014Copyright Notice   Copyright (c) 2014 IETF Trust and the persons identified as the   document authors.  All rights reserved.   This document is subject toBCP 78 and the IETF Trust's Legal   Provisions Relating to IETF Documents   (http://trustee.ietf.org/license-info) in effect on the date of   publication of this document.  Please review these documents   carefully, as they describe your rights and restrictions with respect   to this document.  Code Components extracted from this document must   include Simplified BSD License text as described in Section 4.e of   the Trust Legal Provisions and are provided without warranty as   described in the Simplified BSD License.Table of Contents1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .22.  Requirements Language . . . . . . . . . . . . . . . . . . . .33.  Application-Layer Protocol Negotiation  . . . . . . . . . . .33.1.  The Application-Layer Protocol Negotiation Extension  . .33.2.  Protocol Selection  . . . . . . . . . . . . . . . . . . .54.  Design Considerations . . . . . . . . . . . . . . . . . . . .65.  Security Considerations . . . . . . . . . . . . . . . . . . .66.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .77.  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .88.  References  . . . . . . . . . . . . . . . . . . . . . . . . .88.1.  Normative References  . . . . . . . . . . . . . . . . . .88.2.  Informative References  . . . . . . . . . . . . . . . . .81.  Introduction   Increasingly, application-layer protocols are encapsulated in the TLS   protocol [RFC5246].  This encapsulation enables applications to use   the existing, secure communications links already present on port 443   across virtually the entire global IP infrastructure.   When multiple application protocols are supported on a single server-   side port number, such as port 443, the client and the server need to   negotiate an application protocol for use with each connection.  It   is desirable to accomplish this negotiation without adding network   round-trips between the client and the server, as each round-trip   will degrade an end-user's experience.  Further, it would be   advantageous to allow certificate selection based on the negotiated   application protocol.Friedl, et al.               Standards Track                    [Page 2]

RFC 7301         TLS App-Layer Protocol Negotiation Ext        July 2014   This document specifies a TLS extension that permits the application   layer to negotiate protocol selection within the TLS handshake.  This   work was requested by the HTTPbis WG to address the negotiation of   HTTP/2 ([HTTP2]) over TLS; however, ALPN facilitates negotiation of   arbitrary application-layer protocols.   With ALPN, the client sends the list of supported application   protocols as part of the TLS ClientHello message.  The server chooses   a protocol and sends the selected protocol as part of the TLS   ServerHello message.  The application protocol negotiation can thus   be accomplished within the TLS handshake, without adding network   round-trips, and allows the server to associate a different   certificate with each application protocol, if desired.2.  Requirements Language   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this   document are to be interpreted as described in [RFC2119].3.  Application-Layer Protocol Negotiation3.1.  The Application-Layer Protocol Negotiation Extension   A new extension type ("application_layer_protocol_negotiation(16)")   is defined and MAY be included by the client in its "ClientHello"   message.   enum {       application_layer_protocol_negotiation(16), (65535)   } ExtensionType;   The "extension_data" field of the   ("application_layer_protocol_negotiation(16)") extension SHALL   contain a "ProtocolNameList" value.   opaque ProtocolName<1..2^8-1>;   struct {       ProtocolName protocol_name_list<2..2^16-1>   } ProtocolNameList;   "ProtocolNameList" contains the list of protocols advertised by the   client, in descending order of preference.  Protocols are named by   IANA-registered, opaque, non-empty byte strings, as described further   inSection 6 ("IANA Considerations") of this document.  Empty strings   MUST NOT be included and byte strings MUST NOT be truncated.Friedl, et al.               Standards Track                    [Page 3]

RFC 7301         TLS App-Layer Protocol Negotiation Ext        July 2014   Servers that receive a ClientHello containing the   "application_layer_protocol_negotiation" extension MAY return a   suitable protocol selection response to the client.  The server will   ignore any protocol name that it does not recognize.  A new   ServerHello extension type   ("application_layer_protocol_negotiation(16)") MAY be returned to the   client within the extended ServerHello message.  The "extension_data"   field of the ("application_layer_protocol_negotiation(16)") extension   is structured the same as described above for the client   "extension_data", except that the "ProtocolNameList" MUST contain   exactly one "ProtocolName".   Therefore, a full handshake with the   "application_layer_protocol_negotiation" extension in the ClientHello   and ServerHello messages has the following flow (contrast withSection 7.3 of [RFC5246]):   Client                                              Server   ClientHello                     -------->       ServerHello     (ALPN extension &                               (ALPN extension &      list of protocols)                              selected protocol)                                                   Certificate*                                                   ServerKeyExchange*                                                   CertificateRequest*                                   <--------       ServerHelloDone   Certificate*   ClientKeyExchange   CertificateVerify*   [ChangeCipherSpec]   Finished                        -------->                                                   [ChangeCipherSpec]                                   <--------       Finished   Application Data                <------->       Application Data                                 Figure 1   * Indicates optional or situation-dependent messages that are not   always sent.Friedl, et al.               Standards Track                    [Page 4]

RFC 7301         TLS App-Layer Protocol Negotiation Ext        July 2014   An abbreviated handshake with the   "application_layer_protocol_negotiation" extension has the following   flow:   Client                                              Server   ClientHello                     -------->       ServerHello     (ALPN extension &                               (ALPN extension &      list of protocols)                              selected protocol)                                                   [ChangeCipherSpec]                                   <--------       Finished   [ChangeCipherSpec]   Finished                        -------->   Application Data                <------->       Application Data                                 Figure 2   Unlike many other TLS extensions, this extension does not establish   properties of the session, only of the connection.  When session   resumption or session tickets [RFC5077] are used, the previous   contents of this extension are irrelevant, and only the values in the   new handshake messages are considered.3.2.  Protocol Selection   It is expected that a server will have a list of protocols that it   supports, in preference order, and will only select a protocol if the   client supports it.  In that case, the server SHOULD select the most   highly preferred protocol that it supports and that is also   advertised by the client.  In the event that the server supports no   protocols that the client advertises, then the server SHALL respond   with a fatal "no_application_protocol" alert.   enum {       no_application_protocol(120),       (255)   } AlertDescription;   The protocol identified in the   "application_layer_protocol_negotiation" extension type in the   ServerHello SHALL be definitive for the connection, until   renegotiated.  The server SHALL NOT respond with a selected protocol   and subsequently use a different protocol for application data   exchange.Friedl, et al.               Standards Track                    [Page 5]

RFC 7301         TLS App-Layer Protocol Negotiation Ext        July 20144.  Design Considerations   The ALPN extension is intended to follow the typical design of TLS   protocol extensions.  Specifically, the negotiation is performed   entirely within the client/server hello exchange in accordance with   the established TLS architecture.  The   "application_layer_protocol_negotiation" ServerHello extension is   intended to be definitive for the connection (until the connection is   renegotiated) and is sent in plaintext to permit network elements to   provide differentiated service for the connection when the TCP or UDP   port number is not definitive for the application-layer protocol to   be used in the connection.  By placing ownership of protocol   selection on the server, ALPN facilitates scenarios in which   certificate selection or connection rerouting may be based on the   negotiated protocol.   Finally, by managing protocol selection in the clear as part of the   handshake, ALPN avoids introducing false confidence with respect to   the ability to hide the negotiated protocol in advance of   establishing the connection.  If hiding the protocol is required,   then renegotiation after connection establishment, which would   provide true TLS security guarantees, would be a preferred   methodology.5.  Security Considerations   The ALPN extension does not impact the security of TLS session   establishment or application data exchange.  ALPN serves to provide   an externally visible marker for the application-layer protocol   associated with the TLS connection.  Historically, the application-   layer protocol associated with a connection could be ascertained from   the TCP or UDP port number in use.   Implementers and document editors who intend to extend the protocol   identifier registry by adding new protocol identifiers should   consider that in TLS versions 1.2 and below the client sends these   identifiers in the clear.  They should also consider that, for at   least the next decade, it is expected that browsers would normally   use these earlier versions of TLS in the initial ClientHello.   Care must be taken when such identifiers may leak personally   identifiable information, or when such leakage may lead to profiling   or to leaking of sensitive information.  If any of these apply to   this new protocol identifier, the identifier SHOULD NOT be used in   TLS configurations where it would be visible in the clear, and   documents specifying such protocol identifiers SHOULD recommend   against such unsafe use.Friedl, et al.               Standards Track                    [Page 6]

RFC 7301         TLS App-Layer Protocol Negotiation Ext        July 20146.  IANA Considerations   The IANA has updated its "ExtensionType Values" registry to include   the following entry:      16 application_layer_protocol_negotiation   This document establishes a registry for protocol identifiers   entitled "Application-Layer Protocol Negotiation (ALPN) Protocol IDs"   under the existing "Transport Layer Security (TLS) Extensions"   heading.   Entries in this registry require the following fields:   o  Protocol: The name of the protocol.   o  Identification Sequence: The precise set of octet values that      identifies the protocol.  This could be the UTF-8 encoding      [RFC3629] of the protocol name.   o  Reference: A reference to a specification that defines the      protocol.   This registry operates under the "Expert Review" policy as defined in   [RFC5226].  The designated expert is advised to encourage the   inclusion of a reference to a permanent and readily available   specification that enables the creation of interoperable   implementations of the identified protocol.   The initial set of registrations for this registry is as follows:   Protocol:  HTTP/1.1   Identification Sequence:      0x68 0x74 0x74 0x70 0x2f 0x31 0x2e 0x31 ("http/1.1")   Reference:  [RFC7230]   Protocol:  SPDY/1   Identification Sequence:      0x73 0x70 0x64 0x79 0x2f 0x31 ("spdy/1")   Reference:http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft1   Protocol:  SPDY/2   Identification Sequence:      0x73 0x70 0x64 0x79 0x2f 0x32 ("spdy/2")   Reference:http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2Friedl, et al.               Standards Track                    [Page 7]

RFC 7301         TLS App-Layer Protocol Negotiation Ext        July 2014   Protocol:  SPDY/3   Identification Sequence:      0x73 0x70 0x64 0x79 0x2f 0x33 ("spdy/3")   Reference:http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft37.  Acknowledgements   This document benefitted specifically from the Next Protocol   Negotiation (NPN) extension document authored by Adam Langley and   from discussions with Tom Wesselman and Cullen Jennings, both of   Cisco.8.  References8.1.  Normative References   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate              Requirement Levels",BCP 14,RFC 2119, March 1997.   [RFC3629]  Yergeau, F., "UTF-8, a transformation format of ISO              10646", STD 63,RFC 3629, November 2003.   [RFC5226]  Narten, T. and H. Alvestrand, "Guidelines for Writing an              IANA Considerations Section in RFCs",BCP 26,RFC 5226,              May 2008.   [RFC5246]  Dierks, T. and E. Rescorla, "The Transport Layer Security              (TLS) Protocol Version 1.2",RFC 5246, August 2008.   [RFC7230]  Fielding, R. and J. Reschke, "Hypertext Transfer Protocol              (HTTP/1.1): Message Syntax and Routing",RFC 7230, June              2014.8.2.  Informative References   [HTTP2]    Belshe, M., Peon, R., and M. Thomson, "Hypertext Transfer              Protocol version 2", Work in Progress, June 2014.   [RFC5077]  Salowey, J., Zhou, H., Eronen, P., and H. Tschofenig,              "Transport Layer Security (TLS) Session Resumption without              Server-Side State",RFC 5077, January 2008.Friedl, et al.               Standards Track                    [Page 8]

RFC 7301         TLS App-Layer Protocol Negotiation Ext        July 2014Authors' Addresses   Stephan Friedl   Cisco Systems, Inc.   170 West Tasman Drive   San Jose, CA  95134   USA   Phone: (720)562-6785   EMail: sfriedl@cisco.com   Andrei Popov   Microsoft Corp.   One Microsoft Way   Redmond, WA  98052   USA   EMail: andreipo@microsoft.com   Adam Langley   Google Inc.   USA   EMail: agl@google.com   Emile Stephan   Orange   2 avenue Pierre Marzin   Lannion  F-22307   France   EMail: emile.stephan@orange.comFriedl, et al.               Standards Track                    [Page 9]

[8]ページ先頭

©2009-2025 Movatter.jp