| < draft-ietf-httpbis-http2-encryption-09.txt | draft-ietf-httpbis-http2-encryption-10.txt > | |||
|---|---|---|---|---|
| HTTP Working Group M. Nottingham | HTTP Working Group M. Nottingham | |||
| Internet-Draft | Internet-Draft | |||
| Intended status: Experimental M. Thomson | Intended status: Experimental M. Thomson | |||
| Expires: June 24, 2017 Mozilla | Expires: August 4, 2017 Mozilla | |||
| December 21, 2016 | January 31, 2017 | |||
| Opportunistic Security for HTTP | Opportunistic Security for HTTP | |||
| draft-ietf-httpbis-http2-encryption-09 | draft-ietf-httpbis-http2-encryption-10 | |||
| Abstract | Abstract | |||
| This document describes how "http" URIs can be accessed using | This document describes how "http" URIs can be accessed using | |||
| Transport Layer Security (TLS) to mitigate pervasive monitoring | Transport Layer Security (TLS) to mitigate pervasive monitoring | |||
| attacks. | attacks. | |||
| Note to Readers | Note to Readers | |||
| Discussion of this draft takes place on the HTTP working group | Discussion of this draft takes place on the HTTP working group | |||
| skipping to change at page 1, line 43 ¶ | skipping to change at page 1, line 43 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on June 24, 2017. | This Internet-Draft will expire on August 4, 2017. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2017 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| skipping to change at page 2, line 27 ¶ | skipping to change at page 2, line 27 ¶ | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 1.1. Goals and Non-Goals . . . . . . . . . . . . . . . . . . . 3 | 1.1. Goals and Non-Goals . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.2. Notational Conventions . . . . . . . . . . . . . . . . . 3 | 1.2. Notational Conventions . . . . . . . . . . . . . . . . . 3 | |||
| 2. Using HTTP URIs over TLS . . . . . . . . . . . . . . . . . . 3 | 2. Using HTTP URIs over TLS . . . . . . . . . . . . . . . . . . 3 | |||
| 2.1. Alternative Server Opt-In . . . . . . . . . . . . . . . . 4 | 2.1. Alternative Server Opt-In . . . . . . . . . . . . . . . . 4 | |||
| 2.2. Interaction with "https" URIs . . . . . . . . . . . . . . 5 | 2.2. Interaction with "https" URIs . . . . . . . . . . . . . . 5 | |||
| 2.3. The "http-opportunistic" well-known URI . . . . . . . . . 5 | 2.3. The "http-opportunistic" well-known URI . . . . . . . . . 5 | |||
| 3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6 | 3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4. Security Considerations . . . . . . . . . . . . . . . . . . . 6 | 4. Security Considerations . . . . . . . . . . . . . . . . . . . 6 | |||
| 4.1. Security Indicators . . . . . . . . . . . . . . . . . . . 6 | 4.1. Security Indicators . . . . . . . . . . . . . . . . . . . 6 | |||
| 4.2. Downgrade Attacks . . . . . . . . . . . . . . . . . . . . 6 | 4.2. Downgrade Attacks . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4.3. Privacy Considerations . . . . . . . . . . . . . . . . . 6 | 4.3. Privacy Considerations . . . . . . . . . . . . . . . . . 7 | |||
| 4.4. Confusion Regarding Request Scheme . . . . . . . . . . . 6 | 4.4. Confusion Regarding Request Scheme . . . . . . . . . . . 7 | |||
| 4.5. Server Controls . . . . . . . . . . . . . . . . . . . . . 7 | 4.5. Server Controls . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5. References . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 5. References . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 5.1. Normative References . . . . . . . . . . . . . . . . . . 7 | 5.1. Normative References . . . . . . . . . . . . . . . . . . 8 | |||
| 5.2. Informative References . . . . . . . . . . . . . . . . . 8 | 5.2. Informative References . . . . . . . . . . . . . . . . . 9 | |||
| Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 9 | Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 9 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 9 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 1. Introduction | 1. Introduction | |||
| This document describes a use of HTTP Alternative Services [RFC7838] | This document describes a use of HTTP Alternative Services [RFC7838] | |||
| to decouple the URI scheme from the use and configuration of | to decouple the URI scheme from the use and configuration of | |||
| underlying encryption, allowing a "http" URI [RFC7230] to be accessed | underlying encryption, allowing a "http" URI [RFC7230] to be accessed | |||
| using Transport Layer Security (TLS) [RFC5246] opportunistically. | using Transport Layer Security (TLS) [RFC5246] opportunistically. | |||
| skipping to change at page 4, line 15 ¶ | skipping to change at page 4, line 15 ¶ | |||
| A client can also explicitly probe for an alternative service | A client can also explicitly probe for an alternative service | |||
| advertisement by sending a request that bears little or no sensitive | advertisement by sending a request that bears little or no sensitive | |||
| information, such as one with the OPTIONS method. Likewise, clients | information, such as one with the OPTIONS method. Likewise, clients | |||
| with existing alternative services information could make such a | with existing alternative services information could make such a | |||
| request before they expire, in order minimize the delays that might | request before they expire, in order minimize the delays that might | |||
| be incurred. | be incurred. | |||
| Client certificates are not meaningful for URLs with the "http" | Client certificates are not meaningful for URLs with the "http" | |||
| scheme, and therefore clients creating new TLS connections to | scheme, and therefore clients creating new TLS connections to | |||
| alternative services for the purposes of this specification MUST NOT | alternative services for the purposes of this specification MUST NOT | |||
| present them. Connections that use client certificates for other | present them. A server that also provides "https" resources on the | |||
| reasons MAY be reused, though client certificates MUST NOT affect the | same port can request a certificate during the TLS handshake, but it | |||
| responses to requests for "http" resources. | MUST NOT abort the handshake if the client does not provide one. | |||
| 2.1. Alternative Server Opt-In | 2.1. Alternative Server Opt-In | |||
| It is possible that the server might become confused about whether | It is possible that the server might become confused about whether | |||
| requests' URLs have a "http" or "https" scheme, for various reasons; | requests' URLs have a "http" or "https" scheme, for various reasons; | |||
| see Section 4.4. To ensure that the alternative service has opted | see Section 4.4. To ensure that the alternative service has opted | |||
| into serving "http" URLs over TLS, clients are required to perform | into serving "http" URLs over TLS, clients are required to perform | |||
| additional checks before directing "http" requests to it. | additional checks before directing "http" requests to it. | |||
| Clients MUST NOT send "http" requests over a secured connection, | Clients MUST NOT send "http" requests over a secured connection, | |||
| unless the chosen alternative service presents a certificate that is | unless the chosen alternative service presents a certificate that is | |||
| valid for the origin - as per [RFC2818] (this also establishes | valid for the origin as defined in [RFC2818]. Using an authenticated | |||
| "reasonable assurances" for the purposes of {RFC7838}}) - and they | alternative service establishes "reasonable assurances" for the | |||
| have obtained a valid http-opportunistic response for an origin (as | purposes of {RFC7838}}. In addition to authenticating the server, | |||
| per Section 2.3). | the client MUST have obtained a valid http-opportunistic response for | |||
| an origin (as per Section 2.3) using the authenticated connection. | ||||
| An exception to the latter restriction is made for requests for the | ||||
| "http-opportunistic" well-known URI. | ||||
| For example, assuming the following request is made over a TLS | For example, assuming the following request is made over a TLS | |||
| connection that is successfully authenticated for those origins, the | connection that is successfully authenticated for those origins, the | |||
| following request/response pair would allow requests for the origins | following request/response pair would allow requests for the origins | |||
| "http://www.example.com" or "http://example.com" to be sent using a | "http://www.example.com" or "http://example.com" to be sent using a | |||
| secured connection: | secured connection: | |||
| HEADERS | HEADERS | |||
| + END_STREAM | + END_STREAM | |||
| + END_HEADERS | + END_HEADERS | |||
| skipping to change at page 5, line 20 ¶ | skipping to change at page 5, line 20 ¶ | |||
| :path = /.well-known/http-opportunistic | :path = /.well-known/http-opportunistic | |||
| host: example.com | host: example.com | |||
| HEADERS | HEADERS | |||
| :status = 200 | :status = 200 | |||
| content-type = application/json | content-type = application/json | |||
| DATA | DATA | |||
| + END_STREAM | + END_STREAM | |||
| [ "http://www.example.com", "http://example.com" ] | [ "http://www.example.com", "http://example.com" ] | |||
| Though this document describes multiple origins, this is only for | ||||
| operational convenience. Only a request made to an origin (over an | ||||
| authenticated connection) can be used to acquire this resource for | ||||
| that origin. Thus in the example, the request to | ||||
| "http://example.com" cannot be assumed to also provide an http- | ||||
| opportunistic response for "http://www.example.com". | ||||
| 2.2. Interaction with "https" URIs | 2.2. Interaction with "https" URIs | |||
| Clients MUST NOT send "http" requests and "https" requests on the | Clients MUST NOT send "http" requests and "https" requests on the | |||
| same connection. Similarly, clients MUST NOT send "http" requests | same connection. Similarly, clients MUST NOT send "http" requests | |||
| for multiple origins on the same connection. | for multiple origins on the same connection. | |||
| 2.3. The "http-opportunistic" well-known URI | 2.3. The "http-opportunistic" well-known URI | |||
| This specification defines the "http-opportunistic" well-known URI | This specification defines the "http-opportunistic" well-known URI | |||
| [RFC5785]. A client is said to have a valid http-opportunistic | [RFC5785]. A client is said to have a valid http-opportunistic | |||
| response for a given origin when: | response for a given origin when: | |||
| o The client has obtained a 200 (OK) response for the well-known URI | o The client has requested the well-known URI from the origin over | |||
| from the origin, and it is fresh [RFC7234] (potentially through | an authenticated connection and a 200 (OK) response was provided, | |||
| revalidation [RFC7232]), and | and | |||
| o That response is fresh [RFC7234] (potentially through revalidation | ||||
| [RFC7232]), and | ||||
| o That response has the media type "application/json", and | o That response has the media type "application/json", and | |||
| o That response's payload, when parsed as JSON [RFC7159], contains | o That response's payload, when parsed as JSON [RFC7159], contains | |||
| an array as the root, and | an array as the root, and | |||
| o The array contains a string that is a case-insensitive character- | o The array contains a string that is a case-insensitive character- | |||
| for-character match for the origin in question, serialised into | for-character match for the origin in question, serialised into | |||
| Unicode as per Section 6.1 of [RFC6454]. | Unicode as per Section 6.1 of [RFC6454]. | |||
| A client MAY treat an "http-opportunistic" resource as invalid if the | A client MAY treat an "http-opportunistic" resource as invalid if | |||
| contains values that are not strings. | values it contains are not strings. | |||
| This document does not define semantics for "http-opportunistic" | This document does not define semantics for "http-opportunistic" | |||
| resources on an "https" origin, nor does it define semantics if the | resources on an "https" origin, nor does it define semantics if the | |||
| resource includes "https" origins. | resource includes "https" origins. | |||
| Allowing clients to cache the http-opportunistic resource means that | ||||
| all alternative services need to be able to respond to requests for | ||||
| "http" resources. A client is permitted to use an alternative | ||||
| service without acquiring the http-opportunistic resource from that | ||||
| service. | ||||
| A client MUST NOT use any cached copies of an http-opportunistic | ||||
| resource that was acquired (or revalidated) over an unauthenticated | ||||
| connection. To avoid potential errors, a client can request or | ||||
| revalidate the http-opportunistic resource before using any | ||||
| connection to an alternative service. | ||||
| Clients that use cached http-opportunistic responses MUST ensure that | ||||
| their cache is cleared of any responses that were acquired over an | ||||
| unauthenticated connection. Revalidating an unauthenticated response | ||||
| using an authenticated connection does not ensure the integrity of | ||||
| the response. | ||||
| 3. IANA Considerations | 3. IANA Considerations | |||
| This specification registers a Well-Known URI [RFC5785]: | This specification registers a Well-Known URI [RFC5785]: | |||
| o URI Suffix: http-opportunistic | o URI Suffix: http-opportunistic | |||
| o Change Controller: IETF | o Change Controller: IETF | |||
| o Specification Document(s): Section 2.3 of [this specification] | o Specification Document(s): Section 2.3 of [this specification] | |||
| End of changes. 12 change blocks. | ||||
| 23 lines changed or deleted | 54 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/ | ||||