1 | <?xml version="1.0" encoding="UTF-8"?> |
---|
2 | <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> |
---|
3 | <?rfc toc="yes" ?> |
---|
4 | <?rfc symrefs="no" ?> |
---|
5 | |
---|
6 | <!DOCTYPE rfc [ |
---|
7 | <!ENTITY MAY "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>MAY</bcp14>"> |
---|
8 | <!ENTITY MUST "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>MUST</bcp14>"> |
---|
9 | <!ENTITY MUST-NOT "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>MUST NOT</bcp14>"> |
---|
10 | <!ENTITY OPTIONAL "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>OPTIONAL</bcp14>"> |
---|
11 | <!ENTITY RECOMMENDED "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>RECOMMENDED</bcp14>"> |
---|
12 | <!ENTITY REQUIRED "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>REQUIRED</bcp14>"> |
---|
13 | <!ENTITY SHALL "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>SHALL</bcp14>"> |
---|
14 | <!ENTITY SHALL-NOT "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>SHALL NOT</bcp14>"> |
---|
15 | <!ENTITY SHOULD "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>SHOULD</bcp14>"> |
---|
16 | <!ENTITY SHOULD-NOT "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>SHOULD NOT</bcp14>"> |
---|
17 | ]> |
---|
18 | |
---|
19 | <rfc xmlns:x="http://purl.org/net/xml2rfc/ext" number="2817" updates="2616" category="std"> |
---|
20 | <front> |
---|
21 | <title>Upgrading to TLS Within HTTP/1.1</title> |
---|
22 | <author initials='R.' surname='Khare' fullname='Rohit Khare'> |
---|
23 | <organization>4K Associates / UC Irvine</organization> |
---|
24 | <address><email>rohit@4K-associates.com</email></address> |
---|
25 | </author> |
---|
26 | <author initials='S.' surname='Lawrence' fullname='Scott Lawrence'> |
---|
27 | <organization>Agranat Systems, Inc.</organization> |
---|
28 | <address><email>lawrence@agranat.com</email></address> |
---|
29 | </author> |
---|
30 | <date year='2000' month='May' /> |
---|
31 | <abstract> |
---|
32 | <t> |
---|
33 | This memo explains how to use the Upgrade mechanism in HTTP/1.1 to |
---|
34 | initiate Transport Layer Security (TLS) over an existing TCP |
---|
35 | connection. This allows unsecured and secured HTTP traffic to share |
---|
36 | the same well known port (in this case, http: at 80 rather than |
---|
37 | https: at 443). It also enables "virtual hosting", so a single HTTP + |
---|
38 | TLS server can disambiguate traffic intended for several hostnames at |
---|
39 | a single IP address. |
---|
40 | </t> |
---|
41 | <t> |
---|
42 | Since HTTP/1.1 <xref target="RFC2616"/> defines Upgrade as a hop-by-hop mechanism, this |
---|
43 | memo also documents the HTTP CONNECT method for establishing end-to-end |
---|
44 | tunnels across HTTP proxies. Finally, this memo establishes new |
---|
45 | IANA registries for public HTTP status codes, as well as public or |
---|
46 | private Upgrade product tokens. |
---|
47 | </t> |
---|
48 | <t> |
---|
49 | This memo does NOT affect the current definition of the 'https' URI |
---|
50 | scheme, which already defines a separate namespace |
---|
51 | (http://example.org/ and https://example.org/ are not equivalent). |
---|
52 | </t> |
---|
53 | </abstract> |
---|
54 | </front> |
---|
55 | <middle> |
---|
56 | <section title="Motivation"> |
---|
57 | <t> |
---|
58 | The historical practice of deploying HTTP over SSL3 <xref target="RFC2818"/> has |
---|
59 | distinguished the combination from HTTP alone by a unique URI scheme |
---|
60 | and the TCP port number. The scheme 'http' meant the HTTP protocol |
---|
61 | alone on port 80, while 'https' meant the HTTP protocol over SSL on |
---|
62 | port 443. Parallel well-known port numbers have similarly been |
---|
63 | requested -- and in some cases, granted -- to distinguish between |
---|
64 | secured and unsecured use of other application protocols (e.g. |
---|
65 | snews, ftps). This approach effectively halves the number of |
---|
66 | available well known ports. |
---|
67 | </t> |
---|
68 | <t> |
---|
69 | At the Washington DC IETF meeting in December 1997, the Applications |
---|
70 | Area Directors and the IESG reaffirmed that the practice of issuing |
---|
71 | parallel "secure" port numbers should be deprecated. The HTTP/1.1 |
---|
72 | Upgrade mechanism can apply Transport Layer Security <xref target="RFC2246"/> to an open |
---|
73 | HTTP connection. |
---|
74 | </t> |
---|
75 | <t> |
---|
76 | In the nearly two years since, there has been broad acceptance of the |
---|
77 | concept behind this proposal, but little interest in implementing |
---|
78 | alternatives to port 443 for generic Web browsing. In fact, nothing |
---|
79 | in this memo affects the current interpretation of https: URIs. |
---|
80 | However, new application protocols built atop HTTP, such as the |
---|
81 | Internet Printing Protocol <xref target="RFC2565"/>, call for just such a mechanism in |
---|
82 | order to move ahead in the IETF standards process. |
---|
83 | </t> |
---|
84 | <t> |
---|
85 | The Upgrade mechanism also solves the "virtual hosting" problem. |
---|
86 | Rather than allocating multiple IP addresses to a single host, an |
---|
87 | HTTP/1.1 server will use the Host: header to disambiguate the |
---|
88 | intended web service. As HTTP/1.1 usage has grown more prevalent, |
---|
89 | more ISPs are offering name-based virtual hosting, thus delaying IP |
---|
90 | address space exhaustion. |
---|
91 | </t> |
---|
92 | <t> |
---|
93 | TLS (and SSL) have been hobbled by the same limitation as earlier |
---|
94 | versions of HTTP: the initial handshake does not specify the intended |
---|
95 | hostname, relying exclusively on the IP address. Using a cleartext |
---|
96 | HTTP/1.1 Upgrade: preamble to the TLS handshake -- choosing the |
---|
97 | certificates based on the initial Host: header -- will allow ISPs to |
---|
98 | provide secure name-based virtual hosting as well. |
---|
99 | </t> |
---|
100 | </section> |
---|
101 | |
---|
102 | <section title="Introduction"> |
---|
103 | <t> |
---|
104 | TLS, a.k.a., SSL (Secure Sockets Layer), establishes a private end-to-end |
---|
105 | connection, optionally including strong mutual authentication, |
---|
106 | using a variety of cryptosystems. Initially, a handshake phase uses |
---|
107 | three subprotocols to set up a record layer, authenticate endpoints, |
---|
108 | set parameters, as well as report errors. Then, there is an ongoing |
---|
109 | layered record protocol that handles encryption, compression, and |
---|
110 | reassembly for the remainder of the connection. The latter is |
---|
111 | intended to be completely transparent. For example, there is no |
---|
112 | dependency between TLS's record markers and or certificates and |
---|
113 | HTTP/1.1's chunked encoding or authentication. |
---|
114 | </t> |
---|
115 | <t> |
---|
116 | Either the client or server can use the HTTP/1.1 <xref target="RFC2616"/> Upgrade |
---|
117 | mechanism (<xref target="RFC2616" x:fmt="sec" x:sec="14.42"/>) to indicate that a TLS-secured connection |
---|
118 | is desired or necessary. This memo defines the "TLS/1.0" Upgrade |
---|
119 | token, and a new HTTP Status Code, "426 Upgrade Required". |
---|
120 | </t> |
---|
121 | <t> |
---|
122 | <xref target="client.requested.upgrade.to.http.over.tls"/> and <xref target="server.requested.upgrade.to.http.over.tls"/> describe the operation of a directly |
---|
123 | connected client and server. Intermediate proxies must establish an |
---|
124 | end-to-end tunnel before applying those operations, as explained in |
---|
125 | <xref target="upgrade.across.proxies"/>. |
---|
126 | </t> |
---|
127 | |
---|
128 | <section title="Requirements Terminology"> |
---|
129 | <t> |
---|
130 | Keywords "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD NOT" and |
---|
131 | "MAY" that appear in this document are to be interpreted as described |
---|
132 | in RFC 2119 <xref target="RFC2119"/>. |
---|
133 | </t> |
---|
134 | </section> |
---|
135 | |
---|
136 | </section> |
---|
137 | |
---|
138 | <section title="Client Requested Upgrade to HTTP over TLS" anchor="client.requested.upgrade.to.http.over.tls"> |
---|
139 | <t> |
---|
140 | When the client sends an HTTP/1.1 request with an Upgrade header |
---|
141 | field containing the token "TLS/1.0", it is requesting the server to |
---|
142 | complete the current HTTP/1.1 request after switching to TLS/1.0. |
---|
143 | </t> |
---|
144 | |
---|
145 | <section title="Optional Upgrade"> |
---|
146 | <t> |
---|
147 | A client &MAY; offer to switch to secured operation during any clear |
---|
148 | HTTP request when an unsecured response would be acceptable: |
---|
149 | </t> |
---|
150 | <figure><artwork type='message/http: msgtype="request"'> |
---|
151 | GET http://example.bank.com/acct_stat.html?749394889300 HTTP/1.1 |
---|
152 | Host: example.bank.com |
---|
153 | Upgrade: TLS/1.0 |
---|
154 | Connection: Upgrade |
---|
155 | </artwork></figure> |
---|
156 | <t> |
---|
157 | In this case, the server &MAY; respond to the clear HTTP operation |
---|
158 | normally, OR switch to secured operation (as detailed in the next |
---|
159 | section). |
---|
160 | </t> |
---|
161 | <t> |
---|
162 | Note that HTTP/1.1 <xref target="RFC2616"/> specifies "the upgrade keyword &MUST; be |
---|
163 | supplied within a Connection header field (section 14.10) whenever |
---|
164 | Upgrade is present in an HTTP/1.1 message". |
---|
165 | </t> |
---|
166 | </section> |
---|
167 | |
---|
168 | <section title="Mandatory Upgrade"> |
---|
169 | <t> |
---|
170 | If an unsecured response would be unacceptable, a client &MUST; send an |
---|
171 | OPTIONS request first to complete the switch to TLS/1.0 (if |
---|
172 | possible). |
---|
173 | </t> |
---|
174 | <figure><artwork type='message/http: msgtype="request"'> |
---|
175 | OPTIONS * HTTP/1.1 |
---|
176 | Host: example.bank.com |
---|
177 | Upgrade: TLS/1.0 |
---|
178 | Connection: Upgrade |
---|
179 | </artwork></figure> |
---|
180 | </section> |
---|
181 | |
---|
182 | <section title="Server Acceptance of Upgrade Request"> |
---|
183 | <t> |
---|
184 | As specified in HTTP/1.1 <xref target="RFC2616"/>, if the server is prepared to initiate |
---|
185 | the TLS handshake, it &MUST; send the intermediate "101 Switching |
---|
186 | Protocol" and &MUST; include an Upgrade response header specifying the |
---|
187 | tokens of the protocol stack it is switching to: |
---|
188 | </t> |
---|
189 | <figure><artwork type='message/http: msgtype="response"'> |
---|
190 | HTTP/1.1 101 Switching Protocols |
---|
191 | Upgrade: TLS/1.0, HTTP/1.1 |
---|
192 | Connection: Upgrade |
---|
193 | </artwork></figure> |
---|
194 | <t> |
---|
195 | Note that the protocol tokens listed in the Upgrade header of a 101 |
---|
196 | Switching Protocols response specify an ordered 'bottom-up' stack. |
---|
197 | </t> |
---|
198 | <t> |
---|
199 | As specified in HTTP/1.1 <xref target="RFC2616" x:fmt="," x:sec="10.1.2"/>: "The server will |
---|
200 | switch protocols to those defined by the response's Upgrade header |
---|
201 | field immediately after the empty line which terminates the 101 |
---|
202 | response". |
---|
203 | </t> |
---|
204 | <t> |
---|
205 | Once the TLS handshake completes successfully, the server &MUST; |
---|
206 | continue with the response to the original request. Any TLS handshake |
---|
207 | failure &MUST; lead to disconnection, per the TLS error alert |
---|
208 | specification. |
---|
209 | </t> |
---|
210 | </section> |
---|
211 | </section> |
---|
212 | |
---|
213 | <section title="Server Requested Upgrade to HTTP over TLS" anchor="server.requested.upgrade.to.http.over.tls"> |
---|
214 | <t> |
---|
215 | The Upgrade response header field advertises possible protocol |
---|
216 | upgrades a server &MAY; accept. In conjunction with the "426 Upgrade |
---|
217 | Required" status code, a server can advertise the exact protocol |
---|
218 | upgrade(s) that a client &MUST; accept to complete the request. |
---|
219 | </t> |
---|
220 | |
---|
221 | <section title="Optional Advertisement"> |
---|
222 | <t> |
---|
223 | As specified in HTTP/1.1 <xref target="RFC2616"/>, the server &MAY; include an Upgrade |
---|
224 | header in any response other than 101 or 426 to indicate a |
---|
225 | willingness to switch to any (combination) of the protocols listed. |
---|
226 | </t> |
---|
227 | </section> |
---|
228 | |
---|
229 | <section title="Mandatory Advertisement"> |
---|
230 | <t> |
---|
231 | A server &MAY; indicate that a client request can not be completed |
---|
232 | without TLS using the "426 Upgrade Required" status code, which &MUST; |
---|
233 | include an an Upgrade header field specifying the token of the |
---|
234 | required TLS version. |
---|
235 | </t> |
---|
236 | <figure><artwork type='message/http: msgtype="request"'> |
---|
237 | HTTP/1.1 426 Upgrade Required |
---|
238 | Upgrade: TLS/1.0, HTTP/1.1 |
---|
239 | Connection: Upgrade |
---|
240 | </artwork></figure> |
---|
241 | <t> |
---|
242 | The server &SHOULD; include a message body in the 426 response which |
---|
243 | indicates in human readable form the reason for the error and |
---|
244 | describes any alternative courses which may be available to the user. |
---|
245 | </t> |
---|
246 | <t> |
---|
247 | Note that even if a client is willing to use TLS, it must use the |
---|
248 | operations in <xref target="client.requested.upgrade.to.http.over.tls"/> to proceed; the TLS handshake cannot begin |
---|
249 | immediately after the 426 response. |
---|
250 | </t> |
---|
251 | </section> |
---|
252 | </section> |
---|
253 | |
---|
254 | <section title="Upgrade across Proxies" anchor="upgrade.across.proxies"> |
---|
255 | <t> |
---|
256 | As a hop-by-hop header, Upgrade is negotiated between each pair of |
---|
257 | HTTP counterparties. If a User Agent sends a request with an Upgrade |
---|
258 | header to a proxy, it is requesting a change to the protocol between |
---|
259 | itself and the proxy, not an end-to-end change. |
---|
260 | </t> |
---|
261 | <t> |
---|
262 | Since TLS, in particular, requires end-to-end connectivity to provide |
---|
263 | authentication and prevent man-in-the-middle attacks, this memo |
---|
264 | specifies the CONNECT method to establish a tunnel across proxies. |
---|
265 | </t> |
---|
266 | <t> |
---|
267 | Once a tunnel is established, any of the operations in <xref target="client.requested.upgrade.to.http.over.tls"/> can |
---|
268 | be used to establish a TLS connection. |
---|
269 | </t> |
---|
270 | |
---|
271 | <section title="Implications of Hop By Hop Upgrade"> |
---|
272 | <t> |
---|
273 | If an origin server receives an Upgrade header from a proxy and |
---|
274 | responds with a 101 Switching Protocols response, it is changing the |
---|
275 | protocol only on the connection between the proxy and itself. |
---|
276 | Similarly, a proxy might return a 101 response to its client to |
---|
277 | change the protocol on that connection independently of the protocols |
---|
278 | it is using to communicate toward the origin server. |
---|
279 | </t> |
---|
280 | <t> |
---|
281 | These scenarios also complicate diagnosis of a 426 response. Since |
---|
282 | Upgrade is a hop-by-hop header, a proxy that does not recognize 426 |
---|
283 | might remove the accompanying Upgrade header and prevent the client |
---|
284 | from determining the required protocol switch. If a client receives |
---|
285 | a 426 status without an accompanying Upgrade header, it will need to |
---|
286 | request an end to end tunnel connection as described in <xref target="requesting.a.tunnel.with.connect"/> |
---|
287 | and repeat the request in order to obtain the required upgrade |
---|
288 | information. |
---|
289 | </t> |
---|
290 | <t> |
---|
291 | This hop-by-hop definition of Upgrade was a deliberate choice. It |
---|
292 | allows for incremental deployment on either side of proxies, and for |
---|
293 | optimized protocols between cascaded proxies without the knowledge of |
---|
294 | the parties that are not a part of the change. |
---|
295 | </t> |
---|
296 | </section> |
---|
297 | |
---|
298 | <section title="Requesting a Tunnel with CONNECT" anchor="requesting.a.tunnel.with.connect"> |
---|
299 | <t> |
---|
300 | A CONNECT method requests that a proxy establish a tunnel connection |
---|
301 | on its behalf. The Request-URI portion of the Request-Line is always |
---|
302 | an 'authority' as defined by URI Generic Syntax <xref target="RFC2396"/>, which is to say |
---|
303 | the host name and port number destination of the requested connection |
---|
304 | separated by a colon: |
---|
305 | </t> |
---|
306 | <figure><artwork type='message/http: msgtype="request"'> |
---|
307 | CONNECT server.example.com:80 HTTP/1.1 |
---|
308 | Host: server.example.com:80 |
---|
309 | </artwork></figure> |
---|
310 | <t> |
---|
311 | Other HTTP mechanisms can be used normally with the CONNECT method -- |
---|
312 | except end-to-end protocol Upgrade requests, of course, since the |
---|
313 | tunnel must be established first. |
---|
314 | </t> |
---|
315 | <t> |
---|
316 | For example, proxy authentication might be used to establish the |
---|
317 | authority to create a tunnel: |
---|
318 | </t> |
---|
319 | <figure><artwork type='message/http: msgtype="request"'> |
---|
320 | CONNECT server.example.com:80 HTTP/1.1 |
---|
321 | Host: server.example.com:80 |
---|
322 | Proxy-Authorization: basic aGVsbG86d29ybGQ= |
---|
323 | </artwork></figure> |
---|
324 | <t> |
---|
325 | Like any other pipelined HTTP/1.1 request, data to be tunneled may be |
---|
326 | sent immediately after the blank line. The usual caveats also apply: |
---|
327 | data may be discarded if the eventual response is negative, and the |
---|
328 | connection may be reset with no response if more than one TCP segment |
---|
329 | is outstanding. |
---|
330 | </t> |
---|
331 | </section> |
---|
332 | |
---|
333 | <section title="Establishing a Tunnel with CONNECT"> |
---|
334 | <t> |
---|
335 | Any successful (2xx) response to a CONNECT request indicates that the |
---|
336 | proxy has established a connection to the requested host and port, |
---|
337 | and has switched to tunneling the current connection to that server |
---|
338 | connection. |
---|
339 | </t> |
---|
340 | <t> |
---|
341 | It may be the case that the proxy itself can only reach the requested |
---|
342 | origin server through another proxy. In this case, the first proxy |
---|
343 | &SHOULD; make a CONNECT request of that next proxy, requesting a tunnel |
---|
344 | to the authority. A proxy &MUST-NOT; respond with any 2xx status code |
---|
345 | unless it has either a direct or tunnel connection established to the |
---|
346 | authority. |
---|
347 | </t> |
---|
348 | <t> |
---|
349 | An origin server which receives a CONNECT request for itself &MAY; |
---|
350 | respond with a 2xx status code to indicate that a connection is |
---|
351 | established. |
---|
352 | </t> |
---|
353 | <t> |
---|
354 | If at any point either one of the peers gets disconnected, any |
---|
355 | outstanding data that came from that peer will be passed to the other |
---|
356 | one, and after that also the other connection will be terminated by |
---|
357 | the proxy. If there is outstanding data to that peer undelivered, |
---|
358 | that data will be discarded. |
---|
359 | </t> |
---|
360 | </section> |
---|
361 | </section> |
---|
362 | |
---|
363 | <section title="Rationale for the use of a 4xx (client error) Status Code" anchor="rationale.for.the.use.of.a.4xx.status.code"> |
---|
364 | <t> |
---|
365 | Reliable, interoperable negotiation of Upgrade features requires an |
---|
366 | unambiguous failure signal. The 426 Upgrade Required status code |
---|
367 | allows a server to definitively state the precise protocol extensions |
---|
368 | a given resource must be served with. |
---|
369 | </t> |
---|
370 | <t> |
---|
371 | It might at first appear that the response should have been some form |
---|
372 | of redirection (a 3xx code), by analogy to an old-style redirection |
---|
373 | to an https: URI. User agents that do not understand Upgrade: |
---|
374 | preclude this. |
---|
375 | </t> |
---|
376 | <t> |
---|
377 | Suppose that a 3xx code had been assigned for "Upgrade Required"; a |
---|
378 | user agent that did not recognize it would treat it as 300. It would |
---|
379 | then properly look for a "Location" header in the response and |
---|
380 | attempt to repeat the request at the URL in that header field. Since |
---|
381 | it did not know to Upgrade to incorporate the TLS layer, it would at |
---|
382 | best fail again at the new URL. |
---|
383 | </t> |
---|
384 | </section> |
---|
385 | |
---|
386 | <section title="IANA Considerations"> |
---|
387 | <t> |
---|
388 | IANA shall create registries for two name spaces, as described in BCP |
---|
389 | 26 <xref target="RFC2434"/>: |
---|
390 | <list style="symbols"> |
---|
391 | <t>HTTP Status Codes</t> |
---|
392 | <t>HTTP Upgrade Tokens</t> |
---|
393 | </list> |
---|
394 | </t> |
---|
395 | |
---|
396 | <section title="HTTP Status Code Registry"> |
---|
397 | <t> |
---|
398 | The HTTP Status Code Registry defines the name space for the Status-Code |
---|
399 | token in the Status line of an HTTP response. The initial |
---|
400 | values for this name space are those specified by: |
---|
401 | <list style="numbers"> |
---|
402 | <t>Draft Standard for HTTP/1.1 <xref target="RFC2616"/></t> |
---|
403 | <t>Web Distributed Authoring and Versioning <xref target="RFC2518"/> [defines 420-424]</t> |
---|
404 | <t>WebDAV Advanced Collections <xref target="ADVCOL"/> (Work in Progress) [defines 425]</t> |
---|
405 | <t><xref target="rationale.for.the.use.of.a.4xx.status.code"/> [defines 426]</t> |
---|
406 | </list> |
---|
407 | </t> |
---|
408 | <t> |
---|
409 | Values to be added to this name space &SHOULD; be subject to review in |
---|
410 | the form of a standards track document within the IETF Applications |
---|
411 | Area. Any such document &SHOULD; be traceable through statuses of |
---|
412 | either 'Obsoletes' or 'Updates' to the Draft Standard for |
---|
413 | HTTP/1.1 <xref target="RFC2616"/>. |
---|
414 | </t> |
---|
415 | </section> |
---|
416 | |
---|
417 | <section title="HTTP Upgrade Token Registry"> |
---|
418 | <t> |
---|
419 | The HTTP Upgrade Token Registry defines the name space for product |
---|
420 | tokens used to identify protocols in the Upgrade HTTP header field. |
---|
421 | Each registered token should be associated with one or a set of |
---|
422 | specifications, and with contact information. |
---|
423 | </t> |
---|
424 | <t> |
---|
425 | The Draft Standard for HTTP/1.1 <xref target="RFC2616"/> specifies that these tokens obey |
---|
426 | the production for 'product': |
---|
427 | </t> |
---|
428 | <figure><artwork type="abnf2616"> |
---|
429 | product = token ["/" product-version] |
---|
430 | product-version = token |
---|
431 | </artwork></figure> |
---|
432 | <t> |
---|
433 | Registrations should be allowed on a First Come First Served basis as |
---|
434 | described in BCP 26 <xref target="RFC2434"/>. These specifications need not be IETF |
---|
435 | documents or be subject to IESG review, but should obey the following |
---|
436 | rules: |
---|
437 | <list style="numbers"> |
---|
438 | <t>A token, once registered, stays registered forever.</t> |
---|
439 | <t>The registration &MUST; name a responsible party for the |
---|
440 | registration.</t> |
---|
441 | <t>The registration &MUST; name a point of contact.</t> |
---|
442 | <t>The registration &MAY; name the documentation required for the |
---|
443 | token.</t> |
---|
444 | <t>The responsible party &MAY; change the registration at any time. |
---|
445 | The IANA will keep a record of all such changes, and make them |
---|
446 | available upon request.</t> |
---|
447 | <t>The responsible party for the first registration of a "product" |
---|
448 | token &MUST; approve later registrations of a "version" token |
---|
449 | together with that "product" token before they can be registered.</t> |
---|
450 | <t>If absolutely required, the IESG &MAY; reassign the responsibility |
---|
451 | for a token. This will normally only be used in the case when a |
---|
452 | responsible party cannot be contacted.</t> |
---|
453 | </list> |
---|
454 | </t> |
---|
455 | <t> |
---|
456 | This specification defines the protocol token "TLS/1.0" as the |
---|
457 | identifier for the protocol specified by The TLS Protocol <xref target="RFC2246"/>. |
---|
458 | </t> |
---|
459 | <t> |
---|
460 | It is NOT required that specifications for upgrade tokens be made |
---|
461 | publicly available, but the contact information for the registration |
---|
462 | &SHOULD; be. |
---|
463 | </t> |
---|
464 | </section> |
---|
465 | </section> |
---|
466 | |
---|
467 | <section title="Security Considerations"> |
---|
468 | <t> |
---|
469 | The potential for a man-in-the-middle attack (deleting the Upgrade |
---|
470 | header) remains the same as current, mixed http/https practice: |
---|
471 | <list style="symbols"> |
---|
472 | <t>Removing the Upgrade header is similar to rewriting web pages to |
---|
473 | change https:// links to http:// links.</t> |
---|
474 | <t>The risk is only present if the server is willing to vend such |
---|
475 | information over both a secure and an insecure channel in the |
---|
476 | first place.</t> |
---|
477 | <t>If the client knows for a fact that a server is TLS-compliant, it |
---|
478 | can insist on it by only sending an Upgrade request with a no-op |
---|
479 | method like OPTIONS.</t> |
---|
480 | <t>Finally, as the https: specification warns, "users should |
---|
481 | carefully examine the certificate presented by the server to |
---|
482 | determine if it meets their expectations".</t> |
---|
483 | </list> |
---|
484 | </t> |
---|
485 | <t> |
---|
486 | Furthermore, for clients that do not explicitly try to invoke TLS, |
---|
487 | servers can use the Upgrade header in any response other than 101 or |
---|
488 | 426 to advertise TLS compliance. Since TLS compliance should be |
---|
489 | considered a feature of the server and not the resource at hand, it |
---|
490 | should be sufficient to send it once, and let clients cache that |
---|
491 | fact. |
---|
492 | </t> |
---|
493 | |
---|
494 | <section title="Implications for the https: URI Scheme"> |
---|
495 | <t> |
---|
496 | While nothing in this memo affects the definition of the 'https' URI |
---|
497 | scheme, widespread adoption of this mechanism for HyperText content |
---|
498 | could use 'http' to identify both secure and non-secure resources. |
---|
499 | </t> |
---|
500 | <t> |
---|
501 | The choice of what security characteristics are required on the |
---|
502 | connection is left to the client and server. This allows either |
---|
503 | party to use any information available in making this determination. |
---|
504 | For example, user agents may rely on user preference settings or |
---|
505 | information about the security of the network such as 'TLS required |
---|
506 | on all POST operations not on my local net', or servers may apply |
---|
507 | resource access rules such as 'the FORM on this page must be served |
---|
508 | and submitted using TLS'. |
---|
509 | </t> |
---|
510 | </section> |
---|
511 | |
---|
512 | <section title="Security Considerations for CONNECT"> |
---|
513 | <t> |
---|
514 | A generic TCP tunnel is fraught with security risks. First, such |
---|
515 | authorization should be limited to a small number of known ports. |
---|
516 | The Upgrade: mechanism defined here only requires onward tunneling at |
---|
517 | port 80. Second, since tunneled data is opaque to the proxy, there |
---|
518 | are additional risks to tunneling to other well-known or reserved |
---|
519 | ports. A putative HTTP client CONNECTing to port 25 could relay spam |
---|
520 | via SMTP, for example. |
---|
521 | </t> |
---|
522 | </section> |
---|
523 | </section> |
---|
524 | |
---|
525 | </middle> |
---|
526 | <back> |
---|
527 | <references> |
---|
528 | |
---|
529 | <reference anchor="RFC2616"> |
---|
530 | <front> |
---|
531 | <title>Hypertext Transfer Protocol -- HTTP/1.1</title> |
---|
532 | <author initials="R." surname="Fielding" fullname="R. Fielding"> |
---|
533 | <organization>University of California, Irvine</organization> |
---|
534 | <address><email>fielding@ics.uci.edu</email></address> |
---|
535 | </author> |
---|
536 | <author initials="J." surname="Gettys" fullname="J. Gettys"> |
---|
537 | <organization>W3C</organization> |
---|
538 | <address><email>jg@w3.org</email></address> |
---|
539 | </author> |
---|
540 | <author initials="J." surname="Mogul" fullname="J. Mogul"> |
---|
541 | <organization>Compaq Computer Corporation</organization> |
---|
542 | <address><email>mogul@wrl.dec.com</email></address> |
---|
543 | </author> |
---|
544 | <author initials="H." surname="Frystyk" fullname="H. Frystyk"> |
---|
545 | <organization>MIT Laboratory for Computer Science</organization> |
---|
546 | <address><email>frystyk@w3.org</email></address> |
---|
547 | </author> |
---|
548 | <author initials="L." surname="Masinter" fullname="L. Masinter"> |
---|
549 | <organization>Xerox Corporation</organization> |
---|
550 | <address><email>masinter@parc.xerox.com</email></address> |
---|
551 | </author> |
---|
552 | <author initials="P." surname="Leach" fullname="P. Leach"> |
---|
553 | <organization>Microsoft Corporation</organization> |
---|
554 | <address><email>paulle@microsoft.com</email></address> |
---|
555 | </author> |
---|
556 | <author initials="T." surname="Berners-Lee" fullname="T. Berners-Lee"> |
---|
557 | <organization>W3C</organization> |
---|
558 | <address><email>timbl@w3.org</email></address> |
---|
559 | </author> |
---|
560 | <date month="June" year="1999"/> |
---|
561 | </front> |
---|
562 | <seriesInfo name="RFC" value="2616"/> |
---|
563 | </reference> |
---|
564 | |
---|
565 | <reference anchor='RFC2396'> |
---|
566 | <front> |
---|
567 | <title abbrev='URI Generic Syntax'>Uniform Resource Identifiers (URI): Generic Syntax</title> |
---|
568 | <author initials='T.' surname='Berners-Lee' fullname='Tim Berners-Lee'> |
---|
569 | <organization abbrev='MIT/LCS'>World Wide Web Consortium</organization> |
---|
570 | <address> |
---|
571 | <facsimile>+1(617)258-8682</facsimile> |
---|
572 | <email>timbl@w3.org</email></address> |
---|
573 | </author> |
---|
574 | <author initials='R.T.' surname='Fielding' fullname='Roy T. Fielding'> |
---|
575 | <organization abbrev='U.C. Irvine'>University of California, Irvine</organization> |
---|
576 | <address> |
---|
577 | <facsimile>+1(949)824-1715</facsimile> |
---|
578 | <email>fielding@ics.uci.edu</email></address> |
---|
579 | </author> |
---|
580 | <author initials='L.' surname='Masinter' fullname='Larry Masinter'> |
---|
581 | <organization abbrev='Xerox Corporation'>Xerox PARC</organization> |
---|
582 | <address> |
---|
583 | <facsimile>+1(415)812-4333</facsimile> |
---|
584 | <email>masinter@parc.xerox.com</email></address> |
---|
585 | </author> |
---|
586 | <date month='August' year='1998' /> |
---|
587 | <area>Applications</area> |
---|
588 | </front> |
---|
589 | <seriesInfo name='RFC' value='2396' /> |
---|
590 | </reference> |
---|
591 | |
---|
592 | <reference anchor='RFC2818'> |
---|
593 | <front> |
---|
594 | <title>HTTP Over TLS</title> |
---|
595 | <author initials='E.' surname='Rescorla' fullname='Eric Rescorla'> |
---|
596 | <organization>RTFM, Inc.</organization> |
---|
597 | <address><email>ekr@rtfm.com</email></address> |
---|
598 | </author> |
---|
599 | <date year='2000' month='May' /> |
---|
600 | </front> |
---|
601 | <seriesInfo name='RFC' value='2818' /> |
---|
602 | </reference> |
---|
603 | |
---|
604 | <reference anchor="RFC2518"> |
---|
605 | <front> |
---|
606 | <title>HTTP Extensions for Distributed Authoring -- WEBDAV</title> |
---|
607 | <author initials="Y." surname="Goland" fullname="Y. Goland"> |
---|
608 | <organization>Microsoft Corporation</organization> |
---|
609 | <address><email>yarong@microsoft.com</email></address> |
---|
610 | </author> |
---|
611 | <author initials="E." surname="Whitehead" fullname="E. J. Whitehead, Jr."> |
---|
612 | <organization abbrev="UC Irvine">Dept. Of Information and Computer Science, University of California, Irvine</organization> |
---|
613 | <address><email>ejw@ics.uci.edu</email></address> |
---|
614 | </author> |
---|
615 | <author initials="A." surname="Faizi" fullname="A. Faizi"> |
---|
616 | <organization abbrev="Netscape">Netscape</organization> |
---|
617 | <address><email>asad@netscape.com</email></address> |
---|
618 | </author> |
---|
619 | <author initials="S.R." surname="Carter" fullname="S. R. Carter"> |
---|
620 | <organization abbrev="Novell">Novell</organization> |
---|
621 | <address><email>srcarter@novell.com</email></address> |
---|
622 | </author> |
---|
623 | <author initials="D." surname="Jensen" fullname="D. Jensen"> |
---|
624 | <organization abbrev="Novell">Novell</organization> |
---|
625 | <address><email>dcjensen@novell.com</email></address> |
---|
626 | </author> |
---|
627 | <date month="February" year="1999"/> |
---|
628 | </front> |
---|
629 | <seriesInfo name="RFC" value="2518"/> |
---|
630 | </reference> |
---|
631 | |
---|
632 | <reference anchor="ADVCOL"> |
---|
633 | <front> |
---|
634 | <title>WebDAV Advanced Collection Protocol</title> |
---|
635 | <author initials="J." surname="Slein" fullname="J. Slein"> |
---|
636 | <organization/> |
---|
637 | </author> |
---|
638 | <author initials="E.J." surname="Whitehead" fullname="E.J. Whitehead"> |
---|
639 | <organization/> |
---|
640 | </author> |
---|
641 | <date/> |
---|
642 | </front> |
---|
643 | <annotation>Work In Progress.</annotation> |
---|
644 | </reference> |
---|
645 | |
---|
646 | <reference anchor="RFC2246"> |
---|
647 | <front> |
---|
648 | <title>The TLS Protocol Version 1.0</title> |
---|
649 | <author fullname="Tim Dierks" surname="Dierks" initials="T."> |
---|
650 | <organization>Certicom</organization> |
---|
651 | <address> |
---|
652 | <email>tdierks@certicom.com</email></address> |
---|
653 | </author> |
---|
654 | <author fullname="Christopher Allen" surname="Allen" initials="C."> |
---|
655 | <organization>Certicom</organization> |
---|
656 | <address> |
---|
657 | <email>callen@certicom.com</email></address> |
---|
658 | </author> |
---|
659 | <date month="January" year="1999"></date> |
---|
660 | </front> |
---|
661 | <seriesInfo name="RFC" value="2246"></seriesInfo> |
---|
662 | </reference> |
---|
663 | |
---|
664 | <reference anchor='RFC2565'> |
---|
665 | <front> |
---|
666 | <title abbrev='IPP/1.0: Encoding and Transport'>Internet Printing Protocol/1.0: Encoding and Transport</title> |
---|
667 | <author initials='R.' surname='Herriot' fullname='Robert Herriot'> |
---|
668 | <organization>Xerox Corporation</organization> |
---|
669 | <address> |
---|
670 | <phone>+1 650 813 7696</phone> |
---|
671 | <facsimile>+1 650 813 6860</facsimile> |
---|
672 | <email>rherriot@pahv.xerox.com</email></address> |
---|
673 | </author> |
---|
674 | <author initials='S.' surname='Butler' fullname='Sylvan Butler'> |
---|
675 | <organization>Hewlett-Packard</organization> |
---|
676 | <address> |
---|
677 | <phone>+1 208 396 6000</phone> |
---|
678 | <facsimile>+1 208 396 3457</facsimile> |
---|
679 | <email>sbutler@boi.hp.com</email></address> |
---|
680 | </author> |
---|
681 | <author initials='P.' surname='Moore' fullname='Paul Moore'> |
---|
682 | <organization>Microsoft</organization> |
---|
683 | <address> |
---|
684 | <phone>+1 425 936 0908</phone> |
---|
685 | <facsimile>+1 425 936 7329</facsimile> |
---|
686 | <email>paulmo@microsoft.com</email></address> |
---|
687 | </author> |
---|
688 | <author initials='R.' surname='Turner' fullname='Randy Turner'> |
---|
689 | <organization>Sharp Laboratories</organization> |
---|
690 | <address> |
---|
691 | <phone>+1 360 817 8456</phone> |
---|
692 | <facsimile>+1 360 817 8436</facsimile> |
---|
693 | <email>rturner@sharplabs.com</email></address> |
---|
694 | </author> |
---|
695 | <date year='1999' month='April' /> |
---|
696 | </front> |
---|
697 | <seriesInfo name='RFC' value='2565' /> |
---|
698 | </reference> |
---|
699 | |
---|
700 | <reference anchor="Luo97"> |
---|
701 | <front> |
---|
702 | <title>Tunneling TCP based protocols through Web proxy servers</title> |
---|
703 | <author initials="A." surname="Luotonen" fullname="Ari Luotonen"> |
---|
704 | <organization/> |
---|
705 | </author> |
---|
706 | <date/> |
---|
707 | </front> |
---|
708 | <annotation> |
---|
709 | Work In Progress. (Also available in: Luotonen, Ari. |
---|
710 | Web Proxy Servers, Prentice-Hall, 1997 ISBN:0136806120.) |
---|
711 | </annotation> |
---|
712 | </reference> |
---|
713 | |
---|
714 | <reference anchor='RFC2629'> |
---|
715 | <front> |
---|
716 | <title>Writing I-Ds and RFCs using XML</title> |
---|
717 | <author initials='M.T.' surname='Rose' fullname='Marshall T. Rose'> |
---|
718 | <organization>Invisible Worlds, Inc.</organization> |
---|
719 | <address> |
---|
720 | <postal> |
---|
721 | <street>660 York Street</street> |
---|
722 | <city>San Francisco</city> |
---|
723 | <region>CA</region> |
---|
724 | <code>94110</code> |
---|
725 | <country>US</country> |
---|
726 | </postal> |
---|
727 | <phone>+1 415 695 3975</phone> |
---|
728 | <email>mrose@not.invisible.net</email> |
---|
729 | <uri>http://invisible.net/</uri> |
---|
730 | </address> |
---|
731 | </author> |
---|
732 | <date month='June' year='1999' /> |
---|
733 | </front> |
---|
734 | <seriesInfo name='RFC' value='2629' /> |
---|
735 | </reference> |
---|
736 | |
---|
737 | <reference anchor="RFC2434"> |
---|
738 | <front> |
---|
739 | <title abbrev="Guidelines for IANA Considerations">Guidelines for Writing an IANA Considerations Section in RFCs</title> |
---|
740 | <author initials="T." surname="Narten" fullname="Thomas Narten"> |
---|
741 | <organization>IBM Corporation</organization> |
---|
742 | <address> |
---|
743 | <postal> |
---|
744 | <street>3039 Cornwallis Ave.</street> |
---|
745 | <street>PO Box 12195 - BRQA/502</street> |
---|
746 | <street>Research Triangle Park</street> |
---|
747 | <street>NC 27709-2195</street></postal> |
---|
748 | <phone>919-254-7798</phone> |
---|
749 | <email>narten@raleigh.ibm.com</email></address></author> |
---|
750 | <author initials="H.T." surname="Alvestrand" fullname="Harald Tveit Alvestrand"> |
---|
751 | <organization>Maxware</organization> |
---|
752 | <address> |
---|
753 | <postal> |
---|
754 | <street>Pirsenteret</street> |
---|
755 | <street>N-7005 Trondheim</street> |
---|
756 | <country>Norway</country></postal> |
---|
757 | <phone>+47 73 54 57 97</phone> |
---|
758 | <email>Harald@Alvestrand.no</email></address></author> |
---|
759 | <date year="1998" month="October"/> |
---|
760 | <area>General</area> |
---|
761 | </front> |
---|
762 | <seriesInfo name="BCP" value="26"/> |
---|
763 | <seriesInfo name="RFC" value="2434"/> |
---|
764 | </reference> |
---|
765 | |
---|
766 | <reference anchor="RFC2119"> |
---|
767 | <front> |
---|
768 | <title abbrev="RFC Key Words">Key words for use in RFCs to Indicate Requirement Levels</title> |
---|
769 | <author initials="S." surname="Bradner" fullname="Scott Bradner"> |
---|
770 | <organization>Harvard University</organization> |
---|
771 | <address> |
---|
772 | <email>sob@harvard.edu</email> |
---|
773 | </address></author> |
---|
774 | <date month="March" year="1997"/> |
---|
775 | </front> |
---|
776 | <seriesInfo name="BCP" value="14"/> |
---|
777 | <seriesInfo name="RFC" value="2119"/> |
---|
778 | </reference> |
---|
779 | |
---|
780 | </references> |
---|
781 | |
---|
782 | <section title="Acknowledgments"> |
---|
783 | <t> |
---|
784 | The CONNECT method was originally described in a Work in Progress |
---|
785 | titled, "Tunneling TCP based protocols through Web proxy servers", |
---|
786 | <xref target="Luo97"/> by Ari Luotonen of Netscape Communications Corporation. It was |
---|
787 | widely implemented by HTTP proxies, but was never made a part of any |
---|
788 | IETF Standards Track document. The method name CONNECT was reserved, |
---|
789 | but not defined in <xref target="RFC2616"/>. |
---|
790 | </t> |
---|
791 | <t> |
---|
792 | The definition provided here is derived directly from that earlier |
---|
793 | memo, with some editorial changes and conformance to the stylistic |
---|
794 | conventions since established in other HTTP specifications. |
---|
795 | </t> |
---|
796 | <t> |
---|
797 | Additional Thanks to: |
---|
798 | <list style="symbols"> |
---|
799 | <t>Paul Hoffman for his work on the STARTTLS command extension for |
---|
800 | ESMTP.</t> |
---|
801 | <t>Roy Fielding for assistance with the rationale behind Upgrade: |
---|
802 | and its interaction with OPTIONS.</t> |
---|
803 | <t>Eric Rescorla for his work on standardizing the existing https: |
---|
804 | practice to compare with.</t> |
---|
805 | <t>Marshall Rose, for the xml2rfc document type description and tools |
---|
806 | <xref target="RFC2629"/>.</t> |
---|
807 | <t>Jim Whitehead, for sorting out the current range of available HTTP |
---|
808 | status codes.</t> |
---|
809 | <t>Henrik Frystyk Nielsen, whose work on the Mandatory extension |
---|
810 | mechanism pointed out a hop-by-hop Upgrade still requires |
---|
811 | tunneling.</t> |
---|
812 | <t>Harald Alvestrand for improvements to the token registration |
---|
813 | rules.</t> |
---|
814 | </list> |
---|
815 | </t> |
---|
816 | </section> |
---|
817 | |
---|
818 | </back> |
---|
819 | </rfc> |
---|