| < draft-ietf-tokbind-ttrp-04.txt | draft-ietf-tokbind-ttrp-05.txt > | |||
|---|---|---|---|---|
| Internet Engineering Task Force B. Campbell | Internet Engineering Task Force B. Campbell | |||
| Internet-Draft Ping Identity | Internet-Draft Ping Identity | |||
| Intended status: Standards Track June 6, 2018 | Intended status: Standards Track June 21, 2018 | |||
| Expires: December 8, 2018 | Expires: December 23, 2018 | |||
| HTTPS Token Binding with TLS Terminating Reverse Proxies | HTTPS Token Binding with TLS Terminating Reverse Proxies | |||
| draft-ietf-tokbind-ttrp-04 | draft-ietf-tokbind-ttrp-05 | |||
| Abstract | Abstract | |||
| This document defines HTTP header fields that enable a TLS | This document defines HTTP header fields that enable a TLS | |||
| terminating reverse proxy to convey information to a backend server | terminating reverse proxy to convey information to a backend server | |||
| about the validated Token Binding Message received from a client, | about the validated Token Binding Message received from a client, | |||
| which enables that backend server to bind, or verify the binding of, | which enables that backend server to bind, or verify the binding of, | |||
| cookies and other security tokens to the client's Token Binding key. | cookies and other security tokens to the client's Token Binding key. | |||
| This facilitates the reverse proxy and backend server functioning | This facilitates the reverse proxy and backend server functioning | |||
| together as though they are a single logical server side deployment | together as though they are a single logical server side deployment | |||
| skipping to change at page 1, line 37 ¶ | skipping to change at page 1, line 37 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on December 8, 2018. | This Internet-Draft will expire on December 23, 2018. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2018 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 | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://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 | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 1.1. Requirements Notation and Conventions . . . . . . . . . . 3 | 1.1. Requirements Notation and Conventions . . . . . . . . . . 3 | |||
| 2. HTTP Header Fields and Processing Rules . . . . . . . . . . . 3 | 2. HTTP Header Fields and Processing Rules . . . . . . . . . . . 4 | |||
| 2.1. Encoding . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2.1. Encoding . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.1.1. Token Binding ID . . . . . . . . . . . . . . . . . . 4 | 2.1.1. Token Binding ID . . . . . . . . . . . . . . . . . . 4 | |||
| 2.1.2. Token Binding Type . . . . . . . . . . . . . . . . . 4 | 2.1.2. Token Binding Type . . . . . . . . . . . . . . . . . 4 | |||
| 2.2. Token Binding ID HTTP Header Fields . . . . . . . . . . . 4 | 2.2. Token Binding ID HTTP Header Fields . . . . . . . . . . . 4 | |||
| 2.3. Processing Rules . . . . . . . . . . . . . . . . . . . . 5 | 2.3. Processing Rules . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.4. Examples . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.4. Examples . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 2.4.1. Provided Token Binding ID . . . . . . . . . . . . . . 6 | 2.4.1. Provided Token Binding ID . . . . . . . . . . . . . . 6 | |||
| 2.4.2. Provided and Referred Token Binding IDs . . . . . . . 7 | 2.4.2. Provided and Referred Token Binding IDs . . . . . . . 7 | |||
| 2.4.3. Provided and Other Token Binding IDs . . . . . . . . 8 | 2.4.3. Provided and Other Token Binding IDs . . . . . . . . 8 | |||
| 3. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | 3. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | |||
| 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | 3.1. HTTP Headers . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.2. TLS Versions and Best Practices . . . . . . . . . . . . . 9 | ||||
| 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | ||||
| 4.1. HTTP Message Header Field Names Registration . . . . . . 10 | 4.1. HTTP Message Header Field Names Registration . . . . . . 10 | |||
| 5. References . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 5. References . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 5.1. Normative References . . . . . . . . . . . . . . . . . . 10 | 5.1. Normative References . . . . . . . . . . . . . . . . . . 10 | |||
| 5.2. Informative References . . . . . . . . . . . . . . . . . 11 | 5.2. Informative References . . . . . . . . . . . . . . . . . 11 | |||
| Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 11 | Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 12 | |||
| Appendix B. Document History . . . . . . . . . . . . . . . . . . 12 | Appendix B. Document History . . . . . . . . . . . . . . . . . . 12 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 13 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 1. Introduction | 1. Introduction | |||
| Token Binding over HTTP [I-D.ietf-tokbind-https] provides a mechanism | Token Binding over HTTP [I-D.ietf-tokbind-https] provides a mechanism | |||
| that enables HTTP servers to cryptographically bind cookies and other | that enables HTTP servers to cryptographically bind cookies and other | |||
| security tokens to a key held by the browser or other HTTP client, | security tokens to a key generated by the client. When the use of | |||
| possession of which is proven on the TLS [RFC5246] connections over | Token Binding is negotiated in the TLS [RFC5246] handshake | |||
| which the tokens are used. When Token Binding is negotiated in the | [I-D.ietf-tokbind-negotiation] the client sends an encoded Token | |||
| TLS handshake [I-D.ietf-tokbind-negotiation] the client sends an | Binding Message [I-D.ietf-tokbind-protocol] as a header in each HTTP | |||
| encoded Token Binding Message [I-D.ietf-tokbind-protocol] as a header | request, which proves possession of one or more private keys held by | |||
| in each HTTP request, which proves possession of one or more private | the client. The public portion of the keys are represented in the | |||
| keys held by the client. The public portion of the keys are | Token Binding IDs of the Token Binding Message and for each one there | |||
| represented in the Token Binding IDs of the Token Binding Message and | is a signature over some data, which includes the exported keying | |||
| for each one there is a signature over some data, which includes the | material [RFC5705] of the TLS connection. An HTTP server issuing | |||
| exported keying material [RFC5705] of the TLS connection. An HTTP | cookies or other security tokens can associate them with the Token | |||
| server issuing cookies or other security tokens can associate them | Binding ID, which ensures those tokens cannot be used successfully | |||
| with the Token Binding ID, which ensures those tokens cannot be used | over a different TLS connection or by a different client than the one | |||
| successfully over a different TLS connection or by a different client | to which they were issued. | |||
| than the one to which they were issued. | ||||
| A fairly common deployment architecture for HTTPS applications is to | A fairly common deployment architecture for HTTPS applications is to | |||
| have the backend HTTP application servers sit behind a reverse proxy | have the backend HTTP application servers sit behind a reverse proxy | |||
| that terminates TLS. The proxy is accessible to the internet and | that terminates TLS connections from clients. The proxy is | |||
| dispatches client requests to the appropriate backend server within a | accessible to the internet and dispatches client requests to the | |||
| private or protected network. The backend servers are not directly | appropriate backend server within a private or protected network. | |||
| accessible outside the private network and are only reachable through | The backend servers are not directly accessible by clients and are | |||
| the reverse proxy. The details of such deployments are typically | only reachable through the reverse proxy. The details of such | |||
| opaque to clients who make requests to the proxy server and see | deployments are typically opaque to clients who make requests to the | |||
| responses as though they originated from the proxy server itself. | proxy server and see responses as though they originated from the | |||
| TLS connections for HTTPS are established between each client and the | proxy server itself. Although HTTPS is also usually employed between | |||
| reverse proxy server. | the proxy and the backend server, the TLS connection that the client | |||
| establishes for HTTPS is between itself and the reverse proxy server. | ||||
| Token Binding facilitates a binding of security tokens to a key held | Token Binding facilitates a binding of security tokens to a key held | |||
| by the client by way of the TLS connection between that client and | by the client by way of the TLS connection between that client and | |||
| the server. In a deployment where TLS is terminated by a reverse | the server. In a deployment where TLS is terminated by a reverse | |||
| proxy, however, the TLS connection is between the client and the | proxy, however, the TLS connection is between the client and the | |||
| proxy while the backend server is likely the system that will issue | proxy while the backend server is likely the system that will issue | |||
| and validate cookies or other security tokens. Additional steps are | and validate cookies or other security tokens. Additional steps are | |||
| therefore needed to enable the use of Token Binding in such | therefore needed to enable the use of Token Binding in such | |||
| deployment architectures. In the absence of a standardized approach, | deployment architectures. In the absence of a standardized approach, | |||
| different implementations will address it differently, which will | different implementations will address it differently, which will | |||
| make interoperability between such implementations difficult or | make interoperability between such implementations difficult or | |||
| impossible without complex configurations or custom integrations. | impossible without complex configurations or custom integrations. | |||
| This document standardizes HTTP header field names that a TLS | This document standardizes HTTP header field names that a TLS | |||
| terminating reverse proxy (TTRP) adds to requests that it sends to | terminating reverse proxy (TTRP) adds to requests that it sends to | |||
| the backend servers. The headers contain information from the | the backend servers. The headers contain information from the | |||
| validated Token Binding Message sent by the client to the proxy, thus | validated Token Binding Message sent by the client to the proxy, thus | |||
| enabling the backend server to bind, or verify the binding of, | enabling the backend server to bind, or verify the binding of, | |||
| cookies and other security tokens to the client's Token Binding key. | cookies and other security tokens to the client's Token Binding key. | |||
| The usage of the headers, both the reverse proxy adding it and the | The usage of the headers, both the TTRP adding the headers and the | |||
| application server using them to bind cookies or other tokens, are to | backend application server using the headers to bind cookies or other | |||
| be configuration options of the respective systems as they will not | tokens, are to be configuration options of the respective systems as | |||
| always be applicable. | they will not always be applicable. | |||
| 1.1. Requirements Notation and Conventions | 1.1. Requirements Notation and Conventions | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 2. HTTP Header Fields and Processing Rules | 2. HTTP Header Fields and Processing Rules | |||
| skipping to change at page 4, line 30 ¶ | skipping to change at page 4, line 33 ¶ | |||
| EncodedTokenBindingID = *( DIGIT / ALPHA / "-" / "_" ) | EncodedTokenBindingID = *( DIGIT / ALPHA / "-" / "_" ) | |||
| DIGIT = <Defined in Section B.1 of [RFC5234]> | DIGIT = <Defined in Section B.1 of [RFC5234]> | |||
| ALPHA = <Defined in Section B.1 of [RFC5234]> | ALPHA = <Defined in Section B.1 of [RFC5234]> | |||
| Figure 1: Encoded Token Binding ID ABNF | Figure 1: Encoded Token Binding ID ABNF | |||
| 2.1.2. Token Binding Type | 2.1.2. Token Binding Type | |||
| A Token Binding type value (a single byte) can be represented as an | A Token Binding type value (a single byte) can be represented as an | |||
| "EncodedTokenBindingType", which is a case-insensitive hex (Section 8 | "EncodedTokenBindingType", which is a case-insensitive hex encoding | |||
| of [RFC4648]) encoding. The ABNF definition is shown in Figure 2 | (Section 8 of [RFC4648]). The ABNF definition is shown in Figure 2 | |||
| below. | below. | |||
| EncodedTokenBindingType = 1*2HEXDIG | EncodedTokenBindingType = 1*2HEXDIG | |||
| HEXDIG = <Defined in Section B.1 of [RFC5234]> | HEXDIG = <Defined in Section B.1 of [RFC5234]> | |||
| Figure 2: Encoded Token Binding Type ABNF | Figure 2: Encoded Token Binding Type ABNF | |||
| 2.2. Token Binding ID HTTP Header Fields | 2.2. Token Binding ID HTTP Header Fields | |||
| skipping to change at page 5, line 12 ¶ | skipping to change at page 5, line 14 ¶ | |||
| Sec-Provided-Token-Binding-ID | Sec-Provided-Token-Binding-ID | |||
| The Token Binding ID of the provided Token Binding represented as | The Token Binding ID of the provided Token Binding represented as | |||
| an "EncodedTokenBindingID". | an "EncodedTokenBindingID". | |||
| Sec-Referred-Token-Binding-ID | Sec-Referred-Token-Binding-ID | |||
| The Token Binding ID of the referred Token Binding represented as | The Token Binding ID of the referred Token Binding represented as | |||
| an "EncodedTokenBindingID". | an "EncodedTokenBindingID". | |||
| Sec-Other-Token-Binding-ID | Sec-Other-Token-Binding-ID | |||
| Additional Token Bindings, other than provided and referred, that | Additional Token Bindings that are sent by the client and | |||
| are sent by the client and validated by the TTRP are represented | validated by the TTRP are represented as a comma-separated list of | |||
| as a comma-separated list of the concatenation of the | the concatenation of the "EncodedTokenBindingType", a period (".") | |||
| "EncodedTokenBindingType", a period (".") character, and the | character, and the "EncodedTokenBindingID" of each. | |||
| "EncodedTokenBindingID" of each. | ||||
| Both "Sec-Provided-Token-Binding-ID" and "Sec-Referred-Token-Binding- | Both "Sec-Provided-Token-Binding-ID" and "Sec-Referred-Token-Binding- | |||
| ID" are single HTTP header field-valued as defined in Section 3.2 of | ID" are single HTTP header field-valued as defined in Section 3.2 of | |||
| [RFC7230], which MUST NOT have a list of values or occur multiple | [RFC7230], which MUST NOT have a list of values or occur multiple | |||
| times in a request. | times in a request. | |||
| All header fields defined herein are only for use in HTTP requests | All header fields defined herein are only for use in HTTP requests | |||
| and MUST NOT to be used in HTTP responses. | and MUST NOT to be used in HTTP responses. | |||
| 2.3. Processing Rules | 2.3. Processing Rules | |||
| This section defines the applicable processing rules for a TLS | This section defines the applicable processing rules for a TLS | |||
| terminating reverse proxy (TTRP) and backend server(s) to provide | terminating reverse proxy (TTRP) and backend server(s) to provide | |||
| server side support of Token Binding over HTTP | server side support of Token Binding over HTTP | |||
| [I-D.ietf-tokbind-https] using the HTTP headers described in | [I-D.ietf-tokbind-https] using the HTTP headers described in | |||
| Section 2.2. Use of the technique is to be a configuration or | Section 2.2. Use of the technique is to be a configuration or | |||
| deployment option and the processing rules described herein are for | deployment option and the processing rules described herein are for | |||
| servers operating with that option enabled. | servers operating with that option enabled. | |||
| A TTRP negotiates the use of Token Binding with the client per | A TTRP negotiates the use of Token Binding with the client, such as | |||
| [I-D.ietf-tokbind-negotiation] and validates the Token Binding | is described in [I-D.ietf-tokbind-negotiation] and validates the | |||
| Message as defined in The Token Binding Protocol | Token Binding Message as defined in The Token Binding Protocol | |||
| [I-D.ietf-tokbind-protocol] and Token Binding over HTTP | [I-D.ietf-tokbind-protocol] and Token Binding over HTTP | |||
| [I-D.ietf-tokbind-https] for each HTTP request on the underlying TLS | [I-D.ietf-tokbind-https] for each HTTP request on the underlying TLS | |||
| connection. Requests with a valid Token Binding Message (and meeting | connection. Requests with a valid Token Binding Message (and meeting | |||
| any other authorization or policy requirements of the TTRP) are | any other authorization or policy requirements of the TTRP) are | |||
| dispatched to the backend server with the following modifications. | dispatched to the backend server with the following modifications. | |||
| 1. The "Sec-Token-Binding" header in the original incoming request | 1. The "Sec-Token-Binding" header in the original incoming request | |||
| MUST be removed from the request that is dispatched to the | MUST be removed from the request that is dispatched to the | |||
| backend server. | backend server. | |||
| skipping to change at page 6, line 45 ¶ | skipping to change at page 6, line 45 ¶ | |||
| 2.4. Examples | 2.4. Examples | |||
| Extra line breaks and whitespace have been added to the following | Extra line breaks and whitespace have been added to the following | |||
| examples for display and formatting purposes only. | examples for display and formatting purposes only. | |||
| 2.4.1. Provided Token Binding ID | 2.4.1. Provided Token Binding ID | |||
| The following "Sec-Token-Binding" header is from an HTTP request made | The following "Sec-Token-Binding" header is from an HTTP request made | |||
| over a TLS connection between the client and the TTRP where the use | over a TLS connection between the client and the TTRP where the use | |||
| of Token Binding has been negotiated (The base64url-encoded | of Token Binding has been negotiated. The base64url-encoded | |||
| representation of the exported keying material, which can be used to | representation of the exported keying material for that connection is | |||
| validate the Token Binding Message, for that connection is | "AYVUayPTP9RmELNpGjFl6Ykm2CUx7pUMxe35yb11dgU", which can be used to | |||
| "AYVUayPTP9RmELNpGjFl6Ykm2CUx7pUMxe35yb11dgU"). The encoded Token | validate the Token Binding Message. The encoded Token Binding | |||
| Binding Message has the provided Token Binding that the client uses | Message has the provided Token Binding that the client uses with the | |||
| with the server. | server. | |||
| Sec-Token-Binding: AIkAAgBBQKzyIrmcY_YCtHVoSHBut69vrGfFdy1_YKTZfFJv | Sec-Token-Binding: AIkAAgBBQKzyIrmcY_YCtHVoSHBut69vrGfFdy1_YKTZfFJv | |||
| 6BjrZsKD9b9FRzSBxDs1twTqnAS71M1RBumuihhI9xqxXKkAQEtxe4jeUJU0WezxlQ | 6BjrZsKD9b9FRzSBxDs1twTqnAS71M1RBumuihhI9xqxXKkAQEtxe4jeUJU0WezxlQ | |||
| XWVSBFeHxFMdXRBIH_LKOSAuSMOJ0XEw1Q8DE248qkOiRKzw3KdSNYukYEPmO21bQi | XWVSBFeHxFMdXRBIH_LKOSAuSMOJ0XEw1Q8DE248qkOiRKzw3KdSNYukYEPmO21bQi | |||
| 3YYAAA | 3YYAAA | |||
| Figure 3: Header in HTTP Request to TTRP | Figure 3: Header in HTTP Request to TTRP | |||
| After validating the Token Binding Message, the TTRP removes the | After validating the Token Binding Message, the TTRP removes the | |||
| "Sec-Token-Binding" header and adds the following "Sec-Provided- | "Sec-Token-Binding" header and adds the following "Sec-Provided- | |||
| skipping to change at page 7, line 26 ¶ | skipping to change at page 7, line 26 ¶ | |||
| Sec-Provided-Token-Binding-ID: AgBBQKzyIrmcY_YCtHVoSHBut69vrGfFdy1_ | Sec-Provided-Token-Binding-ID: AgBBQKzyIrmcY_YCtHVoSHBut69vrGfFdy1_ | |||
| YKTZfFJv6BjrZsKD9b9FRzSBxDs1twTqnAS71M1RBumuihhI9xqxXKk | YKTZfFJv6BjrZsKD9b9FRzSBxDs1twTqnAS71M1RBumuihhI9xqxXKk | |||
| Figure 4: Header in HTTP Request to Backend Server | Figure 4: Header in HTTP Request to Backend Server | |||
| 2.4.2. Provided and Referred Token Binding IDs | 2.4.2. Provided and Referred Token Binding IDs | |||
| The following "Sec-Token-Binding" header is from an HTTP request made | The following "Sec-Token-Binding" header is from an HTTP request made | |||
| over a TLS connection between the client and the TTRP where the use | over a TLS connection between the client and the TTRP where the use | |||
| of Token Binding has been negotiated (The base64url-encoded | of Token Binding has been negotiated. The base64url-encoded | |||
| representation of the exported keying material, which can be used to | representation of the exported keying material for that connection is | |||
| validate the Token Binding Message, for that connection is | "wEWWCP1KPxfq-QL4NxYII_P4ti_9YYqrTpGs28BZEqE", which can be used to | |||
| "wEWWCP1KPxfq-QL4NxYII_P4ti_9YYqrTpGs28BZEqE"). The encoded Token | validate the Token Binding Message. The encoded Token Binding | |||
| Binding Message has the provided Token Binding that the client uses | Message has the provided Token Binding that the client uses with the | |||
| with the server as well as the referred Token Binding that it uses | server as well as the referred Token Binding that it uses with a | |||
| with a different server. | different server. | |||
| Sec-Token-Binding: ARIAAgBBQCfsI1D1sTq5mvT_2H_dihNIvuHJCHGjHPJchPav | Sec-Token-Binding: ARIAAgBBQCfsI1D1sTq5mvT_2H_dihNIvuHJCHGjHPJchPav | |||
| NbGrOo26-2JgT_IsbvZd4daDFbirYBIwJ-TK1rh8FzrC-psAQMyYIqXj7djGPev1dk | NbGrOo26-2JgT_IsbvZd4daDFbirYBIwJ-TK1rh8FzrC-psAQMyYIqXj7djGPev1dk | |||
| jV9XxLYGCyqOrBVEtBHrMUCeo22ymLg3OiFcl_fmOPxJbjxI6lKcF0lyfy-dSQmPIe | jV9XxLYGCyqOrBVEtBHrMUCeo22ymLg3OiFcl_fmOPxJbjxI6lKcF0lyfy-dSQmPIe | |||
| zQ0AAAECAEFArPIiuZxj9gK0dWhIcG63r2-sZ8V3LX9gpNl8Um_oGOtmwoP1v0VHNI | zQ0AAAECAEFArPIiuZxj9gK0dWhIcG63r2-sZ8V3LX9gpNl8Um_oGOtmwoP1v0VHNI | |||
| HEOzW3BOqcBLvUzVEG6a6KGEj3GrFcqQBAHQm0pzgUTXKLRamuKE1pmmP9I3UBVpoe | HEOzW3BOqcBLvUzVEG6a6KGEj3GrFcqQBAHQm0pzgUTXKLRamuKE1pmmP9I3UBVpoe | |||
| 1DBCe9H2l1VPpsImakUa6crAqZ-0CGBmji7bYzQogpKcyxTTFk5zdwAA | 1DBCe9H2l1VPpsImakUa6crAqZ-0CGBmji7bYzQogpKcyxTTFk5zdwAA | |||
| Figure 5: Header in HTTP Request to TTRP | Figure 5: Header in HTTP Request to TTRP | |||
| skipping to change at page 8, line 16 ¶ | skipping to change at page 8, line 16 ¶ | |||
| HPJchPavNbGrOo26-2JgT_IsbvZd4daDFbirYBIwJ-TK1rh8FzrC-ps | HPJchPavNbGrOo26-2JgT_IsbvZd4daDFbirYBIwJ-TK1rh8FzrC-ps | |||
| Sec-Referred-Token-Binding-ID: AgBBQKzyIrmcY_YCtHVoSHBut69vrGfFdy1_ | Sec-Referred-Token-Binding-ID: AgBBQKzyIrmcY_YCtHVoSHBut69vrGfFdy1_ | |||
| YKTZfFJv6BjrZsKD9b9FRzSBxDs1twTqnAS71M1RBumuihhI9xqxXKk | YKTZfFJv6BjrZsKD9b9FRzSBxDs1twTqnAS71M1RBumuihhI9xqxXKk | |||
| Figure 6: Headers in HTTP Request to Backend Server | Figure 6: Headers in HTTP Request to Backend Server | |||
| 2.4.3. Provided and Other Token Binding IDs | 2.4.3. Provided and Other Token Binding IDs | |||
| The following "Sec-Token-Binding" header is from an HTTP request made | The following "Sec-Token-Binding" header is from an HTTP request made | |||
| over a TLS connection between the client and the TTRP where the use | over a TLS connection between the client and the TTRP where the use | |||
| of Token Binding has been negotiated (The base64url-encoded | of Token Binding has been negotiated. The base64url-encoded | |||
| representation of the exported keying material, which can be used to | representation of the exported keying material for that connection is | |||
| validate the Token Binding Message, for that connection is | "Zr_1DESCcDoaltcZCK613UrEWHRf2B3w9i3bwcxpacc", which can be used to | |||
| "Zr_1DESCcDoaltcZCK613UrEWHRf2B3w9i3bwcxpacc"). The encoded Token | validate the Token Binding Message. The encoded Token Binding | |||
| Binding Message has the provided Token Binding and two other Token | Message has the provided Token Binding and two other Token Bindings. | |||
| Bindings. | ||||
| Sec-Token-Binding: AZsAAgBBQA35hcCjI5GEHLLAZ0i2l2ZvQe-bSPAP7jovkZJM | Sec-Token-Binding: AZsAAgBBQA35hcCjI5GEHLLAZ0i2l2ZvQe-bSPAP7jovkZJM | |||
| 4wYHgmmXNd1aRpnQmXK9ghUmrdtS6p_e2uSlMXIVKOIwgysAQJ-TKyVGF37XUXMy79 | 4wYHgmmXNd1aRpnQmXK9ghUmrdtS6p_e2uSlMXIVKOIwgysAQJ-TKyVGF37XUXMy79 | |||
| ybwJyPpfCG9Iq6fdIxLX_yJn-L__Z3p_WIL3g17K0OH3XZmJS3qZNNEVu_8HmPN-d9 | ybwJyPpfCG9Iq6fdIxLX_yJn-L__Z3p_WIL3g17K0OH3XZmJS3qZNNEVu_8HmPN-d9 | |||
| hGMAAE0CAEFAR68GbdIQyrHqkorJF0sekYJvf8iV03obGxbaWbqAEJetsYxprB6c3M | hGMAAE0CAEFAR68GbdIQyrHqkorJF0sekYJvf8iV03obGxbaWbqAEJetsYxprB6c3M | |||
| x5KDHBGZjsFbeFW5Xec_EaxX0Hw3RmJwBA-Fu22kokRbB7G0D0g6_sdCHTbczSCmnm | x5KDHBGZjsFbeFW5Xec_EaxX0Hw3RmJwBA-Fu22kokRbB7G0D0g6_sdCHTbczSCmnm | |||
| 6rqP1x7kRIIj_kJNCCWcwMMFzbsBTXcm5fJrRdBTcsqiiqYD6aJ1SgAACwIAQUCDqt | 6rqP1x7kRIIj_kJNCCWcwMMFzbsBTXcm5fJrRdBTcsqiiqYD6aJ1SgAACwIAQUCDqt | |||
| 6m63By8b1lvhN-n9OsQThoLomzKpMicSZGwR166jplhbkjrFsHzdNqzLFFEhCT9s0p | 6m63By8b1lvhN-n9OsQThoLomzKpMicSZGwR166jplhbkjrFsHzdNqzLFFEhCT9s0p | |||
| XrcbpOHsZnpRSkmhAEBfOwxjK3Y9EOeMrqjo0IUhmurW2EgtSRBjDwc0r-rDT231Zv | XrcbpOHsZnpRSkmhAEBfOwxjK3Y9EOeMrqjo0IUhmurW2EgtSRBjDwc0r-rDT231Zv | |||
| _f1oePB8Pkd1kgAtgKX5EDiemfo1YER3_I2cv3AAA | _f1oePB8Pkd1kgAtgKX5EDiemfo1YER3_I2cv3AAA | |||
| skipping to change at page 8, line 43 ¶ | skipping to change at page 8, line 42 ¶ | |||
| Figure 7: Header in HTTP Request to TTRP | Figure 7: Header in HTTP Request to TTRP | |||
| After validating the Token Binding Message, the TTRP removes the | After validating the Token Binding Message, the TTRP removes the | |||
| "Sec-Token-Binding" header and adds the following "Sec-Provided- | "Sec-Token-Binding" header and adds the following "Sec-Provided- | |||
| Token-Binding-ID" and "Sec-Other-Token-Binding-ID" headers to the | Token-Binding-ID" and "Sec-Other-Token-Binding-ID" headers to the | |||
| request that is dispatched to the backend server. | request that is dispatched to the backend server. | |||
| Sec-Provided-Token-Binding-ID: AgBBQA35hcCjI5GEHLLAZ0i2l2ZvQe-bSPAP | Sec-Provided-Token-Binding-ID: AgBBQA35hcCjI5GEHLLAZ0i2l2ZvQe-bSPAP | |||
| 7jovkZJM4wYHgmmXNd1aRpnQmXK9ghUmrdtS6p_e2uSlMXIVKOIwgys | 7jovkZJM4wYHgmmXNd1aRpnQmXK9ghUmrdtS6p_e2uSlMXIVKOIwgys | |||
| Sec-Other-Token-Binding-ID: 4d.AgBBQEevBm3SEMqx6pKKyRdLHpGCb3_IldN6 | Sec-Other-Token-Binding-ID: 4d.AgBBQEevBm3SEMqx6pKKyRdLHpGCb3_IldN6 | |||
| GxsW2lm6gBCXrbGMaawenNzMeSgxwRmY7BW3hVuV3nPxGsV9B8N0Zic,b.AgBBQIO | GxsW2lm6gBCXrbGMaawenNzMeSgxwRmY7BW3hVuV3nPxGsV9B8N0Zic,B.AgBBQIO | |||
| q3qbrcHLxvWW-E36f06xBOGguibMqkyJxJkbBHXrqOmWFuSOsWwfN02rMsUUSEJP2 | q3qbrcHLxvWW-E36f06xBOGguibMqkyJxJkbBHXrqOmWFuSOsWwfN02rMsUUSEJP2 | |||
| zSletxuk4exmelFKSaE | zSletxuk4exmelFKSaE | |||
| Figure 8: Headers in HTTP Request to Backend Server | Figure 8: Headers in HTTP Request to Backend Server | |||
| 3. Security Considerations | 3. Security Considerations | |||
| 3.1. HTTP Headers | ||||
| The headers described herein enable a reverse proxy and backend | The headers described herein enable a reverse proxy and backend | |||
| server to function together as though they are a single logical | server to function together as though they are a single logical | |||
| server side deployment of HTTPS Token Binding. Use of the headers | server side deployment of HTTPS Token Binding. Use of the headers | |||
| outside that intended use case, however, may undermine the | outside that intended use case, however, may undermine the | |||
| protections afforded by Token Binding. Therefore steps MUST be taken | protections afforded by Token Binding. Therefore steps MUST be taken | |||
| to prevent unintended use, both in sending the headers and in relying | to prevent unintended use, both in sending the headers and in relying | |||
| on their value. | on their value. | |||
| Producing and consuming the headers SHOULD be a configurable option, | Producing and consuming the headers SHOULD be a configurable option, | |||
| skipping to change at page 9, line 48 ¶ | skipping to change at page 9, line 47 ¶ | |||
| private network such that the backend application is only able to | private network such that the backend application is only able to | |||
| accept requests from the reverse proxy and the proxy can only make | accept requests from the reverse proxy and the proxy can only make | |||
| requests to that server. Other deployments that meet the | requests to that server. Other deployments that meet the | |||
| requirements set forth herein are also possible. | requirements set forth herein are also possible. | |||
| Employing the "Sec-" header field prefix for the headers defined | Employing the "Sec-" header field prefix for the headers defined | |||
| herein denotes them as forbidden header names (see [fetch-spec]), | herein denotes them as forbidden header names (see [fetch-spec]), | |||
| which means they cannot be set or modified programmatically by script | which means they cannot be set or modified programmatically by script | |||
| running in-browser. | running in-browser. | |||
| 3.2. TLS Versions and Best Practices | ||||
| TLS 1.2 [RFC5246] is cited in this document because, at the time of | ||||
| writing, it is the latest version that is widely deployed. However, | ||||
| this document is applicable with other TLS versions that allow for | ||||
| negotiating the use of Token Binding. [I-D.ietf-tokbind-tls13], for | ||||
| example, describes Token Binding for TLS 1.3 [I-D.ietf-tls-tls13]. | ||||
| Implementation security considerations for TLS, including version | ||||
| recommendations, can be found in Recommendations for Secure Use of | ||||
| Transport Layer Security (TLS) and Datagram Transport Layer Security | ||||
| (DTLS) [BCP195]. | ||||
| 4. IANA Considerations | 4. IANA Considerations | |||
| 4.1. HTTP Message Header Field Names Registration | 4.1. HTTP Message Header Field Names Registration | |||
| This document specifies the following new HTTP header fields, | This document specifies the following new HTTP header fields, | |||
| registration of which is requested in the "Permanent Message Header | registration of which is requested in the "Permanent Message Header | |||
| Field Names" registry defined in [RFC3864]. | Field Names" registry defined in [RFC3864]. | |||
| o Header Field Name: "Sec-Provided-Token-Binding-ID" | o Header Field Name: "Sec-Provided-Token-Binding-ID" | |||
| o Applicable protocol: HTTP | o Applicable protocol: HTTP | |||
| o Status: standard | o Status: standard | |||
| o Author/change Controller: IETF | o Author/change Controller: IETF | |||
| skipping to change at page 10, line 32 ¶ | skipping to change at page 10, line 41 ¶ | |||
| o Header Field Name: "Sec-Other-Token-Binding-ID" | o Header Field Name: "Sec-Other-Token-Binding-ID" | |||
| o Applicable protocol: HTTP | o Applicable protocol: HTTP | |||
| o Status: standard | o Status: standard | |||
| o Author/change Controller: IETF | o Author/change Controller: IETF | |||
| o Specification Document(s): [[ this specification ]] | o Specification Document(s): [[ this specification ]] | |||
| 5. References | 5. References | |||
| 5.1. Normative References | 5.1. Normative References | |||
| [BCP195] Sheffer, Y., Holz, R., and P. Saint-Andre, | ||||
| "Recommendations for Secure Use of Transport Layer | ||||
| Security (TLS) and Datagram Transport Layer Security | ||||
| (DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May | ||||
| 2015, <http://www.rfc-editor.org/info/bcp195>. | ||||
| [I-D.ietf-tokbind-https] | [I-D.ietf-tokbind-https] | |||
| Popov, A., Nystrom, M., Balfanz, D., Langley, A., Harper, | Popov, A., Nystrom, M., Balfanz, D., Langley, A., Harper, | |||
| N., and J. Hodges, "Token Binding over HTTP", draft-ietf- | N., and J. Hodges, "Token Binding over HTTP", draft-ietf- | |||
| tokbind-https-12 (work in progress), January 2018. | tokbind-https-12 (work in progress), January 2018. | |||
| [I-D.ietf-tokbind-negotiation] | [I-D.ietf-tokbind-negotiation] | |||
| Popov, A., Nystrom, M., Balfanz, D., and A. Langley, | Popov, A., Nystrom, M., Balfanz, D., and A. Langley, | |||
| "Transport Layer Security (TLS) Extension for Token | "Transport Layer Security (TLS) Extension for Token | |||
| Binding Protocol Negotiation", draft-ietf-tokbind- | Binding Protocol Negotiation", draft-ietf-tokbind- | |||
| negotiation-10 (work in progress), October 2017. | negotiation-10 (work in progress), October 2017. | |||
| skipping to change at page 11, line 38 ¶ | skipping to change at page 12, line 5 ¶ | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| 5.2. Informative References | 5.2. Informative References | |||
| [fetch-spec] | [fetch-spec] | |||
| WhatWG, "Fetch", Living Standard , | WhatWG, "Fetch", Living Standard , | |||
| <https://fetch.spec.whatwg.org/>. | <https://fetch.spec.whatwg.org/>. | |||
| [I-D.ietf-tls-tls13] | ||||
| Rescorla, E., "The Transport Layer Security (TLS) Protocol | ||||
| Version 1.3", draft-ietf-tls-tls13-28 (work in progress), | ||||
| March 2018. | ||||
| [I-D.ietf-tokbind-tls13] | ||||
| Harper, N., "Token Binding for Transport Layer Security | ||||
| (TLS) Version 1.3 Connections", draft-ietf-tokbind- | ||||
| tls13-01 (work in progress), May 2018. | ||||
| [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration | [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration | |||
| Procedures for Message Header Fields", BCP 90, RFC 3864, | Procedures for Message Header Fields", BCP 90, RFC 3864, | |||
| DOI 10.17487/RFC3864, September 2004, | DOI 10.17487/RFC3864, September 2004, | |||
| <https://www.rfc-editor.org/info/rfc3864>. | <https://www.rfc-editor.org/info/rfc3864>. | |||
| Appendix A. Acknowledgements | Appendix A. Acknowledgements | |||
| The author would like to thank the following people for their various | The author would like to thank the following people for their various | |||
| contributions to the specification: Vinod Anupam, Dirk Balfanz, John | contributions to the specification: Vinod Anupam, Dirk Balfanz, John | |||
| Bradley, William Denniss, Nick Harper, Jeff Hodges, Subodh Iyengar, | Bradley, William Denniss, Nick Harper, Jeff Hodges, Subodh Iyengar, | |||
| Leif Johansson, Michael B. Jones, Yoav Nir, James Manger, Andrei | Leif Johansson, Michael B. Jones, Yoav Nir, James Manger, Andrei | |||
| Popov, Eric Rescorla, Piotr Sikora, Martin Thomson, and Hans Zandbelt | Popov, Eric Rescorla, Piotr Sikora, Martin Thomson, and Hans Zandbelt | |||
| Appendix B. Document History | Appendix B. Document History | |||
| [[ to be removed by the RFC Editor before publication as an RFC ]] | [[ to be removed by the RFC Editor before publication as an RFC ]] | |||
| draft-ietf-tokbind-ttrp-05 | ||||
| o Editorial updates. | ||||
| o Change one character in the last example to help emphasize the | ||||
| case-insensitivity of hex. | ||||
| o Add a TLS Versions and Best Practices section with BCP195 and also | ||||
| mention of ietf-tokbind-tls13 and ietf-tls-tls13. | ||||
| draft-ietf-tokbind-ttrp-04 | draft-ietf-tokbind-ttrp-04 | |||
| o Add an example with Sec-Other-Token-Binding-ID. | o Add an example with Sec-Other-Token-Binding-ID. | |||
| o Use the HEXDIG core ABNF rule for EncodedTokenBindingType and | o Use the HEXDIG core ABNF rule for EncodedTokenBindingType and | |||
| mention case-insensitive in the text. | mention case-insensitive in the text. | |||
| o Minor editorial fixes. | o Minor editorial fixes. | |||
| o Add to the Acknowledgements and remove the 'and others' bit. | o Add to the Acknowledgements and remove the 'and others' bit. | |||
| draft-ietf-tokbind-ttrp-03 | ||||
| o Add a header to allow for additional token binding types other | o Add a header to allow for additional token binding types other | |||
| than provided and referred to be conveyed. | than provided and referred to be conveyed. | |||
| o Reword the Abstract somewhat for (hopefully) improved readability. | o Reword the Abstract somewhat for (hopefully) improved readability. | |||
| o Minor editorial and formatting updates. | o Minor editorial and formatting updates. | |||
| draft-ietf-tokbind-ttrp-02 | draft-ietf-tokbind-ttrp-02 | |||
| o Add to the Acknowledgements. | o Add to the Acknowledgements. | |||
| skipping to change at page 13, line 5 ¶ | skipping to change at page 13, line 37 ¶ | |||
| o Prefix the header names with "Sec-" so that they are denoted as | o Prefix the header names with "Sec-" so that they are denoted as | |||
| forbidden header names by Fetch https://fetch.spec.whatwg.org/ | forbidden header names by Fetch https://fetch.spec.whatwg.org/ | |||
| o Removed potentially confusing sentence from Security | o Removed potentially confusing sentence from Security | |||
| Considerations per | Considerations per | |||
| https://mailarchive.ietf.org/arch/msg/unbearable/ | https://mailarchive.ietf.org/arch/msg/unbearable/ | |||
| O0IpppyyEqMrQjEkyEi8p8CeBGA | O0IpppyyEqMrQjEkyEi8p8CeBGA | |||
| o Editorial fixes. | o Editorial fixes. | |||
| draft-ietf-tokbind-ttrp-00 | ||||
| o Initial WG draft from draft-campbell-tokbind-ttrp. | o Initial WG draft from draft-campbell-tokbind-ttrp. | |||
| draft-campbell-tokbind-ttrp-01 | draft-campbell-tokbind-ttrp-01 | |||
| o Minor editorial fixes. | o Minor editorial fixes. | |||
| o Add to the Acknowledgements. | o Add to the Acknowledgements. | |||
| draft-campbell-tokbind-ttrp-00 | draft-campbell-tokbind-ttrp-00 | |||
| o Initial draft based on 'consensus to work on the problem' from the | o Initial draft based on 'consensus to work on the problem' from the | |||
| Seoul meeting [1][2] and reflecting the consensus approach from | Seoul meeting [1][2] and reflecting the consensus approach from | |||
| discussions at the Chicago meeting [3]. | discussions at the Chicago meeting [3]. | |||
| [1] https://www.ietf.org/proceedings/97/minutes/minutes-97- | [1] https://www.ietf.org/proceedings/97/minutes/minutes-97- | |||
| tokbind-01.txt (minutes from Seoul) | tokbind-01.txt (minutes from Seoul) | |||
| [2] https://www.ietf.org/proceedings/97/slides/slides-97-tokbind- | [2] https://www.ietf.org/proceedings/97/slides/slides-97-tokbind- | |||
| reverse-proxies-00.pdf (slides from Seoul) | reverse-proxies-00.pdf (slides from Seoul) | |||
| [3] https://mailarchive.ietf.org/arch/msg/ | [3] https://mailarchive.ietf.org/arch/msg/ | |||
| unbearable/_ZHI8y2Vs5WMP8VMRr7zroo_sNU (summary of discussion) | unbearable/_ZHI8y2Vs5WMP8VMRr7zroo_sNU (summary of discussion) | |||
| End of changes. 26 change blocks. | ||||
| 69 lines changed or deleted | 108 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/ | ||||