rfc1961.txt
上传用户:sddyfurun
上传日期:2007-01-04
资源大小:525k
文件大小:16k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. rfc1961
  2. Press here to go to the top of the rfc 'tree'.
  3. Network Working Group                                         P. McMahon
  4. Request for Comments: 1961                                           ICL
  5. Category: Standards Track                                      June 1996
  6.            GSS-API Authentication Method for SOCKS Version 5
  7. Status of this Memo
  8.    This document specifies an Internet standards track protocol for the
  9.    Internet community, and requests discussion and suggestions for
  10.    improvements.  Please refer to the current edition of the "Internet
  11.    Official Protocol Standards" (STD 1) for the standardization state
  12.    and status of this protocol.  Distribution of this memo is unlimited.
  13. Table of Contents
  14.          1. Purpose ............................................ 1
  15.          2. Introduction ....................................... 1
  16.          3. GSS-API Security Context Establishment ............. 2
  17.          4. GSS-API Protection-level Options ................... 5
  18.          5. GSS-API Per-message Protection ..................... 7
  19.          6. GSS-API Security Context Termination ............... 8
  20.          7. References ......................................... 8
  21.          8. Acknowledgments .................................... 8
  22.          9. Security Considerations ............................ 8
  23.          10. Author's Address .................................. 9
  24. 1. Purpose
  25.    The protocol specification for SOCKS Version 5 specifies a
  26.    generalized framework for the use of arbitrary authentication
  27.    protocols in the initial SOCKS connection setup.  This document
  28.    provides the specification for the SOCKS V5 GSS-API authentication
  29.    protocol, and defines a GSS-API-based encapsulation for provision of
  30.    integrity, authentication and optional confidentiality.
  31. 2. Introduction
  32.    GSS-API provides an abstract interface which provides security
  33.    services for use in distributed applications, but isolates callers
  34.    from specific security mechanisms and implementations.
  35.    GSS-API peers achieve interoperability by establishing a common
  36.    security mechanism for security context establishment - either
  37.    through administrative action, or through negotiation.  GSS-API is
  38.    specified in [RFC 1508], and [RFC 1509].  This specification is
  39.    intended for use with implementations of GSS-API, and the emerging
  40. McMahon                     Standards Track                     [Page 1]
  41. RFC 1961          GSS-API Authentication for SOCKS V5          June 1996
  42.    GSS-API V2 specification.
  43.    The approach for use of GSS-API in SOCKS V5 is to authenticate the
  44.    client and server by successfully establishing a GSS-API security
  45.    context - such that the GSS-API encapsulates any negotiation protocol
  46.    for mechanism selection, and the agreement of security service
  47.    options.
  48.    The GSS-API enables the context initiator to know what security
  49.    services the target supports for the chosen mechanism.  The required
  50.    level of protection is then agreed by negotiation.
  51.    The GSS-API per-message protection calls are subsequently used to
  52.    encapsulate any further TCP and UDP traffic between client and
  53.    server.
  54. 3. GSS-API Security Context Establishment
  55. 3.1 Preparation
  56.    Prior to use of GSS-API primitives, the client and server should be
  57.    locally authenticated, and have established default GSS-API
  58.    credentials.
  59.    The client should call gss_import_name to obtain an internal
  60.    representation of the server name.  For maximal portability the
  61.    default name_type GSS_C_NULL_OID should be used to specify the
  62.    default name space, and the input name_string should treated by the
  63.    client's code as an opaque name-space specific input.
  64.    For example, when using Kerberos V5 naming, the imported name may be
  65.    of the form "SERVICE:socks@socks_server_hostname" where
  66.    "socks_server_hostname" is the fully qualified host name of the
  67.    server with all letters in lower case. Other mechanisms may, however,
  68.    have different name forms, so the client should not make assumptions
  69.    about the name syntax.
  70. 3.2 Client Context Establishment
  71.    The client should then call gss_init_sec_context, typically passing:
  72.          GSS_C_NO_CREDENTIAL into cred_handle to specify the default
  73.          credential (for initiator usage),
  74.          GSS_C_NULL_OID into mech_type to specify the default
  75.          mechanism,
  76. McMahon                     Standards Track                     [Page 2]
  77. RFC 1961          GSS-API Authentication for SOCKS V5          June 1996
  78.          GSS_C_NO_CONTEXT into context_handle to specify a NULL
  79.          context (initially), and,
  80.          the previously imported server name into target_name.
  81.    The client must also specify its requirements for replay protection,
  82.    delegation, and sequence protection via the gss_init_sec_context
  83.    req_flags parameter.  It is required by this specification that the
  84.    client always requests these service options (i.e. passes
  85.    GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_DELEG_FLAG |
  86.    GSS_C_SEQUENCE_FLAG into req_flags).
  87.    However, GSS_C_SEQUENCE_FLAG should only be passed in for TCP-based
  88.    clients, not for UDP-based clients.
  89. 3.3 Client Context Establishment Major Status codes
  90.    The gss_init_sec_context returned status code can take two different
  91.    success values:
  92.     - If gss_init_sec_context returns GSS_S_CONTINUE_NEEDED, then the
  93.       client should expect the server to issue a token in the
  94.       subsequent subnegotiation response.  The client must pass the
  95.       token to another call to gss_init_sec_context, and repeat this
  96.       procedure until "continue" operations are complete.
  97.     - If gss_init_sec_context returns GSS_S_COMPLETE, then the client
  98.       should respond to the server with any resulting output_token.
  99.       If there is no output_token, the client should proceed to send
  100.       the protected request details, including any required message
  101.       protection subnegotiation as specified in sections 4 and 5
  102.       below.
  103. 3.4 Client initial token
  104.    The client's GSS-API implementation then typically responds with the
  105.    resulting output_token which the client sends in a message to the
  106.    server.
  107.     +------+------+------+.......................+
  108.     + ver  | mtyp | len  |       token           |
  109.     +------+------+------+.......................+
  110.     + 0x01 | 0x01 | 0x02 | up to 2^16 - 1 octets |
  111.     +------+------+------+.......................+
  112. McMahon                     Standards Track                     [Page 3]
  113. RFC 1961          GSS-API Authentication for SOCKS V5          June 1996
  114.     Where:
  115.     - "ver" is the protocol version number, here 1 to represent the
  116.       first version of the SOCKS/GSS-API protocol
  117.     - "mtyp" is the message type, here 1 to represent an
  118.       authentication message
  119.     - "len" is the length of the "token" field in octets
  120.     - "token" is the opaque authentication token emitted by GSS-API
  121. 3.5 Client GSS-API Initialisation Failure
  122.    If, however, the client's GSS-API implementation failed during
  123.    gss_init_sec_context, the client must close its connection to the
  124.    server.
  125. 3.6 Server Context Establishment
  126.    For the case where a client successfully sends a token emitted by
  127.    gss_init_sec_context() to the server, the server must pass the
  128.    client-supplied token to gss_accept_sec_context as input_token.
  129.    When calling gss_accept_sec_context() for the first time, the
  130.    context_handle argument is initially set to GSS_C_NO_CONTEXT.
  131.    For portability, verifier_cred_handle is set to GSS_C_NO_CREDENTIAL
  132.    to specify default credentials (for acceptor usage).
  133.    If gss_accept_sec_context returns GSS_CONTINUE_NEEDED, the server
  134.    should return the generated output_token to the client, and
  135.    subsequently pass the resulting client supplied token to another call
  136.    to gss_accept_sec_context.
  137.    If gss_accept_sec_context returns GSS_S_COMPLETE, then, if an
  138.    output_token is returned, the server should return it to the client.
  139.    If no token is returned, a zero length token should be sent by the
  140.    server to signal to the client that it is ready to receive the
  141.    client's request.
  142. McMahon                     Standards Track                     [Page 4]
  143. RFC 1961          GSS-API Authentication for SOCKS V5          June 1996
  144. 3.7 Server Reply
  145.    In all continue/confirmation cases, the server uses the same message
  146.    type as for the client -> server interaction.
  147.     +------+------+------+.......................+
  148.     + ver  | mtyp | len  |       token           |
  149.     +------+------+------+.......................+
  150.     + 0x01 | 0x01 | 0x02 | up to 2^16 - 1 octets |
  151.     +------+------+------+.......................+
  152. 3.8 Security Context Failure
  153.    If the server refuses the client's connection for any reason (GSS-API
  154.    authentication failure or otherwise), it will return:
  155.     +------+------+
  156.     + ver  | mtyp |
  157.     +------+------+
  158.     + 0x01 | 0xff |
  159.     +------+------+
  160.     Where:
  161.     - "ver" is the protocol version number, here 1 to represent the
  162.       first version of the SOCKS/GSS-API protocol
  163.     - "mtyp" is the message type, here 0xff to represent an abort
  164.       message
  165. 4. GSS-API Protection-level Options
  166. 4.1 Message protection
  167.    Establishment of a GSS-API security context enables comunicating
  168.    peers to determine which per-message protection services are
  169.    available to them through the gss_init_sec_context() and
  170.    gss_accept_sec_context() ret_flags GSS_C_INTEG_FLAG and
  171.    GSS_C_CONF_FLAG which respectively indicate message integrity and
  172.    confidentiality services.
  173.    It is necessary to ensure that the message protection applied to the
  174.    traffic is appropriate to the sensitivity of the data, and the
  175.    severity of the threats.
  176. McMahon                     Standards Track                     [Page 5]
  177. RFC 1961          GSS-API Authentication for SOCKS V5          June 1996
  178. 4.2 Message Protection Subnegotiation
  179.    For TCP and UDP clients and servers, different levels of protection
  180.    are possible in the SOCKS V5 protocol, so an additional
  181.    subnegotiation stage is needed to agree the message protection level.
  182.    After successful completion of this subnegotiation, TCP and UDP
  183.    clients and servers use GSS-API encapsulation as defined in section
  184.    5.1.
  185.    After successful establishment of a GSS-API security context, the
  186.    client's GSS-API implementation sends its required security context
  187.    protection level to the server.  The server then returns the security
  188.    context protection level which it agrees to - which may or may not
  189.    take the the client's request into account.
  190.    The security context protection level sent by client and server must
  191.    be one of the following values:
  192.          1 required per-message integrity
  193.          2 required per-message integrity and confidentiality
  194.          3 selective per-message integrity or confidentiality based on
  195.            local client and server configurations
  196.    It is anticipated that most implementations will agree on level 1 or
  197.    2 due to the practical difficulties in applying selective controls to
  198.    messages passed through a socks library.
  199. 4.3 Message Protection Subnegotiation Message Format
  200.    The security context protection level is sent from client to server
  201.    and vice versa using the following protected message format:
  202.     +------+------+------+.......................+
  203.     + ver  | mtyp | len  |   token               |
  204.     +------+------+------+.......................+
  205.     + 0x01 | 0x02 | 0x02 | up to 2^16 - 1 octets |
  206.     +------+------+------+.......................+
  207.     Where:
  208.     - "ver" is the protocol version number, here 1 to represent the
  209.       first version of the SOCKS/GSS-API protocol
  210.     - "mtyp" is the message type, here 2 to represent a protection
  211.       -level negotiation message
  212.     - "len" is the length of the "token" field in octets
  213. McMahon                     Standards Track                     [Page 6]
  214. RFC 1961          GSS-API Authentication for SOCKS V5          June 1996
  215.     - "token" is the GSS-API encapsulated protection level
  216. 4.4 Message Protection Subnegotiation Message Generation
  217.    The token is produced by encapsulating an octet containing the
  218.    required protection level using gss_seal()/gss_wrap() with conf_req
  219.    set to FALSE.  The token is verified using gss_unseal()/
  220.    gss_unwrap().
  221.    If the server's choice of protection level is unacceptable to the
  222.    client, then the client must close its connection to the server
  223. 5. GSS-API Per-message Protection
  224.    For TCP and UDP clients and servers, the GSS-API functions for
  225.    encapsulation and de-encapsulation shall be used by implementations -
  226.    i.e. gss_seal()/gss_wrap(), and gss_unseal()/ gss_unwrap().
  227.    The default value of quality of protection shall be specified, and
  228.    the use of conf_req_flag shall be as determined by the previous
  229.    subnegotiation step.  If protection level 1 is agreed then
  230.    conf_req_flag MUST always be FALSE; if protection level 2 is agreed
  231.    then conf_req_flag MUST always be TRUE; and if protection level 3 is
  232.    agreed then conf_req is determined on a per-message basis by client
  233.    and server using local configuration.
  234.    All encapsulated messages are prefixed by the following framing:
  235.     +------+------+------+.......................+
  236.     + ver  | mtyp | len  |       token           |
  237.     +------+------+------+.......................+
  238.     + 0x01 | 0x03 | 0x02 | up to 2^16 - 1 octets |
  239.     +------+------+------+.......................+
  240.     Where:
  241.     - "ver" is the protocol version number, here 1 to represent the
  242.       first version of the SOCKS/GSS-API protocol
  243.     - "mtyp" is the message type, here 3 to represent encapulated user
  244.       data
  245.     - "len" is the length of the "token" field in octets
  246.     - "token" is the user data encapsulated by GSS-API
  247. McMahon                     Standards Track                     [Page 7]
  248. RFC 1961          GSS-API Authentication for SOCKS V5          June 1996
  249. 6. GSS-API Security Context Termination
  250.    The GSS-API context termination message (emitted by
  251.    gss_delete_sec_context) is not used by this protocol.
  252.    When the connection is closed, each peer invokes
  253.    gss_delete_sec_context() passing GSS_C_NO_BUFFER into the
  254.    output_token argument.
  255. 7. References
  256.     [RFC 1508] Linn, J., "Generic Security Service API",
  257.                September 1993.
  258.     [RFC 1509] Wray, J., "Generic Security Service API : C-bindings",
  259.                September 1993.
  260.     [SOCKS V5] Leech, M., Ganis, M., Lee, Y., Kuris, R., Koblas, D.,
  261.                and L. Jones, "SOCKS Protocol V5", RFC 1928, April
  262.                1996.
  263. 8. Acknowledgment
  264.    This document builds from a previous memo produced by Marcus Leech
  265.    (BNR) - whose comments are gratefully acknowleged.  It also reflects
  266.    input from the AFT WG, and comments arising from implementation
  267.    experience by Xavier Gosselin (IUT Lyons).
  268. 9. Security Considerations
  269.    The security services provided through the GSS-API are entirely
  270.    dependent on the effectiveness of the underlying security mechanisms,
  271.    and the correctness of the implementation of the underlying
  272.    algorithms and protocols.
  273.    The user of a GSS-API service must ensure that the quality of
  274.    protection provided by the mechanism implementation is consistent
  275.    with their security policy.
  276.    In addition, where negotiation is supported under the GSS-API,
  277.    constraints on acceptable mechanisms may be imposed to ensure
  278.    suitability for application to authenticated firewall traversal.
  279. McMahon                     Standards Track                     [Page 8]
  280. RFC 1961          GSS-API Authentication for SOCKS V5          June 1996
  281. 10. Author's Address
  282.    P. V. McMahon
  283.    ICL Enterprises
  284.    Kings House
  285.    33 Kings Road
  286.    Reading, RG1 3PX
  287.    UK
  288.    EMail: p.v.mcmahon@rea0803.wins.icl.co.uk
  289.    Phone: +44 1734 634882
  290.    Fax:   +44 1734 855106
  291. McMahon                     Standards Track                     [Page 9]