home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 April / PCWorld_2001-04_cd.bin / Software / TemaCD / webclean / draft-luotonen-web-proxy-tunneling-01.txt next >
Text File  |  2000-12-15  |  20KB  |  502 lines

  1. INTERNET-DRAFT                                              Ari Luotonen
  2. Expires: February 1999               Netscape Communications Corporation
  3. <draft-luotonen-web-proxy-tunneling-01.txt>                  August 1998
  4.  
  5.  
  6.         Tunneling TCP based protocols through Web proxy servers
  7.  
  8.  
  9. Status of this Memo
  10.  
  11.    This document is an Internet-Draft.  Internet-Drafts are working
  12.    documents of the Internet Engineering Task Force (IETF), its areas,
  13.    and its working groups.  Note that other groups may also distribute
  14.    working documents as Internet-Drafts.
  15.  
  16.    Internet-Drafts are draft documents valid for a maximum of six months
  17.    and may be updated, replaced, or obsoleted by other documents at any
  18.    time.  It is inappropriate to use Internet-Drafts as reference
  19.    material or to cite them other than as ``work in progress.''
  20.  
  21.    To learn the current status of any Internet-Draft, please check the
  22.    ``1id-abstracts.txt'' listing contained in the Internet-Drafts Shadow
  23.    Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe),
  24.    munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or
  25.    ftp.isi.edu (US West Coast).
  26.  
  27.    Currently, this draft is stable and only waiting for its referenced
  28.    documents to become RFC's, so this draft can become an RFC as well.
  29.  
  30.  
  31. Abstract
  32.  
  33.    This document specifies a generic tunneling mechanism for TCP based
  34.    protocols through Web proxy servers.  This tunneling mechanism was
  35.    initially introduced for the SSL protocol [SSL] to allow secure Web
  36.    traffic to pass through firewalls, but its utility is not limited to
  37.    SSL.  Earlier drafts of this specification were titled "Tunneling SSL
  38.    through Web Proxy Servers" <draft-luotonen-ssl-tunneling-XX.txt>.
  39.    Implementations of this tunneling feature are commonly referred to as
  40.    "SSL tunneling", although, again, it can be used for tunneling any
  41.    TCP based protocol.
  42.  
  43.    A wide variety of existing client and proxy server implementations
  44.    conform to this specification.  The purpose of this specification is
  45.    to describe the current practice, to propose some good practices for
  46.    implementing this specification, and to document the security
  47.    considerations that are involved with this protocol.
  48.  
  49.  
  50.  
  51.  
  52. Luotonen                                                        [Page 1]
  53.  
  54. TCP PROTOCOL TUNNELING IN WEB PROXY SERVERS INTERNET-DRAFT   August 1998
  55.  
  56.  
  57. Table of Contents
  58.  
  59.      1.  Overview ................................................. 2
  60.      2.  General Considerations ................................... 3
  61.      3.  Functional Specification ................................. 3
  62.      3.1.  Request ................................................ 3
  63.      3.2.  Proxy Response ......................................... 4
  64.      3.2.1.  Response Content-Type Field .......................... 5
  65.      3.3.  Data Pipelining ........................................ 6
  66.      4.  Extensibility ............................................ 7
  67.      5.  Multiple Proxy Servers ................................... 7
  68.      6.  Security Considerations .................................. 8
  69.      7.  References ............................................... 8
  70.      8.  Author's Address ......................................... 9
  71.  
  72.  
  73. 1. Overview
  74.  
  75.    The wide success of the SSL (Secure Sockets Layer) protocol made it
  76.    vital for Web proxy servers to be able to tunnel requests performed
  77.    over SSL.  The easiest, and perhaps the most elegant, way to
  78.    accomplish this is to extend the HTTP/1.x protocol [HTTP/1.0,
  79.    HTTP/1.1] in such a way that it will be able to intiate a tunnel
  80.    through the proxy server.
  81.  
  82.    This document specifies the HTTP/1.x extension to implement the
  83.    generic TCP protocol tunneling on Web proxy servers.  This extension
  84.    may be used between clients and proxy servers, and between two
  85.    proxies (in the case of daisy-chained proxies -- proxies that contact
  86.    other proxies to perform requests).  This document focuses on the
  87.    differences and additions to HTTP/1.x; refer to the HTTP/1.x
  88.    specifications for a full specification of HTTP/1.x.
  89.  
  90.    Note that the HTTPS protocol, which is just HTTP on top of SSL, could
  91.    alternatively be proxied in the same way that other protocols are
  92.    handled by the proxies: to have the proxy (instead of the client)
  93.    initiate the secure session with the remote HTTPS server, and then
  94.    perform the HTTPS transaction on the client's part.  The response
  95.    will be received and decrypted by the proxy, and sent to the client
  96.    over (insecure) HTTP.  This is the way FTP and Gopher get handled by
  97.    proxies.  However, this approach has several disadvantages and
  98.    complications:
  99.  
  100.      * The connection between the client and the proxy is normal HTTP,
  101.        and hence, not secure.  This may, however, often be acceptable if
  102.        the clients are in a trusted subnetwork (behind a firewall).
  103.  
  104.      * The proxy will need to have full SSL implementation incorporated
  105.  
  106.  
  107.  
  108. Luotonen                                                        [Page 2]
  109.  
  110. TCP PROTOCOL TUNNELING IN WEB PROXY SERVERS INTERNET-DRAFT   August 1998
  111.  
  112.  
  113.        into it -- something this tunneling mechanism does not require.
  114.  
  115.      * The client will not be able to perform SSL client authentication
  116.        (authentication based on X509 certificates) to the remote server,
  117.        as the proxy will be the authenticated party.  Future versions of
  118.        SSL may, however, provide such delegated authentication.
  119.  
  120.    This specification defines a tunneling mechanism for Web proxy
  121.    servers.  This mechanism is compatible with HTTP/1.x protocol, which
  122.    is currently being used by Web proxies.
  123.  
  124.    Note that this mechanism, if used for SSL tunneling, does not require
  125.    an implementation of SSL in the proxy.  The SSL session is
  126.    established between the client generating the request, and the
  127.    destination (secure) Web server; the proxy server in between is
  128.    merely tunneling the encrypted data, and does not take any other part
  129.    in the secure transaction.
  130.  
  131.  
  132. 2. General Considerations with Respect to SSL Tunneling
  133.  
  134.    When tunneling SSL, the proxy must not have access to the data being
  135.    transferred in either direction, for the sake of security.  The proxy
  136.    merely knows the source and destination addresses, and possibly, if
  137.    the proxy supports user authentication, the name of the requesting
  138.    user.
  139.  
  140.    In other words, there is a handshake between the client and the proxy
  141.    to establish the connection between the client and the remote server
  142.    through the proxy.  In order to make this extension be backward
  143.    compatible, the handshake must be in the same format as HTTP/1.x
  144.    requests, so that proxies without support for this feature can still
  145.    cleanly determine the request as impossible for them to service, and
  146.    give proper error responses (rather than e.g. get hung on the
  147.    connection).
  148.  
  149.  
  150. 3. Functional Specification
  151.  
  152.  
  153.  
  154. 3.1. Request
  155.  
  156.    The client connects to the proxy server, and uses the CONNECT method
  157.    to specify the hostname and the port number to connect to.  The
  158.    hostname and port number are separated by a colon, and both of them
  159.    must be specified.
  160.  
  161.  
  162.  
  163.  
  164. Luotonen                                                        [Page 3]
  165.  
  166. TCP PROTOCOL TUNNELING IN WEB PROXY SERVERS INTERNET-DRAFT   August 1998
  167.  
  168.  
  169.    The host:port part is followed by a space and a string specifying the
  170.    HTTP version number, e.g. HTTP/1.0, and the line terminator (CR LF
  171.    pair.  Note that some applications may use just a LF on its own, and
  172.    it is recommended that applications be tolerant of this behavior.
  173.    When this document refers to CR LF pair, in all cases should a LF on
  174.    its own be treated the same as a CR LF pair).
  175.  
  176.    After that there is a series of zero or more of HTTP request header
  177.    lines, followed by an empty line.  Each of those header lines is also
  178.    terminated by the CR LF pair.  The empty line is simply another CR LF
  179.    pair.
  180.  
  181.    After the empty line, if the handshake to establish the connection
  182.    was successful, the tunnelled (SSL or other) data transfer can begin.
  183.    Before the tunneling begins, the proxy will respond, as described in
  184.    the next section (Section 3.2).
  185.  
  186.    Example of an SSL tunneling request to host home.netscape.com, to
  187.    HTTPS port (443):
  188.  
  189.          CONNECT home.netscape.com:443 HTTP/1.0
  190.          User-agent: Mozilla/4.0
  191.  
  192.          ...data to be tunnelled to the server...
  193.  
  194.    Note that the "...data to be tunnelled to the server..." is not a
  195.    part of the request.  It is shown here only to make the point that
  196.    once the tunnel is established, the same connection is used for
  197.    transferring the data that is to be tunnelled.
  198.  
  199.    The advantage of extending the HTTP/1.x protocol in this manner (a
  200.    new method) is that this protocol is freely extensible just like
  201.    HTTP/1.x is.  For example, the proxy authentication may be used just
  202.    like with any other request to the proxy:
  203.  
  204.          CONNECT home.netscape.com:443 HTTP/1.0
  205.          User-agent: Mozilla/4.0
  206.          Proxy-authorization: basic dGVzdDp0ZXN0
  207.  
  208.          ...data to be tunnelled to the server...
  209.  
  210.  
  211. 3.2. Proxy Response
  212.  
  213.    After the empty line in the request, the client will wait for a
  214.    response from the proxy.  The proxy will evaluate the request, make
  215.    sure that it is valid, and that the user is authorized to request
  216.    such a connection.  If everything is in order, the proxy will make a
  217.  
  218.  
  219.  
  220. Luotonen                                                        [Page 4]
  221.  
  222. TCP PROTOCOL TUNNELING IN WEB PROXY SERVERS INTERNET-DRAFT   August 1998
  223.  
  224.  
  225.    connection to the destination server, and, if successful, send a "200
  226.    Connection established" response to the client.  Again, the response
  227.    follows the HTTP/1.x protocol, so the response line starts with the
  228.    protocol version specifier, and the response line is followed by zero
  229.    or more response headers, followed by an empty line.  The line
  230.    separator is CR LF pair.
  231.  
  232.    Example of a response:
  233.  
  234.          HTTP/1.0 200 Connection established
  235.          Proxy-agent: Netscape-Proxy/1.1
  236.  
  237.          ...data tunnelled from the server...
  238.  
  239.    After the empty line, the proxy will start passing data from the
  240.    client connection to the remote server connection, and vice versa.
  241.    At any time, there may be data coming from either connection, and
  242.    that data must be forwarded to the other connection immediately.
  243.  
  244.    Note that since the tunnelled protocol is opaque to the proxy server,
  245.    the proxy cannot make any assumptions about which connection the
  246.    first, or any subsequent, packets will arrive.  In other words, the
  247.    proxy server must be prepared to accept packets from either of the
  248.    connections at any time.  Otherwise, a deadlock may occur.
  249.  
  250.    If at any point either one of the peers gets disconnected, any
  251.    outstanding data that came from that peer will be passed to the other
  252.    one, and after that also the other connection will be terminated by
  253.    the proxy.  If there is outstanding data to that peer undelivered,
  254.    that data will be discarded.
  255.  
  256.  
  257.    An example of a tunneling request/response in an interleaved
  258.    multicolumn format:
  259.  
  260.      CLIENT -> SERVER                        SERVER -> CLIENT
  261.      --------------------------------------  -----------------------------------
  262.      CONNECT home.netscape.com:443 HTTP/1.0
  263.      User-agent: Mozilla/4.0
  264.      <<< empty line >>>
  265.                                              HTTP/1.0 200 Connection established
  266.                                              Proxy-agent: Netscape-Proxy/1.1
  267.                                              <<< empty line >>>
  268.                   <<< data tunneling to both directions begins >>>
  269.  
  270.  
  271. 3.2.1. Response Content-Type Field
  272.  
  273.  
  274.  
  275.  
  276. Luotonen                                                        [Page 5]
  277.  
  278. TCP PROTOCOL TUNNELING IN WEB PROXY SERVERS INTERNET-DRAFT   August 1998
  279.  
  280.  
  281.    The proxy response does not necessarily have a Content-Type field,
  282.    which is otherwise mandatory in HTTP/1.x responses.  Currently there
  283.    is no content media type assigned to a tunnel.  Future versions of
  284.    this specification may introduce a standard media type, for example
  285.    "application/tunnel".  For forward compatibility, a Content-type
  286.    field should be allowed, but for backward compatibitity, one should
  287.    not be required by clients.
  288.  
  289.  
  290. 3.3. Data Pipelining
  291.  
  292.    It is legal for the client to send some data intended for the server
  293.    before the "200 Connection established" (or any other success or
  294.    error code) is received.  This allows for reduced latency and
  295.    increased efficiency when any handshake data intended for the remote
  296.    server can be sent in the same TCP packet as the proxy request.  This
  297.    allows the proxy to immediately forward the data once the connection
  298.    to the remote server is established, without waiting for two round-
  299.    trip times to the client (sending 200 to client; waiting for the next
  300.    packet from client).
  301.  
  302.    This means that the proxy server cannot assume that reading from the
  303.    client socket descriptor would only return the proxy request.
  304.    Rather, there may be any amount of opaque data following the proxy
  305.    request that must be forwarded to the server once the connection is
  306.    established.  However, if the connection to the remote server fails,
  307.    or if it is disallowed by the proxy server, the data intended to the
  308.    remote server will be discarded by the proxy.
  309.  
  310.    At the same time this means that a client pipelining data intended
  311.    for the remote server immediately after sending the proxy request (or
  312.    in the same packet), must be prepared to re-issue the request and
  313.    re-compose any data that it had already sent, in case the proxy fails
  314.    the request, or challenges the client for authentication credentials.
  315.    This is due to the fact that HTTP by its nature may require the
  316.    request to be re-issued, accompanied by authentication credentials or
  317.    other data that was either missing or invalid in the original
  318.    request.
  319.  
  320.    Note that it is not recommended to pipeline more data than the amount
  321.    that can fit to the remainder of the TCP packet that the proxy
  322.    request is in.  Pipelining more data can cause a TCP reset if the
  323.    proxy fails or challenges the request, and subsequently closes the
  324.    connection before all pipelined TCP packets are received by the proxy
  325.    server host.  A TCP reset will cause the proxy server's response to
  326.    be discarded, and not be available to the client -- thus being unable
  327.    to determine whether the failure was due to a network error, access
  328.    control, or an authentication challenge.
  329.  
  330.  
  331.  
  332. Luotonen                                                        [Page 6]
  333.  
  334. TCP PROTOCOL TUNNELING IN WEB PROXY SERVERS INTERNET-DRAFT   August 1998
  335.  
  336.  
  337. 4. Extensibility
  338.  
  339.    The tunneling handshake is freely extensible using the HTTP/1.x
  340.    headers; as an example, to enforce authentication for the proxy the
  341.    proxy will simply use the 407 status code and the Proxy-authenticate
  342.    response header (as defined by the HTTP/1.x specification) to ask the
  343.    client to send authentication information:
  344.  
  345.          HTTP/1.0 407 Proxy authentication required
  346.          Proxy-authenticate: ...
  347.  
  348.  
  349.    The client would then reperform the request, and send the
  350.    authentication information in the Proxy-authorization header:
  351.  
  352.          CONNECT home.netscape.com:443 HTTP/1.0
  353.          User-agent: ...
  354.          Proxy-authorization: ...
  355.  
  356.          ...data to be tunnelled to the server...
  357.  
  358.  
  359.    The full example displayed in an interleaved multicolumn format:
  360.  
  361.      CLIENT -> SERVER                        SERVER -> CLIENT
  362.      --------------------------------------  -----------------------------------
  363.      CONNECT home.netscape.com:443 HTTP/1.0
  364.      User-agent: Mozilla/4.0
  365.      <<< empty line >>>
  366.                                              HTTP/1.0 407 Proxy auth required
  367.                                              Proxy-agent: Netscape-Proxy/1.1
  368.                                              Proxy-authenticate: ...
  369.                                              <<< empty line >>>
  370.      CONNECT home.netscape.com:443 HTTP/1.0
  371.      User-agent: Mozilla/4.0
  372.      Proxy-authorization: ...
  373.      <<< empty line >>>
  374.                                              HTTP/1.0 200 Connection established
  375.                                              Proxy-agent: Netscape-Proxy/1.1
  376.                                              <<< empty line >>>
  377.                   <<< data tunneling to both directions begins >>>
  378.  
  379.  
  380. 5. Multiple Proxy Servers
  381.  
  382.    This specification applies equally to proxy servers talking to other
  383.    proxy servers.  As an example, double firewalls make this necessary.
  384.    In this case, the inner proxy is simply considered a client with
  385.  
  386.  
  387.  
  388. Luotonen                                                        [Page 7]
  389.  
  390. TCP PROTOCOL TUNNELING IN WEB PROXY SERVERS INTERNET-DRAFT   August 1998
  391.  
  392.  
  393.    respect to the outer proxy.
  394.  
  395.  
  396. 6. Security Considerations
  397.  
  398.    The CONNECT tunneling mechanism is really a lower-level function than
  399.    the rest of the HTTP methods, kind of an escape mechanism for saying
  400.    that the proxy should not interfere with the transaction, but merely
  401.    forward the data.  In the case of SSL tunneling, this is because the
  402.    proxy should not need to know the entire URI that is being accessed
  403.    (privacy, security), only the information that it explicitly needs
  404.    (hostname and port number) in order to carry out its part.
  405.  
  406.    Due to this fact, the proxy cannot necessarily verify that the
  407.    protocol being spoken is really what it is supposed to tunnel (SSL
  408.    for example), and so the proxy configuration should explicitly limit
  409.    allowed connections to well-known ports for that protocol (such as
  410.    443 for HTTPS, 563 for SNEWS, as assigned by IANA, the Internet
  411.    Assigned Numbers Authority).
  412.  
  413.    Ports of specific concern are such as the telnet port (port 23), SMTP
  414.    port (port 25) and many UNIX specific service ports (range 512-600).
  415.    Allowing such tunnelled connections to e.g. the SMTP port might
  416.    enable sending of uncontrolled E-mail ("spam").
  417.  
  418.  
  419. 7. References
  420.  
  421.    [HTTP/1.0] T. Berners-Lee, R. Fielding, and H. Frystyk.
  422.               Hypertext Transfer Protocol -- HTTP/1.0.
  423.               RFC 1945, MIT/LCS, UC Irvine, May 1996.
  424.  
  425.    [HTTP/1.1] R. Fielding, J. Gettys, J. C. Mogul, H. Frystyk, and
  426.               T. Berners-Lee.  Hypertext Transfer Protocol -- HTTP/1.1.
  427.               RFC 2068, UC Irvine, DEC, MIT/LCS, January, 1997.
  428.  
  429.    [TLS]      T. Dierks, C. Allen, A. O. Freier, P. L. Karlton, and P. Kocher.
  430.               The TLS (Transport Layer Security) Protocol.
  431.               Internet-Draft draft-ietf-tls-protocol-05.txt,
  432.               Consensus Development, Netscape Communications,
  433.               November 12, 1997.
  434.  
  435.    [SSL]      K. Hickman, T. Elgamal, "The SSL Protocol",
  436.               draft-hickman-netscape-ssl-01.txt, Netscape Communications
  437.               Corporation, June 1995.
  438.  
  439.    [SSL3]     A. O. Freier, P. Karlton, Paul C. Kocher,
  440.               "The SSL Protocol -- Version 3.0",
  441.  
  442.  
  443.  
  444. Luotonen                                                        [Page 8]
  445.  
  446. TCP PROTOCOL TUNNELING IN WEB PROXY SERVERS INTERNET-DRAFT   August 1998
  447.  
  448.  
  449.               draft-ietf-tls-ssl-version3-00.txt, November 18, 1996.
  450.  
  451. 8. Author's Address:
  452.  
  453.    Ari Luotonen                                       <ari@netscape.com>
  454.    Mail-Stop MV-068
  455.    Netscape Communications Corporation
  456.    501 East Middlefield Road
  457.    Mountain View, CA 94043
  458.    USA
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498.  
  499.  
  500. Luotonen                                                        [Page 9]
  501.  
  502.