W3C home > Mailing lists > Public > ietf-http-wg@w3.org > October to December 2013

Proposal: Explicit HTTP2S proxy with any node refusal

From: Peter Lepeska <bizzbyster@gmail.com>
Date: Tue, 26 Nov 2013 17:29:46 -0500
Message-ID: <CANmPAYETjKHcsBpan8r3S2-cwvkTg1vhUMBpBpnNcRZpAB90AQ@mail.gmail.com>
To: "ietf-http-wg@w3.org" <ietf-http-wg@w3.org>
*Problem statement*:

As Mark, Roberto, and others have argued in multiple Internet Drafts, an
explicit, trusted proxy is preferable to a transparent MITM proxy as
intermediary of HTTP2S traffic (HTTP2 over TLS). One problem in developing
a standard for an explicit, trusted proxy is the process by which a proxy
establishes trust. We don't try to tackle that problem here but believe
that it should be *no easier* than the current process by which MITM
proxies establish trust, which is to install a CA certificate into the
browser's certificate database. So, for instance, one possibility is that
the browser will have a "trusted proxy partition" in its certificate
database and a proxy will only be trusted if its certificate is installed
there. Again, this problem is not solved here.

The harder problems in designing a standard for explicit trusted proxies
are 1) the need for message authentication and integrity, meaning the
browser and server can be confident that the proxy has not tampered with
the data and 2) any node refusal, by which I mean that all actors (browser,
proxy, and server) should both express their intentions and be able to
refuse participation on a per object basis. Three scenarios illustrate the
issue of any node refusal:

1)    Web server says no: A cache (or optimizing proxy) improves end user
response times and network utilization. A user will often elect to trust
this proxy, allowing it to view HTTP2S traffic in the clear, in order to
receive the benefit of the optimization. Many content owners will also
allow this, especially when serving publicly accessible content. However,
some content owners (financial institutions, for instance) may not ever
want to allow a proxy to view traffic in the clear, even if the end user
allowed it.

2)    Proxy says no: Enterprise anti-malware middleboxes do not want to
allow any traffic to pass into or out of the enterprise that cannot be
examined. In this case, a proxy wants to be able to inform the web server
that it will not pass traffic on to the end user that it cannot see.

3)    User/Admin says no: Of course, the obvious scenario is where the user
says no. In this case, we have no trusted proxy.

In order for #1 to be true, allowing a web server to always say no, the
proxy must not be able to run in stealth mode. In order for #2 to be true,
the proxy server must be able to pass an indicator to the web server that
it requires the ability to see all traffic.


The ideas in James’ Internet Draft Intra-connection
an opportunity for addressing these two problems. The proposed solution
consists of a) requiring trusted proxies to have their own point-to-point
HTTP2S session with the browser when processing traffic from an HTTP2S
content server and b) establishing an intra-connection, end-to-end, TLS
session using a NULL cipher (no encrypting but still authenticating and
data integrity checking) between browser and web server and using it to
send traffic through a trusted proxy. In this case, the traffic over the
air is encrypted by the point-to-point TLS sessions, while still being
viewable by the proxy, and, at the same time, the browser and web server
can authenticate and validate the integrity of the data and any node can
refuse participation.

The following diagram illustrates the idea:

Proxy                                       Server

|                                            |

    |                                            |

      | 1)Establish HTTP2S (HTTP2 over TLS) session
|                                            |


|                                            |

      | 2)CLIENT_HELLO over HTTP2S
|                                            |


|                                            |

      |                                             |      3)Establish
HTTP2S session            |


|                                            |

      |                                             |      4)Forward


      |                                             |

      |                                             |      5)SERVER_HELLO
over HTTP2S            |



      | 6)Forward SERVER_HELLO over HTTP2S
|                                            |


|                                            |

|                                            |

      | 7)Complete TLS negotiation, specifying a NULL cipher, across two
HTTP2S sessions         |


|                                            |

|                                            |

|                                            |

      | 8)Unencrypted HTTP2 traffic includes MACs for auth and integrity
validation              |


Note: the “===” lines indicate a message sent over the Intra-Connection
HTTPS stream, so these are over HTTP2, over the point-to-point TLS
sessions, but they travel end-to-end between browser and server.

Because the browser receives the web browser’s certificate in the
SERVER_HELLO in step 6, it will be able to authenticate the server the same
as it would if the trusted proxy were not present. This removes the problem
of transitive trust caused by MITM proxies. One can imagine the browser
displaying a double lock to indicate that both the proxy and the content
server have certificates that have been authenticated – of course the proxy
needs an additional layer of validation but again we will not go into that
here. The important point is that the proxy is not able to view the traffic
unless the browser trusts it and also unless the browser itself has
authenticated the web server’s cert with its own database of CAs.

Message integrity and authentication between browser and web server prevent
the proxy from operating in stealth mode, where its presence is
undetectable by the web server. The web server can thus refuse to take part
in the trusted proxy session on a per object basis. For instance, requests
for the logo of a financial institution might be allowed to be viewed by a
proxy, but requests for sensitive financial information might be refused. This
is what really separates the proposal from simply standardizing MITM
because it means the web server will always be aware of the presence of the
proxy and because, if it decides to, it can say no. I think this is a
powerful feature and one that legitimate middleboxes should also be in
favor of, as it allows them to express their intention in an above board
way (I would like to optimize this traffic or I must see this traffic in
order to scan it for malware) and to be distinguished from rogue MITMs.

Additionally, the browser will always know when an object was manufactured
by the proxy and it can decide whether or not it wants to use it. For
instance, a proxy might send the browser a cached copy of an object the
browser requested. This cached copy will not contain the MAC proving that
it was generated by the web server so the browser will need to make the
decision whether or not to use this object. Again, in many cases the
browser will agree to because it provides a benefit to the end user.

Lastly, and this is not illustrated in the above drawing, the proxy can
flag the TLS data frames it uploads to the web server to indicate whether
or not it will allow encrypted responses. If not, as might be the case for
a security, malware-detecting appliance, then the web server can decide
whether or not it wants to send the data in a way that the proxy can see.
And, if not, then the user can be messaged that the site is not viewable
with appropriate messaging.
Received on Tuesday, 26 November 2013 22:30:13 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 1 March 2016 11:11:20 UTC