1510 строки
46 KiB
Plaintext
1510 строки
46 KiB
Plaintext
|
|
|||
|
|
|||
|
Network Working Group J. Hutzelman
|
|||
|
Internet-Draft CMU
|
|||
|
Expires: August 31, 2003 J. Salowey
|
|||
|
Cisco Systems
|
|||
|
J. Galbraith
|
|||
|
Van Dyke Technologies, Inc.
|
|||
|
V. Welch
|
|||
|
U Chicago / ANL
|
|||
|
March 2, 2003
|
|||
|
|
|||
|
|
|||
|
GSSAPI Authentication and Key Exchange for the Secure Shell Protocol
|
|||
|
draft-ietf-secsh-gsskeyex-06
|
|||
|
|
|||
|
Status of this Memo
|
|||
|
|
|||
|
This document is an Internet-Draft and is in full conformance with
|
|||
|
all provisions of Section 10 of RFC2026.
|
|||
|
|
|||
|
Internet-Drafts are working documents of the Internet Engineering
|
|||
|
Task Force (IETF), its areas, and its working groups. Note that
|
|||
|
other groups may also distribute working documents as
|
|||
|
Internet-Drafts.
|
|||
|
|
|||
|
Internet-Drafts are draft documents valid for a maximum of six
|
|||
|
months and may be updated, replaced, or obsoleted by other documents
|
|||
|
at any time. It is inappropriate to use Internet-Drafts as reference
|
|||
|
material or to cite them other than as "work in progress."
|
|||
|
|
|||
|
The list of current Internet-Drafts can be accessed at
|
|||
|
http://www.ietf.org/ietf/1id-abstracts.txt.
|
|||
|
|
|||
|
The list of Internet-Draft Shadow Directories can be accessed at
|
|||
|
http://www.ietf.org/shadow.html.
|
|||
|
|
|||
|
This Internet-Draft will expire on August 31, 2003.
|
|||
|
|
|||
|
Copyright Notice
|
|||
|
|
|||
|
Copyright (C) The Internet Society (2003). All Rights Reserved.
|
|||
|
|
|||
|
Abstract
|
|||
|
|
|||
|
The Secure Shell protocol (SSH) is a protocol for secure remote
|
|||
|
login and other secure network services over an insecure network.
|
|||
|
|
|||
|
The Generic Security Service Application Program Interface (GSS-API)
|
|||
|
[2] provides security services to callers in a mechanism-independent
|
|||
|
fashion.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 1]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
This memo describes methods for using the GSS-API for authentication
|
|||
|
and key exchange in SSH. It defines an SSH user authentication
|
|||
|
method which uses a specified GSSAPI mechanism to authenticate a
|
|||
|
user, and a family of SSH key exchange methods which use GSSAPI to
|
|||
|
authenticate the Diffie-Hellman exchange described in [8].
|
|||
|
|
|||
|
This memo also defines a new host public key algorithm which can be
|
|||
|
used when no operations are needed using a host's public key, and a
|
|||
|
new user authentication method which allows an authorization name to
|
|||
|
be used in conjunction with any authentication which has already
|
|||
|
occurred as a side-effect of key exchange.
|
|||
|
|
|||
|
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
|||
|
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
|
|||
|
document are to be interpreted as described in [5].
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 2]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
1. Introduction
|
|||
|
|
|||
|
This document describes the methods used to perform key exchange and
|
|||
|
user authentication in the Secure Shell protocol using the GSSAPI.
|
|||
|
To do this, it defines a family of key exchange methods, two user
|
|||
|
authentication methods, and a new host key algorithm. These
|
|||
|
definitions allow any GSSAPI mechanism to be used with the Secure
|
|||
|
Shell protocol.
|
|||
|
|
|||
|
This document should be read only after reading the documents
|
|||
|
describing the SSH protocol architecture [6], transport layer
|
|||
|
protocol [8], and user authentication protocol [9]. This document
|
|||
|
freely uses terminology and notation from the architecture document
|
|||
|
without reference or further explanation.
|
|||
|
|
|||
|
1.1 SSH terminology
|
|||
|
|
|||
|
The data types used in the packets are defined in the SSH
|
|||
|
architecture document [6]. It is particularly important to note the
|
|||
|
definition of string allows binary content.
|
|||
|
|
|||
|
The SSH_MSG_USERAUTH_REQUEST packet refers to a service; this
|
|||
|
service name is an SSH service name, and has no relationship to
|
|||
|
GSSAPI service names. Currently, the only defined service name is
|
|||
|
"ssh-connection", which refers to the SSH connection protocol [7].
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 3]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
2. GSSAPI Authenticated Diffie-Hellman Key Exchange
|
|||
|
|
|||
|
This section defines a class of key exchange methods which combine
|
|||
|
the Diffie-Hellman key exchange from section 6 of [8] with mutual
|
|||
|
authentication using GSSAPI.
|
|||
|
|
|||
|
Since the GSSAPI key exchange methods described in this section do
|
|||
|
not require the use of public key signature or encryption
|
|||
|
algorithms, they MAY be used with any host key algorithm, including
|
|||
|
the "null" algorithm described in Section 5.
|
|||
|
|
|||
|
2.1 Generic GSSAPI Key Exchange
|
|||
|
|
|||
|
The following symbols are used in this description:
|
|||
|
|
|||
|
o C is the client, and S is the server
|
|||
|
|
|||
|
o p is a large safe prime, g is a generator for a subgroup of
|
|||
|
GF(p), and q is the order of the subgroup
|
|||
|
|
|||
|
o V_S is S's version string, and V_C is C's version string
|
|||
|
|
|||
|
o I_C is C's KEXINIT message, and I_S is S's KEXINIT message
|
|||
|
|
|||
|
1. C generates a random number x (1 < x < q) and computes e = g^x
|
|||
|
mod p.
|
|||
|
|
|||
|
2. C calls GSS_Init_sec_context, using the most recent reply token
|
|||
|
received from S during this exchange, if any. For this call,
|
|||
|
the client MUST set the mutual_req_flag to "true" to request
|
|||
|
that mutual authentication be performed. It also MUST set the
|
|||
|
integ_req_flag to "true" to request that per-message integrity
|
|||
|
protection be supported for this context. In addition, the
|
|||
|
deleg_req_flag MAY be set to "true" to request access
|
|||
|
delegation, if requested by the user. Since the key exchange
|
|||
|
process authenticates only the host, the setting of the
|
|||
|
anon_req_flag is immaterial to this process. If the client does
|
|||
|
not support the "external-keyx" user authentication method
|
|||
|
described in Section 4, or does not intend to use that method,
|
|||
|
then the anon_req_flag SHOULD be set to "true". Otherwise, this
|
|||
|
flag MAY be set to true if the client wishes to hide its
|
|||
|
identity.
|
|||
|
|
|||
|
* If the resulting major_status code is GSS_S_COMPLETE and the
|
|||
|
mutual_state flag is not true, then mutual authentication has
|
|||
|
not been established, and the key exchange MUST fail.
|
|||
|
|
|||
|
* If the resulting major_status code is GSS_S_COMPLETE and the
|
|||
|
integ_avail flag is not true, then per-message integrity
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 4]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
protection is not available, and the key exchange MUST fail.
|
|||
|
|
|||
|
* If the resulting major_status code is GSS_S_COMPLETE and both
|
|||
|
the mutual_state and integ_avail flags are true, the
|
|||
|
resulting output token is sent to S.
|
|||
|
|
|||
|
* If the resulting major_status code is GSS_S_CONTINUE_NEEDED,
|
|||
|
the the output_token is sent to S, which will reply with a
|
|||
|
new token to be provided to GSS_Init_sec_context.
|
|||
|
|
|||
|
* The client MUST also include "e" with the first message it
|
|||
|
sends to the server during this process; if the server
|
|||
|
receives more than one "e" or none at all, the key exchange
|
|||
|
fails.
|
|||
|
|
|||
|
* It is an error if the call does not produce a token of
|
|||
|
non-zero length to be sent to the server. In this case, the
|
|||
|
key exchange MUST fail.
|
|||
|
|
|||
|
3. S calls GSS_Accept_sec_context, using the token received from C.
|
|||
|
|
|||
|
* If the resulting major_status code is GSS_S_COMPLETE and the
|
|||
|
mutual_state flag is not true, then mutual authentication has
|
|||
|
not been established, and the key exchange MUST fail.
|
|||
|
|
|||
|
* If the resulting major_status code is GSS_S_COMPLETE and the
|
|||
|
integ_avail flag is not true, then per-message integrity
|
|||
|
protection is not available, and the key exchange MUST fail.
|
|||
|
|
|||
|
* If the resulting major_status code is GSS_S_COMPLETE and both
|
|||
|
the mutual_state and integ_avail flags are true, then the
|
|||
|
security context has been established, and processing
|
|||
|
continues with step 4.
|
|||
|
|
|||
|
* If the resulting major_status code is GSS_S_CONTINUE_NEEDED,
|
|||
|
then the output token is sent to C, and processing continues
|
|||
|
with step 2.
|
|||
|
|
|||
|
* If the resulting major_status code is GSS_S_COMPLETE, but a
|
|||
|
non-zero-length reply token is returned, then that token is
|
|||
|
sent to the client.
|
|||
|
|
|||
|
4. S generates a random number y (0 < y < q) and computes f = g^y
|
|||
|
mod p. It computes K = e ^ y mod p, and H = hash(V_C || V_S ||
|
|||
|
I_C || I_S || K_S || e || f || K). It then calls GSS_GetMIC to
|
|||
|
obtain a GSSAPI message integrity code for H. S then sends f
|
|||
|
and the MIC to C.
|
|||
|
|
|||
|
5. This step is performed only if the server's final call to
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 5]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
GSS_Accept_sec_context produced a non-zero-length final reply
|
|||
|
token to be sent to the client _and_ no previous call by the
|
|||
|
client to GSS_Init_sec_context has resulted in a major_status of
|
|||
|
GSS_S_COMPLETE. Under these conditions, the client makes an
|
|||
|
additional call to GSS_Init_sec_context to process the final
|
|||
|
reply token. This call is made exactly as described above.
|
|||
|
However, if the resulting major_status is anything other than
|
|||
|
GSS_S_COMPLETE, or a non-zero-length token is returned, it is an
|
|||
|
error and the key exchange MUST fail.
|
|||
|
|
|||
|
6. C computes K = f^x mod p, and H = hash(V_C || V_S || I_C || I_S
|
|||
|
|| K_S || e || f || K). It then calls GSS_VerifyMIC to verify
|
|||
|
that the MIC sent by S matches H.
|
|||
|
|
|||
|
Either side MUST NOT send or accept e or f values that are not in
|
|||
|
the range [1, p-1]. If this condition is violated, the key exchange
|
|||
|
fails.
|
|||
|
|
|||
|
If any call to GSS_Init_sec_context or GSS_Accept_sec_context
|
|||
|
returns a major_status other than GSS_S_COMPLETE or
|
|||
|
GSS_S_CONTINUE_NEEDED, or any other GSSAPI call returns a
|
|||
|
major_status other than GSS_S_COMPLETE, the key exchange fails. In
|
|||
|
this case, several mechanisms are available for communicating error
|
|||
|
information to the peer before terminating the connection as
|
|||
|
required by [8]:
|
|||
|
|
|||
|
o If the key exchange fails due to any GSSAPI error on the server
|
|||
|
(including errors returned by GSS_Accept_sec_context), the server
|
|||
|
MAY send a message informing the client of the details of the
|
|||
|
error. In this case, if an error token is also sent (see below),
|
|||
|
then this message MUST be sent before the error token.
|
|||
|
|
|||
|
o If the key exchange fails due to a GSSAPI error returned from the
|
|||
|
server's call to GSS_Accept_sec_context, and an "error token" is
|
|||
|
also returned, then the server SHOULD send the error token to the
|
|||
|
client to allow completion of the GSS security exchange.
|
|||
|
|
|||
|
o If the key exchange fails due to a GSSAPI error returned from the
|
|||
|
client's call to GSS_Init_sec_context, and an "error token" is
|
|||
|
also returned, then the client SHOULD send the error token to the
|
|||
|
server to allow completion of the GSS security exchange.
|
|||
|
|
|||
|
As noted in Section 9, it may be desirable under site security
|
|||
|
policy to obscure information about the precise nature of the error;
|
|||
|
thus, it is RECOMMENDED that implementations provide a method to
|
|||
|
suppress these messages as a matter of policy.
|
|||
|
|
|||
|
This is implemented with the following messages. The hash algorithm
|
|||
|
for computing the exchange hash is defined by the method name, and
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 6]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
is called HASH. The group used for Diffie-Hellman key exchange and
|
|||
|
the underlying GSSAPI mechanism are also defined by the method name.
|
|||
|
|
|||
|
After the client's first call to GSS_Init_sec_context, it sends the
|
|||
|
following:
|
|||
|
|
|||
|
byte SSH_MSG_KEXGSS_INIT
|
|||
|
string output_token (from GSS_Init_sec_context)
|
|||
|
mpint e
|
|||
|
|
|||
|
Upon receiving the SSH_MSG_KEXGSS_INIT message, the server MAY send
|
|||
|
the following message, prior to any other messages, to inform the
|
|||
|
client of its host key.
|
|||
|
|
|||
|
byte SSH_MSG_KEXGSS_HOSTKEY
|
|||
|
string server public host key and certificates (K_S)
|
|||
|
|
|||
|
Since this key exchange method does not require the host key to be
|
|||
|
used for any encryption operations, this message is OPTIONAL. If
|
|||
|
the "null" host key algorithm described in Section 5 is used, this
|
|||
|
message MUST NOT be sent. If this message is sent, the server
|
|||
|
public host key(s) and/or certificate(s) in this message are encoded
|
|||
|
as a single string, in the format specified by the public key type
|
|||
|
in use (see [8], section 4.6).
|
|||
|
|
|||
|
Each time the server's call to GSS_Accept_sec_context returns a
|
|||
|
major_status code of GSS_S_CONTINUE_NEEDED, it sends the following
|
|||
|
reply to the client:
|
|||
|
|
|||
|
byte SSH_MSG_KEXGSS_CONTINUE
|
|||
|
string output_token (from GSS_Accept_sec_context)
|
|||
|
|
|||
|
If the client receives this message after a call to
|
|||
|
GSS_Init_sec_context has returned a major_status code of
|
|||
|
GSS_S_COMPLETE, a protocol error has occurred and the key exchange
|
|||
|
MUST fail.
|
|||
|
|
|||
|
Each time the client receives the message described above, it makes
|
|||
|
another call to GSS_Init_sec_context. It then sends the following:
|
|||
|
|
|||
|
byte SSH_MSG_KEXGSS_CONTINUE
|
|||
|
string output_token (from GSS_Init_sec_context)
|
|||
|
|
|||
|
The server and client continue to trade these two messages as long
|
|||
|
as the server's calls to GSS_Accept_sec_context result in
|
|||
|
major_status codes of GSS_S_CONTINUE_NEEDED. When a call results in
|
|||
|
a major_status code of GSS_S_COMPLETE, it sends one of two final
|
|||
|
messages.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 7]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
If the server's final call to GSS_Accept_sec_context (resulting in a
|
|||
|
major_status code of GSS_S_COMPLETE) returns a non-zero-length token
|
|||
|
to be sent to the client, it sends the following:
|
|||
|
|
|||
|
byte SSH_MSG_KEXGSS_COMPLETE
|
|||
|
mpint f
|
|||
|
string per_msg_token (MIC of H)
|
|||
|
boolean TRUE
|
|||
|
string output_token (from GSS_Accept_sec_context)
|
|||
|
|
|||
|
If the client receives this message after a call to
|
|||
|
GSS_Init_sec_context has returned a major_status code of
|
|||
|
GSS_S_COMPLETE, a protocol error has occurred and the key exchange
|
|||
|
MUST fail.
|
|||
|
|
|||
|
If the server's final call to GSS_Accept_sec_context (resulting in a
|
|||
|
major_status code of GSS_S_COMPLETE) returns a zero-length token or
|
|||
|
no token at all, it sends the following:
|
|||
|
|
|||
|
byte SSH_MSG_KEXGSS_COMPLETE
|
|||
|
mpint f
|
|||
|
string per_msg_token (MIC of H)
|
|||
|
boolean FALSE
|
|||
|
|
|||
|
If the client receives this message when no call to
|
|||
|
GSS_Init_sec_context has yet resulted in a major_status code of
|
|||
|
GSS_S_COMPLETE, a protocol error has occurred and the key exchange
|
|||
|
MUST fail.
|
|||
|
|
|||
|
If either the client's call to GSS_Init_sec_context or the server's
|
|||
|
call to GSS_Accept_sec_context returns an error status and produces
|
|||
|
an output token (called an "error token"), then the following SHOULD
|
|||
|
be sent to convey the error information to the peer:
|
|||
|
|
|||
|
byte SSH_MSG_KEXGSS_CONTINUE
|
|||
|
string error_token
|
|||
|
|
|||
|
If a server sends both this message and an SSH_MSG_KEXGSS_ERROR
|
|||
|
message, the SSH_MSG_KEXGSS_ERROR message MUST be sent first, to
|
|||
|
allow clients to record and/or display the error information before
|
|||
|
processing the error token. This is important because a client
|
|||
|
processing an error token will likely disconnect without reading any
|
|||
|
further messages.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 8]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
In the event of a GSSAPI error on the server, the server MAY send
|
|||
|
the following message before terminating the connection:
|
|||
|
|
|||
|
byte SSH_MSG_KEXGSS_ERROR
|
|||
|
uint32 major_status
|
|||
|
uint32 minor_status
|
|||
|
string message
|
|||
|
string language tag
|
|||
|
|
|||
|
The message text MUST be encoded in the UTF-8 encoding described in
|
|||
|
[10]. Language tags are those described in [11]. Note that the
|
|||
|
message text may contain multiple lines separated by carriage
|
|||
|
return-line feed (CRLF) sequences. Application developers should
|
|||
|
take this into account when displaying these messages.
|
|||
|
|
|||
|
The hash H is computed as the HASH hash of the concatenation of the
|
|||
|
following:
|
|||
|
|
|||
|
string V_C, the client's version string (CR and NL excluded)
|
|||
|
string V_S, the server's version string (CR and NL excluded)
|
|||
|
string I_C, the payload of the client's SSH_MSG_KEXINIT
|
|||
|
string I_S, the payload of the server's SSH_MSG_KEXINIT
|
|||
|
string K_S, the host key
|
|||
|
mpint e, exchange value sent by the client
|
|||
|
mpint f, exchange value sent by the server
|
|||
|
mpint K, the shared secret
|
|||
|
|
|||
|
This value is called the exchange hash, and it is used to
|
|||
|
authenticate the key exchange. The exchange hash SHOULD be kept
|
|||
|
secret. If no SSH_MSG_KEXGSS_HOSTKEY message has been sent by the
|
|||
|
server or received by the client, then the empty string is used in
|
|||
|
place of K_S when computing the exchange hash.
|
|||
|
|
|||
|
The GSS_GetMIC call MUST be applied over H, not the original data.
|
|||
|
|
|||
|
2.2 gss-group1-sha1-*
|
|||
|
|
|||
|
Each of these methods specifies GSSAPI authenticated Diffie-Hellman
|
|||
|
key exchange as described in Section 2.1 with SHA-1 as HASH, and the
|
|||
|
group defined in section 6.1 of [8]. The method name for each
|
|||
|
method is the concatenation of the string "gss-group1-sha1-" with
|
|||
|
the Base64 encoding of the MD5 hash [3] of the ASN.1 DER encoding
|
|||
|
[1] of the underlying GSSAPI mechanism's OID. Base64 encoding is
|
|||
|
described in section 6.8 of [4].
|
|||
|
|
|||
|
Each and every such key exchange method is implicitly registered by
|
|||
|
this specification. The IESG is considered to be the owner of all
|
|||
|
such key exchange methods; this does NOT imply that the IESG is
|
|||
|
considered to be the owner of the underlying GSSAPI mechanism.
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 9]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
2.3 Other GSSAPI key exchange methods
|
|||
|
|
|||
|
Key exchange method names starting with "gss-" are reserved for key
|
|||
|
exchange methods which conform to this document; in particular, for
|
|||
|
those methods which use the GSSAPI authenticated Diffie-Hellman key
|
|||
|
exchange algorithm described in Section 2.1, including any future
|
|||
|
methods which use different groups and/or hash functions. The
|
|||
|
intent is that the names for any such future methods methods be
|
|||
|
defined in a similar manner to that used in Section 2.2.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 10]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
3. GSSAPI User Authentication
|
|||
|
|
|||
|
This section describes a general-purpose user authentication method
|
|||
|
based on [2]. It is intended to be run over the SSH user
|
|||
|
authentication protocol [9].
|
|||
|
|
|||
|
The authentication method name for this protocol is "gssapi".
|
|||
|
|
|||
|
3.1 GSSAPI Authentication Overview
|
|||
|
|
|||
|
GSSAPI authentication must maintain a context. Authentication
|
|||
|
begins when the client sends a SSH_MSG_USERAUTH_REQUEST, which
|
|||
|
specifies the mechanism OIDs the client supports.
|
|||
|
|
|||
|
If the server supports any of the requested mechanism OIDs, the
|
|||
|
server sends a SSH_MSG_USERAUTH_GSSAPI_RESPONSE message containing
|
|||
|
the mechanism OID.
|
|||
|
|
|||
|
After the client receives SSH_MSG_USERAUTH_GSSAPI_RESPONSE, the
|
|||
|
client and server exchange SSH_MSG_USERAUTH_GSSAPI_TOKEN packets
|
|||
|
until the authentication mechanism either succeeds or fails.
|
|||
|
|
|||
|
If at any time during the exchange, the client sends a new
|
|||
|
SSH_MSG_USERAUTH_REQUEST packet, the GSSAPI context is completely
|
|||
|
discarded and destroyed, and any further GSSAPI authentication MUST
|
|||
|
restart from the beginning.
|
|||
|
|
|||
|
3.2 Initiating GSSAPI authentication
|
|||
|
|
|||
|
The GSSAPI authentication method is initiated when the client sends
|
|||
|
a SSH_MSG_USERAUTH_REQUEST:
|
|||
|
|
|||
|
byte SSH_MSG_USERAUTH_REQUEST
|
|||
|
string user name (in ISO-10646 UTF-8 encoding)
|
|||
|
string service name (in US-ASCII)
|
|||
|
string "gssapi" (US-ASCII method name)
|
|||
|
uint32 n, the number of mechanism OIDs client supports
|
|||
|
string[n] mechanism OIDs
|
|||
|
|
|||
|
Mechanism OIDs are encoded according to the ASN.1 distinguished
|
|||
|
encoding rules (DER), as described in [1] and in section 3.1 of [2].
|
|||
|
The mechanism OIDs MUST be listed in order of preference, and the
|
|||
|
server must choose the first mechanism OID on the list that it
|
|||
|
supports.
|
|||
|
|
|||
|
The client SHOULD NOT send more then one gssapi mechanism OID unless
|
|||
|
there are no non-GSSAPI authentication methods between the GSSAPI
|
|||
|
mechanisms in the order of preference, otherwise, authentication
|
|||
|
methods may be executed out of order.
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 11]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
If the server does not support any of the specified OIDs, the server
|
|||
|
MUST fail the request by sending a SSH_MSG_USERAUTH_FAILURE packet.
|
|||
|
|
|||
|
The user name may be an empty string if it can be deduced from the
|
|||
|
results of the gssapi authentication. If the user name is not
|
|||
|
empty, and the requested user does not exist, the server MAY
|
|||
|
disconnect, or MAY send a bogus list of acceptable authentications
|
|||
|
but never accept any. This makes it possible for the server to
|
|||
|
avoid disclosing information about which accounts exist. In any
|
|||
|
case, if the user does not exist, the authentication request MUST
|
|||
|
NOT be accepted.
|
|||
|
|
|||
|
The client MAY at any time continue with a new
|
|||
|
SSH_MSG_USERAUTH_REQUEST message, in which case the server MUST
|
|||
|
abandon the previous authentication attempt and continue with the
|
|||
|
new one.
|
|||
|
|
|||
|
3.3 Initial server response
|
|||
|
|
|||
|
The server responds to the SSH_MSG_USERAUTH_REQUEST with either a
|
|||
|
SSH_MSG_USERAUTH_FAILURE if none of the mechanisms are supported, or
|
|||
|
with SSH_MSG_USERAUTH_GSSAPI_RESPONSE as follows:
|
|||
|
|
|||
|
byte SSH_MSG_USERAUTH_GSSAPI_RESPONSE
|
|||
|
string selected mechanism OID
|
|||
|
|
|||
|
The mechanism OID must be one of the OIDs sent by the client in the
|
|||
|
SSH_MSG_USERAUTH_REQUEST packet.
|
|||
|
|
|||
|
3.4 GSSAPI session
|
|||
|
|
|||
|
Once the mechanism OID has been selected, the client will then
|
|||
|
initiate an exchange of one or more pairs of
|
|||
|
SSH_MSG_USERAUTH_GSSAPI_TOKEN packets. These packets contain the
|
|||
|
tokens produced from the 'GSS_Init_sec_context()' and
|
|||
|
'GSS_Accept_sec_context()' calls. The actual number of packets
|
|||
|
exchanged is determined by the underlying GSSAPI mechanism.
|
|||
|
|
|||
|
byte SSH_MSG_USERAUTH_GSSAPI_TOKEN
|
|||
|
string data returned from either GSS_Init_sec_context()
|
|||
|
or GSS_Accept_sec_context()
|
|||
|
|
|||
|
If an error occurs during this exchange on server side, the server
|
|||
|
can terminate the method by sending a SSH_MSG_USERAUTH_FAILURE
|
|||
|
packet. If an error occurs on client side, the client can terminate
|
|||
|
the method by sending a new SSH_MSG_USERAUTH_REQUEST packet.
|
|||
|
|
|||
|
The client MAY use the deleg_req_flag in calls to
|
|||
|
GSS_Init_sec_context() to request credential delegation.
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 12]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
Additional SSH_MSG_USERAUTH_GSSAPI_TOKEN messages are sent if and
|
|||
|
only if the calls to the GSSAPI routines produce send tokens of
|
|||
|
non-zero length.
|
|||
|
|
|||
|
Any major status code other than GSS_S_COMPLETE or
|
|||
|
GSS_S_CONTINUE_NEEDED SHOULD be a failure.
|
|||
|
|
|||
|
3.5 Client acknowledgement
|
|||
|
|
|||
|
It is possible for the server to successfully complete the GSSAPI
|
|||
|
method and the client to fail. If the server simply assumed success
|
|||
|
on the part of the client and completed the authentication service,
|
|||
|
it is possible that the client would fail to complete the
|
|||
|
authentication method, but not be able to retry other methods
|
|||
|
because the server had already moved on.
|
|||
|
|
|||
|
Therefore, the client MUST send the following message when it has
|
|||
|
successfully called GSS_Init_sec_context() and gotten GSS_S_COMPLETE:
|
|||
|
|
|||
|
byte SSH_MSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE
|
|||
|
|
|||
|
This message MUST be sent if and only if GSS_Init_sec_context()
|
|||
|
returned GSS_S_COMPLETE. If a token is returned then the
|
|||
|
SSH_MSG_USERAUTH_GSSAPI_TOKEN message MUST be sent before this one.
|
|||
|
|
|||
|
If GSS_Init_sec_context() failed, the client MUST terminate the
|
|||
|
method by sending a new SSH_MSG_USERAUTH_REQUEST. or by closing the
|
|||
|
connection
|
|||
|
|
|||
|
3.6 Completion
|
|||
|
|
|||
|
As with all SSH authentication methods, successful completion is
|
|||
|
indicated by a SSH_MSG_USERAUTH_SUCCESS if no other authentication
|
|||
|
is required, or a SSH_MSG_USERAUTH_FAILURE with the partial success
|
|||
|
flag set if the server requires further authentication.
|
|||
|
|
|||
|
This packet should be sent immediately following receipt of the the
|
|||
|
SSH_MSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE packet.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 13]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
3.7 Error Status
|
|||
|
|
|||
|
In the event a GSSAPI error occurs on the server during context
|
|||
|
establishment, the server MAY send the following message to inform
|
|||
|
the client of the details of the error before sending a
|
|||
|
SSH_MSG_USERAUTH_FAILURE message:
|
|||
|
|
|||
|
byte SSH_MSG_USERAUTH_GSSAPI_ERROR
|
|||
|
uint32 major_status
|
|||
|
uint32 minor_status
|
|||
|
string message
|
|||
|
string language tag
|
|||
|
|
|||
|
The message text MUST be encoded in the UTF-8 encoding described in
|
|||
|
[10]. Language tags are those described in [11]. Note that the
|
|||
|
message text may contain multiple lines separated by carriage
|
|||
|
return-line feed (CRLF) sequences. Application developers should
|
|||
|
take this into account when displaying these messages.
|
|||
|
|
|||
|
Clients receiving this message MAY log the error details and/or
|
|||
|
report them to the user. Any server sending this message MUST
|
|||
|
ignore any SSH_MSG_UNIMPLEMENTED sent by the client in response.
|
|||
|
|
|||
|
3.8 Error Token
|
|||
|
|
|||
|
In the event that, during context establishment, a client's call to
|
|||
|
GSS_Init_sec_context or a server's call to GSS_Accept_sec_context
|
|||
|
returns a token along with an error status, the resulting "error
|
|||
|
token" SHOULD be sent to the peer using the following message:
|
|||
|
|
|||
|
byte SSH_MSG_USERAUTH_GSSAPI_ERRTOK
|
|||
|
string error token
|
|||
|
|
|||
|
This message implies that the authentication is about to fail, and
|
|||
|
is defined to allow the error token to be communicated without
|
|||
|
losing synchronization.
|
|||
|
|
|||
|
When a server sends this message, it MUST be followed by a
|
|||
|
SSH_MSG_USERAUTH_FAILURE message, which is to be interpreted as
|
|||
|
applying to the same authentication request. A client receiving
|
|||
|
this message SHOULD wait for the following SSH_MSG_USERAUTH_FAILURE
|
|||
|
message before beginning another authentication attempt.
|
|||
|
|
|||
|
When a client sends this message, it MUST be followed by a new
|
|||
|
authentication request or by terminating the connection. A server
|
|||
|
receiving this message MUST NOT send a SSH_MSG_USERAUTH_FAILURE in
|
|||
|
reply, since such a message might otherwise be interpreted by a
|
|||
|
client as a response to the following authentication sequence.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 14]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
Any server sending this message MUST ignore any
|
|||
|
SSH_MSG_UNIMPLEMENTED sent by the client in response. If a server
|
|||
|
sends both this message and an SSH_MSG_USERAUTH_GSSAPI_ERROR
|
|||
|
message, the SSH_MSG_USERAUTH_GSSAPI_ERROR message MUST be sent
|
|||
|
first, to allow the client to store and/or display the error status
|
|||
|
before processing the error token.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 15]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
4. External Key Exchange User Authentication
|
|||
|
|
|||
|
This section describes a user authentication method building on the
|
|||
|
framework described in [9]. This method relies upon the key
|
|||
|
exchange to authenticate both the client and the server. If the key
|
|||
|
exchange did not successfully perform these functions then the
|
|||
|
server MUST always respond to this request with
|
|||
|
SSH_MSG_USERAUTH_FAILURE with partial success set to false.
|
|||
|
|
|||
|
The new mechanism is defined as follows:
|
|||
|
|
|||
|
byte SSH_MSG_USERAUTH_REQUEST
|
|||
|
string user name (in ISO-10646 UTF-8 encoding)
|
|||
|
string service name (in US-ASCII)
|
|||
|
string "external-keyx" (US-ASCII method name)
|
|||
|
|
|||
|
If the authentication performed as part of key exchange can be used
|
|||
|
to authorize login as the requested user, this method is successful,
|
|||
|
and the server responds with SSH_MSG_USERAUTH_SUCCESS if no more
|
|||
|
authentications are needed, or with SSH_MSG_USERAUTH_FAILURE with
|
|||
|
partial success set to true if more authentications are needed.
|
|||
|
|
|||
|
If the authentication performed as part of key-exchange cannot be
|
|||
|
used to authorize login as the requested user, then
|
|||
|
SSH_MSG_USERAUTH_FAILURE is returned with partial success set to
|
|||
|
false.
|
|||
|
|
|||
|
If the user name is not empty, and the requested user does not
|
|||
|
exist, the server MAY disconnect, or MAY send a bogus list of
|
|||
|
acceptable authentications but never accept any. This makes it
|
|||
|
possible for the server to avoid disclosing information about which
|
|||
|
accounts exist. In any case, if the user does not exist, the
|
|||
|
authentication request MUST NOT be accepted.
|
|||
|
|
|||
|
Any implementation supporting at least one key exchange method which
|
|||
|
conforms to section 1 of this document SHOULD also support the
|
|||
|
"external-keyx" user authentication method, in order to allow user
|
|||
|
authentication to be performed at the same time as key exchange,
|
|||
|
thereby reducing the number of round trips needed for connection
|
|||
|
setup.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 16]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
5. Null Host Key Algorithm
|
|||
|
|
|||
|
The "null" host key algorithm has no associated host key material,
|
|||
|
and provides neither signature nor encryption algorithms. Thus, it
|
|||
|
can be used only with key exchange methods that do not require any
|
|||
|
public-key operations and do not require the use of host public key
|
|||
|
material. The key exchange methods described in section 1 of this
|
|||
|
document are examples of such methods.
|
|||
|
|
|||
|
This algorithm is used when, as a matter of configuration, the host
|
|||
|
does not have or does not wish to use a public key. For example, it
|
|||
|
can be used when the administrator has decided as a matter of policy
|
|||
|
to require that all key exchanges be authenticated using Kerberos
|
|||
|
[12], and thus the only permitted key exchange method is the
|
|||
|
GSSAPI-authenticated Diffie-Hellman exchange described above, with
|
|||
|
Kerberos V5 as the underlying GSSAPI mechanism. In such a
|
|||
|
configuration, the server implementation supports the "ssh-dss" key
|
|||
|
algorithm (as required by [8]), but could be prohibited by
|
|||
|
configuration from using it. In this situation, the server needs
|
|||
|
some key exchange algorithm to advertise; the "null" algorithm fills
|
|||
|
this purpose.
|
|||
|
|
|||
|
Note that the use of the "null" algorithm in this way means that the
|
|||
|
server will not be able to interoperate with clients which do not
|
|||
|
support this algorithm. This is not a significant problem, since in
|
|||
|
the configuration described, it will also be unable to interoperate
|
|||
|
with implementations that do not support the GSSAPI-authenticated
|
|||
|
key exchange and Kerberos.
|
|||
|
|
|||
|
Any implementation supporting at least one key exchange method which
|
|||
|
conforms to section 1 of this document MUST also support the "null"
|
|||
|
host key algorithm. Servers MUST NOT advertise the "null" host key
|
|||
|
algorithm unless it is the only algorithm advertised.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 17]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
6. Summary of Message Numbers
|
|||
|
|
|||
|
The following message numbers have been defined for use with
|
|||
|
GSSAPI-based key exchange methods:
|
|||
|
|
|||
|
#define SSH_MSG_KEXGSS_INIT 30
|
|||
|
#define SSH_MSG_KEXGSS_CONTINUE 31
|
|||
|
#define SSH_MSG_KEXGSS_COMPLETE 32
|
|||
|
#define SSH_MSG_KEXGSS_HOSTKEY 33
|
|||
|
#define SSH_MSG_KEXGSS_ERROR 34
|
|||
|
|
|||
|
The numbers 30-49 are specific to key exchange and may be redefined
|
|||
|
by other kex methods.
|
|||
|
|
|||
|
The following message numbers have been defined for use with the
|
|||
|
'gssapi' user authentication method:
|
|||
|
|
|||
|
#define SSH_MSG_USERAUTH_GSSAPI_RESPONSE 60
|
|||
|
#define SSH_MSG_USERAUTH_GSSAPI_TOKEN 61
|
|||
|
#define SSH_MSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE 63
|
|||
|
#define SSH_MSG_USERAUTH_GSSAPI_ERROR 64
|
|||
|
|
|||
|
The numbers 60-79 are specific to user authentication and may be
|
|||
|
redefined by other user auth methods. Note that in the method
|
|||
|
described in this document, message number 62 is unused.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 18]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
7. GSSAPI Considerations
|
|||
|
|
|||
|
7.1 Naming Conventions
|
|||
|
|
|||
|
In order to establish a GSSAPI security context, the SSH client
|
|||
|
needs to determine the appropriate targ_name to use in identifying
|
|||
|
the server when calling GSS_Init_sec_context. For this purpose, the
|
|||
|
GSSAPI mechanism-independent name form for host-based services is
|
|||
|
used, as described in section 4.1 of [2].
|
|||
|
|
|||
|
In particular, the targ_name to pass to GSS_Init_sec_context is
|
|||
|
obtained by calling GSS_Import_name with an input_name_type of
|
|||
|
GSS_C_NT_HOSTBASED_SERVICE, and an input_name_string consisting of
|
|||
|
the string "host@" concatenated with the hostname of the SSH server.
|
|||
|
|
|||
|
7.2 Channel Bindings
|
|||
|
|
|||
|
This document recommends that channel bindings SHOULD NOT be
|
|||
|
specified in the calls during context establishment. This document
|
|||
|
does not specify any standard data to be used as channel bindings
|
|||
|
and the use of network addresses as channel bindings may break SSH
|
|||
|
in environments where it is most useful.
|
|||
|
|
|||
|
7.3 SPNEGO
|
|||
|
|
|||
|
The use of the Simple and Protected GSS-API Negotiation Mechanism
|
|||
|
[14] in conjunction with the authentication and key exchange methods
|
|||
|
described in this document is both unnecessary and undesirable. As
|
|||
|
a result, mechanisms conforming to this document MUST NOT use SPNEGO
|
|||
|
as the underlying GSSAPI mechanism.
|
|||
|
|
|||
|
Since SSH performs its own negotiation of authentication and key
|
|||
|
exchange methods, the negotiation capability of SPNEGO alone does
|
|||
|
not provide any added benefit. In fact, as described below, it has
|
|||
|
the potential to result in the use of a weaker method than desired.
|
|||
|
|
|||
|
Normally, SPNEGO provides the added benefit of protecting the GSSAPI
|
|||
|
mechanism negotiation. It does this by having the server compute a
|
|||
|
MIC of the list of mechanisms proposed by the client, and then
|
|||
|
checking that value at the client. In the case of key exchange,
|
|||
|
this protection is not needed because the key exchange methods
|
|||
|
described here already perform an equivalent operation; namely, they
|
|||
|
generate a MIC of the SSH exchange hash, which is a hash of several
|
|||
|
items including the lists of key exchange mechanisms supported by
|
|||
|
both sides. In the case of user authentication, the protection is
|
|||
|
not needed because the negotiation occurs over a secure channel, and
|
|||
|
the host's identity has already been proved to the user.
|
|||
|
|
|||
|
The use of SPNEGO combined with GSSAPI mechanisms used without
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 19]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
SPNEGO can lead to interoperability problems. For example, a client
|
|||
|
which supports key exchange using the Kerberos V5 GSSAPI mechanism
|
|||
|
[13] only underneath SPNEGO will not interoperate with a server
|
|||
|
which supports key exchange only using the Kerberos V5 GSSAPI
|
|||
|
mechanism directly. As a result, allowing GSSAPI mechanisms to be
|
|||
|
used both with and without SPNEGO is undesirable.
|
|||
|
|
|||
|
If a client's policy is to first prefer GSSAPI-based key exchange
|
|||
|
method X, then non-GSSAPI method Y, then GSSAPI-based method Z, and
|
|||
|
if a server supports mechanisms Y and Z but not X, then an attempt
|
|||
|
to use SPNEGO to negotiate a GSSAPI mechanism might result in the
|
|||
|
use of method Z when method Y would have been preferable. As a
|
|||
|
result, the use of SPNEGO could result in the subversion of the
|
|||
|
negotiation algorithm for key exchange methods as described in
|
|||
|
section 5.1 of [8] and/or the negotiation algorithm for user
|
|||
|
authentication methods as described in [9].
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 20]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
8. IANA Considerations
|
|||
|
|
|||
|
Consistent with section 7 of [6], the IANA is directed to make the
|
|||
|
following registrations:
|
|||
|
|
|||
|
The family of SSH key exchange method names beginning with
|
|||
|
"gss-group1-sha1-" and not containing the at-sign ('@'), to name
|
|||
|
the key exchange methods defined in Section 2.2.
|
|||
|
|
|||
|
All other SSH key exchange method names beginning with "gss-" and
|
|||
|
not containing the at-sign ('@'), to be reserved for future key
|
|||
|
exchange methods defined in conformance with this document, as
|
|||
|
noted in Section 2.3.
|
|||
|
|
|||
|
The SSH host public key algorithm name "null", to name the NULL
|
|||
|
host key algorithm defined in Section 5.
|
|||
|
|
|||
|
The SSH user authentication method name "gssapi", to name the
|
|||
|
GSSAPI user authentication method defined in Section 3.
|
|||
|
|
|||
|
The SSH user authentication method name "external-keyx", to name
|
|||
|
the "external key-exchange" user authentication method defined in
|
|||
|
Section 4.
|
|||
|
|
|||
|
This document creates no new registries.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 21]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
9. Security Considerations
|
|||
|
|
|||
|
This document describes authentication and key-exchange protocols.
|
|||
|
As such, security considerations are discussed throughout.
|
|||
|
|
|||
|
This protocol depends on the SSH protocol itself, the GSSAPI, any
|
|||
|
underlying GSSAPI mechanisms which are used, and any protocols on
|
|||
|
which such mechanisms might depend. Each of these components plays
|
|||
|
a part in the security of the resulting connection, and each will
|
|||
|
have its own security considerations.
|
|||
|
|
|||
|
The key exchange method described in section 1 of this document
|
|||
|
depends on the underlying GSSAPI mechanism to provide both mutual
|
|||
|
authentication and per-message integrity services. If either of
|
|||
|
these features is not supported by a particular GSSAPI mechanism, or
|
|||
|
by a particular implementation of a GSSAPI mechanism, then the key
|
|||
|
exchange is not secure and MUST fail.
|
|||
|
|
|||
|
In order for the "external-keyx" user authentication method to be
|
|||
|
used, it MUST have access to user authentication information
|
|||
|
obtained as a side-effect of the key exchange. If this information
|
|||
|
is unavailable, the authentication MUST fail.
|
|||
|
|
|||
|
Revealing information about the reason for an authentication failure
|
|||
|
may be considered by some sites to be an unacceptable security risk
|
|||
|
for a production environment. However, having that information
|
|||
|
available can be invaluable for debugging purposes. Thus, it is
|
|||
|
RECOMMENDED that implementations provide a means for controlling, as
|
|||
|
a matter of policy, whether to send SSH_MSG_USERAUTH_GSSAPI_ERROR,
|
|||
|
SSH_MSG_USERAUTH_GSSAPI_ERRTOK, and SSH_MSG_KEXGSS_ERROR messages,
|
|||
|
and SSH_MSG_KEXGEE_CONTINUE messages containing a GSSAPI error token.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 22]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
10. Acknowledgements
|
|||
|
|
|||
|
The authors would like to thank Sam Hartman, Simon Wilkinson, and
|
|||
|
Nicolas Williams for their invaluable assistance with this document.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 23]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
11. Changes the last version
|
|||
|
|
|||
|
This section lists important changes since the previous version of
|
|||
|
this internet-draft. This section should be removed at the time of
|
|||
|
publication of this document as an RFC.
|
|||
|
|
|||
|
o Improved the description of error handling during key exchange.
|
|||
|
|
|||
|
o Specified that SSH_MSG_GSSKEX_CONTINUE SHOULD be used to send
|
|||
|
error tokens in the event of a failure of GSS_Init_sec_context or
|
|||
|
GSS_Accept_sec_context during key exchange.
|
|||
|
|
|||
|
o Made SSH_MSG_GSSKEX_ERROR be OPTIONAL instead of RECOMMENDED.
|
|||
|
|
|||
|
o Specified a new SSH_MSG_USERAUTH_GSSAPI_ERRTOK message which
|
|||
|
SHOULD be used to send error tokens in the event of a failure of
|
|||
|
GSS_Init_sec_context or GSS_Accept_sec_context during user
|
|||
|
authentication.
|
|||
|
|
|||
|
o Made SSH_MSG_USERAUTH_GSSAPI_ERROR be OPTIONAL instead of
|
|||
|
RECOMMENDED.
|
|||
|
|
|||
|
o Added IANA considerations section.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 24]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
Normative References
|
|||
|
|
|||
|
[1] ISO/IEC, "ASN.1 Encoding Rules: Specification of Basic
|
|||
|
Encoding Rules (BER), Canonical Encoding Rules (CER) and
|
|||
|
Distinguished Encoding Rules (DER)", ITU-T Recommendation
|
|||
|
X.690 (1997), ISO/IEC 8825-1:1998, November 1998.
|
|||
|
|
|||
|
[2] Linn, J., "Generic Security Service Application Program
|
|||
|
Interface Version 2, Update 1", RFC 2743, January 2000.
|
|||
|
|
|||
|
[3] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321,
|
|||
|
April 1992.
|
|||
|
|
|||
|
[4] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
|
|||
|
Extensions (MIME) Part One: Format of Internet Message
|
|||
|
Bodies", RFC 2045, November 1996.
|
|||
|
|
|||
|
[5] Bradner, S., "Key words for use in RFCs to Indicate
|
|||
|
Requirement Levels", RFC 2119, BCP 14, March 1997.
|
|||
|
|
|||
|
[6] Ylonen, T., Kivinen, T., Saarinen, M., Rinne, T. and S.
|
|||
|
Lehtinen, "SSH Protocol Architecture",
|
|||
|
draft-ietf-secsh-architecture-11.txt (work in progress),
|
|||
|
November 2001.
|
|||
|
|
|||
|
[7] Ylonen, T., Kivinen, T., Saarinen, M., Rinne, T. and S.
|
|||
|
Lehtinen, "SSH Connection Protocol",
|
|||
|
draft-ietf-secsh-connect-14.txt (work in progress), November
|
|||
|
2001.
|
|||
|
|
|||
|
[8] Ylonen, T., Kivinen, T., Saarinen, M., Rinne, T. and S.
|
|||
|
Lehtinen, "SSH Transport Layer Protocol",
|
|||
|
draft-ietf-secsh-transport-11.txt (work in progress), November
|
|||
|
2001.
|
|||
|
|
|||
|
[9] Ylonen, T., Kivinen, T., Saarinen, M., Rinne, T. and S.
|
|||
|
Lehtinen, "SSH Authentication Protocol",
|
|||
|
draft-ietf-secsh-userauth-13.txt (work in progress), November
|
|||
|
2001.
|
|||
|
|
|||
|
[10] Yergeau, F., "UTF-8, a transformation format of ISO 10646",
|
|||
|
RFC 2279, January 1998.
|
|||
|
|
|||
|
[11] Alvestrand, H., "Tags for the Identification of Languages",
|
|||
|
RFC 1766, March 1995.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 25]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
Non-normative References
|
|||
|
|
|||
|
[12] Kohl, J. and C. Neuman, "The Kerberos Network Authentication
|
|||
|
Service (V5)", RFC 1510, September 1993.
|
|||
|
|
|||
|
[13] Linn, J., "The Kerberos Version 5 GSS-API Mechanism", RFC
|
|||
|
1964, June 1996.
|
|||
|
|
|||
|
[14] Baize, E. and D. Pinkas, "The Simple and Protected GSS-API
|
|||
|
Negotiation Mechanism", RFC 2478, December 1998.
|
|||
|
|
|||
|
|
|||
|
Authors' Addresses
|
|||
|
|
|||
|
Jeffrey Hutzelman
|
|||
|
Carnegie Mellon University
|
|||
|
5000 Forbes Ave
|
|||
|
Pittsburgh, PA 15213
|
|||
|
US
|
|||
|
|
|||
|
Phone: +1 412 268 7225
|
|||
|
EMail: jhutz+@cmu.edu
|
|||
|
URI: http://www.cs.cmu.edu/~jhutz/
|
|||
|
|
|||
|
|
|||
|
Joseph Salowey
|
|||
|
Cisco Systems
|
|||
|
2901 Third Avenue
|
|||
|
Seattle, WA 98121
|
|||
|
US
|
|||
|
|
|||
|
Phone: +1 206 256 3380
|
|||
|
EMail: jsalowey@cisco.com
|
|||
|
|
|||
|
|
|||
|
Joseph Galbraith
|
|||
|
Van Dyke Technologies, Inc.
|
|||
|
4848 Tramway Ridge Dr. NE
|
|||
|
Suite 101
|
|||
|
Albuquerque, NM 87111
|
|||
|
US
|
|||
|
|
|||
|
EMail: galb@vandyke.com
|
|||
|
|
|||
|
|
|||
|
Von Welch
|
|||
|
University of Chicago & Argonne National Laboratory
|
|||
|
Distributed Systems Laboratory
|
|||
|
701 E. Washington
|
|||
|
Urbana, IL 61801
|
|||
|
US
|
|||
|
|
|||
|
EMail: welch@mcs.anl.gov
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 26]
|
|||
|
|
|||
|
Internet-Draft SSH GSSAPI Methods March 2003
|
|||
|
|
|||
|
|
|||
|
Full Copyright Statement
|
|||
|
|
|||
|
Copyright (C) The Internet Society (2003). All Rights Reserved.
|
|||
|
|
|||
|
This document and translations of it may be copied and furnished to
|
|||
|
others, and derivative works that comment on or otherwise explain it
|
|||
|
or assist in its implementation may be prepared, copied, published
|
|||
|
and distributed, in whole or in part, without restriction of any
|
|||
|
kind, provided that the above copyright notice and this paragraph
|
|||
|
are included on all such copies and derivative works. However, this
|
|||
|
document itself may not be modified in any way, such as by removing
|
|||
|
the copyright notice or references to the Internet Society or other
|
|||
|
Internet organizations, except as needed for the purpose of
|
|||
|
developing Internet standards in which case the procedures for
|
|||
|
copyrights defined in the Internet Standards process must be
|
|||
|
followed, or as required to translate it into languages other than
|
|||
|
English.
|
|||
|
|
|||
|
The limited permissions granted above are perpetual and will not be
|
|||
|
revoked by the Internet Society or its successors or assigns.
|
|||
|
|
|||
|
This document and the information contained herein is provided on an
|
|||
|
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
|
|||
|
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
|
|||
|
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
|
|||
|
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
|
|||
|
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
|||
|
|
|||
|
Acknowledgement
|
|||
|
|
|||
|
Funding for the RFC editor function is currently provided by the
|
|||
|
Internet Society.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Hutzelman, et. al. Expires August 31, 2003 [Page 27]
|
|||
|
|