Subject: authmeth: raw review notes

From: "Kurt D. Zeilenga" <[email-masked]>
Date: Mon, 13 Oct 2003 18:46:54 -0700

Below are my review notes for -07....  a mix of editorial
and technical concerns. 

Kurt

>From draft-ietf-ldapbis-authmeth-07.txt:
> 
> 
>                      LDAP: Authentication Methods 
>                                  and  
>                  Connection Level Security Mechanisms 
> 
>Abstract 
>    
>   This document describes LDAPv3 (Lightweight Directory Access 
>   Protocol v3) authentication methods and connection level security 
>   mechanisms that are required of all conforming LDAPv3 server 
>   implementations and makes recommendations for combinations of these 
>   mechanisms to be used in various deployment circumstances.  
>    

Suggest s/LDAPv3/LDAP/ throughout document for both consistency
within document and across entire technical specification.

>   Among the mechanisms described are 
>      
>     - various forms of authentication including anonymous 
>       authentication, password-based authentication, and certificate 
>       based authentication 
>     - the use of SASL mechanisms with LDAPv3 
>     - the use of TLS (Transport Layer Security) with LDAPv3 
>     - the various authentication and authorization states through 
>       which a connection to an LDAP server may pass and the actions 
>       that trigger these state changes. 

Spell SASL out.  Suggest you use the format
	Transport Layer Security (TLS)
for introducing acronyms.

Suggest this list be replaced with:
  This document details the simple Bind authentication method including
  anonymous, unauthenticated, and plain-text password methods and the
  SASL (Simple Authentication and Security Layer) Bind authentication
  method including the use of DIGEST-MD5 and EXTERNAL mechanisms.
  This document also details establishment of TLS (Transport Layer
  Security) using the Start TLS operation.

Note that we need to be careful when using the term "simple"
authentication choice as the simple authentication choice
supports three modes (two of which produce anonymous associations).
It likely appropriate to define three terms to refer to each of
the modes (maybe in protocol) and then use those terms when
referring to a particular mode of the "simple" authenication choice.
It is import to distinguish anonymous and unauthenticated modes
as servers may allow one but not the other (allowing unauthenticated
bind can be problematic).  (See section 3.2 suggestion.)

>1. Introduction 
    
LDAP and other terms (SASL, TLS, PDU, GSSAPI, DSE) needs to be spelled
out on first use in body (even if introduced in Abstract).

>   This document is an integral part of the LDAP Technical 
>   Specification [ROADMAP]. This document replaces RFC 2829 and 
>   portions of RFC 2830. Changes to RFC 2829 are summarized in Appendix 
>   C and changes to RFC 2830 are summarized in Appendix D. 

I suggest this paragraph be moved to the end of the Introduction.

>   LDAPv3 is a powerful access protocol for directories. It offers 
>   means of searching, retrieving and manipulating directory content, 
>   and ways to access a rich set of security functions. 
> 
>   It is vital that these security functions be interoperable among all 
>   LDAP clients and servers on the Internet; therefore there has to be 
>   a minimum subset of security functions that is common to all 
>   implementations that claim LDAPv3 conformance. 
> 
>   Basic threats to an LDAP directory service include: 
> 
>   (1) Unauthorized access to directory data via data-retrieval 
>       operations, 
> 
>   (2) Unauthorized access to reusable client authentication 
>       information by monitoring others' access, 
> 
>   (3) Unauthorized access to directory data by monitoring others' 
>       access, 
> 
>   (4) Unauthorized modification of directory data, 
> 
>   (5) Unauthorized modification of configuration information, 
>    
>   (6) Unauthorized or excessive use of resources (denial of service), 
>       and 
> 
>   (7) Spoofing of directory: Tricking a client into believing that 
>       information came from the directory when in fact it did not, 
>       either by modifying data in transit or misdirecting the client's 
>       connection. Also, tricking a client into sending privileged 
>       information to a hostile entity that appears to be the directory 
>       but is not. 
> 
>   Threats (1), (4), (5) and (6) are due to hostile clients. Threats 
>   (2), (3) and (7) are due to hostile agents on the path between 
>   client and server or hostile agents posing as a server. 
> 
>   The LDAP protocol suite can be protected with the following security 
>   mechanisms: 

s/protocol suite//  (the P in LDAP stands for Protocol and suite is
meaningless in this context)

>   (1) Client authentication by means of the SASL [SASL] mechanism set, 
>       possibly backed by the TLS [RFC2246] credentials exchange 
>       mechanism, 
> 
>   (2) Client authorization by means of access control based on the 
>       requestor's authenticated identity, 
> 
>   (3) Data integrity protection by means of the TLS protocol or SASL 
>       mechanisms that provide data integrity services, 
>
> 
>   (4) Data confidentiality protection against snooping by means of the 
>       TLS protocol or SASL mechanisms that provide data 
>       confidentiality services, 
>
>   (5) Server resource usage limitation by means of administrative 
>       service limits configured on the server, and 
> 
>   (6) Server authentication by means of the TLS protocol or SASL 
>       mechanism. 
> 
>   At the moment, imposition of access controls is done by means 
>   outside the scope of the LDAPv3 protocol. 
>    
>   It seems clear that allowing any implementation, faced with the 
>   above requirements, to simply pick and choose among the possible 
>   alternatives is not a strategy that is likely to lead to 
>   interoperability. In the absence of mandates, clients will be 
>   written that do not support any security function supported by the 
>   server, or worse, they will support only mechanisms like the LDAPv3 
>   simple bind using clear text passwords that provide inadequate 
>   security for most circumstances. 
> 
>   Given the presence of the Directory, there is a strong desire to see 
>   mechanisms where identities take the form of an LDAP distinguished 
>   name [LDAPDN] and authentication data can be stored in the 
>   directory.  This means that this data must be updated outside the 
>   protocol or only updated in sessions well protected against 
>   snooping. It is also desirable to allow authentication methods to 
>   carry authorization identities based on existing--non-LDAP DN--forms 
>   of user identities for backwards compatibility with non-LDAP-based 
>   authentication services. 
>    
>   The set of security mechanisms provided in LDAPv3 and described in 
>   this document is intended to meet the security needs for a wide 
>   range of deployment scenarios and still provide a high degree of 
>   interoperability among various LDAPv3 implementations and 
>   deployments. Appendix A contains example deployment scenarios that 
>   list the mechanisms that might be used to achieve a reasonable level 
>   of security in various circumstances. 
> 
>2. Conventions Used in this Document 
>    
>2.1. Glossary of Terms 
>    
>   The following terms are used in this document. To aid the reader, 
>   these terms are defined here. 
>    
>     - "user" represents any application which is an LDAP client using 
>       the directory to retrieve or store information. 

A couple of problems with this definition of user.  Aside from the
confusing use of "application" here, this basically equates "user"
with "client".   Given this definition, what does "user-oriented client"
mean.

I think it would be better to define "user" as follows

	The human or application entity which is accessing the directory
	using a directory client.  A directory client (or client) is
    also known as a directory user agent (DUA).

>     - "connection" and "LDAP connection" both refer to the underlying 
>       transport protocol connection between two protocol peers.  
>      
>     - "TLS connection" refers to a TLS-protected LDAP connection.  
>      
>     - "association" and "LDAP association" both refer to the 
>       association of the LDAP connection and its current 
>       authentication and authorization state. 
>    
>2.2. Security Terms and Concepts 
>    
>   In general, security terms in this document are used consistently 
>   with the definitions provided in [RFC2828]. In addition, several 
>   terms and concepts relating to security, authentication, and 
>   authorization are presented in Appendix B of this document. While 
>   the formal definition of these terms and concepts is outside the 
>   scope of this document, an understanding of them is prerequisite to 
>   understanding much of the material in this document. Readers who are 
>   unfamiliar with security-related concepts are encouraged to review 
>   Appendix B before reading the remainder of this document. 
> 
>2.3. Keywords 
>    
>   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 RFC 2119 [RFC2119]. 
> 
>3. Bind Operation 
>     
>   The Bind operation defined in section 4.2 of [Protocol] allows 
>   authentication information to be exchanged between the client and 
>   server.  
>    
>3.1. Unbound Connection Treated as Anonymous ("Implied Anonymous Bind") 
>    
>   Unlike LDAP version 2, the client need not send a Bind Request in 
>   the first PDU of the connection. The client may send any operation 
>   request prior to binding, and the server MUST treat it as if it had 
>   been performed after an anonymous bind operation.  If the server 
>   requires that the client bind before browsing or modifying the 
>   directory, the server MAY reject a request other than binding, 
>   unbinding or an extended request with the "operationsError" result. 

(note: don't wrap result codes with quotes... they aren't strings.)

I have a number of concerns with how this statement is worded.
	- An "unbound connection" is a confusing term as a "bound"
	can mean "established".
    - server may reject most extended requests with operationsError
	when issued prior to the bind operation.
	- protocol issues should be left to [Protocol]. 

I suggest merging the section into the parent section and
replacing the paragraph (that is, this would become the second
paragraph of section 3).

	The Bind Operation is used to establish a new LDAP association.
	The new LDAP association is established upon successful
	completion of the authentication exchange.  During any
	authentication exchange and prior to the successful completion
	of first operation, the sesssion has an anonymous LDAP
	association.

(leaving protocol issues (e.g., operationsError) to [Protocol]).

>3.2. Simple Authentication  
>    
>   The simple authentication option provides minimal authentication 
>   facilities, with the contents of the authentication field consisting 
>   only of a cleartext password.

s/option/choice/
Also needs to expanded to discuss different simple authentication
modes.

	The simple authentication choice provides minimal facilities
	for establishing an anonymous association or for establishing an
    LDAP association based upon creditials consisting of a name (in the
    form of a DN) and a password.

	The simple authentication choice provides two different methods
	for establishing an anonymous association: anonymous simple
    bind (or anonymous bind) and unauthenticated simple bind (or
	unauthenticated bind).

	The simple authentication choice provides one method for establishing
	a non-anonymous association: simple password bind.

>   Note that the use of cleartext 
>   passwords is strongly discouraged over open networks when the 
>   underlying transport service cannot guarantee confidentiality (see 
>   section 8).  

>3.3. SASL Authentication Profile 
>    
>   LDAP allows authentication via any SASL mechanism [SASL]. As LDAP 
>   includes native anonymous and plaintext authentication methods, the 
>   "ANONYMOUS" [ANONYMOUS] and "PLAIN" [PLAIN] SASL mechanisms are 
>   typically not used with LDAP. 
> 
>   Each protocol that utilizes SASL services is required to supply 
>   certain information profiling the way they are exposed through the 
>   protocol ([SASL] section 5). This section explains how each of these 
>   profiling requirements are met by LDAPv3. 
>    
>3.3.1. SASL Service Name for LDAP 
> 
>   The SASL service name for LDAPv3 is "ldap", which has been 
>   registered with the IANA as a GSSAPI service name. 

We need to request IANA update the GSSAPI service name registry
to point to [ROADMAP] and this document.  Suggest this be addressed
in the IANA Considerations section of this document.

>3.3.2. SASL authentication initiation and protocol exchange 
>    
>   SASL authentication is initiated via an LDAP bind request 
>   ([Protocol] section 4.2) with the following parameters: 
>    
>      - The version is 3. 
>      - The AuthenticationChoice is sasl.  
>      - The mechanism element of the SaslCredentials sequence contains 
>        the value of the desired SASL mechanism.  
>      - The optional credentials field of of the SaslCredentials 

s/of of/of/
>        sequence may be used to provide an initial client response for 
>        mechanisms that are defined to have the client send data first 
>        (see [SASL] sections 5 and 6.1). 
>    
>   In general, a SASL authentication protocol exchange consists of a 
>   series of server challenges and client responses, the contents of 

I think the word "protocol" can be dropped here.

>   which are specific to and defined by the SASL mechanism. Thus for 
>   some SASL authentication mechanisms, it may be necessary for the 
>   client to respond to one or more server challenges by invoking the 
>   BindRequest multiple times. A challenge is indicated by the server 
>   sending a BindResponse with the resultCode set to 
>   saslBindInProgress. This indicates that the server requires the 
>   client to send a new bind request, with the same sasl mechanism to 
>   continue the authentication process. 
>
>   To the encapsulating protocol, these challenges and responses are 
>   opaque binary tokens of arbitrary length. LDAP servers use the 
>   serverSaslCreds field, an OCTET STRING, in a bind response message 
>   to transmit each challenge. LDAP clients use the credentials field, 
>   an OCTET STRING, in the SaslCredentials sequence of a bind request 
>   message to transmit each response. Note that unlike some Internet 
>   application protocols where SASL is used, LDAP is not text-based, 
>   thus no Base64 transformations are performed on these challenge and 
>   response values. 
>    
>   Clients sending a bind request with the sasl choice selected SHOULD 
>   NOT send a value in the name field. Servers receiving a bind request 
>   with the sasl choice selected SHALL ignore any value in the name 
>   field. 
>    
>   A client may abort a SASL bind negotiation by sending a BindRequest 
>   with a different value in the mechanism field of SaslCredentials, or 
>   an AuthenticationChoice other than sasl.  
>        
>   If the client sends a BindRequest with the sasl mechanism field as 
>   an empty string, the server MUST return a BindResponse with 
>   authMethodNotSuppored as the resultCode. This will allow clients to 
>   abort a negotiation if it wishes to try again with the same SASL 
>   mechanism. 
>    
>   The server indicates completion of the SASL challenge-response 
>   exchange  by responding with a bind response in which the resultCode 
>   is either success, or an error indication. 

s/exchange  by/exchange by/  (remove extra space)

>   The serverSaslCreds field in the bind response can be used to 
>   include an optional challenge with a success notification for 
>   mechanisms which are defined to have the server send additional data 
>   along with the indication of successful completion. 
> 
>3.3.3. Octet where negotiated security mechanisms take effect 
>    
>   If any SASL-based integrity or confidentiality services are enabled, 
>   they take effect following the transmission by the server and 
>   reception by the client of the final BindResponse with a resultCode 
>   of success.  

s/integrity or confidentiality services/security layers/

I suggest this be reworded
	When negotiated, SASL security layers take effect following the
	transmission by the server and reception by the client of the
	final BindResponse in the exchange.

>3.3.4. Determination of supported SASL mechanisms 
>    
>   An LDAP client may determine the SASL mechanisms a server supports 
>   by performing a search request on the root DSE, requesting the 
>   supportedSASLMechanisms attribute. The values of this attribute, if 
>   any, list the mechanisms the server supports. 

Add note (or reference) here regarding checking supportedSASLMechanisms
post-bind to prevent downgrade attacks.
 
>3.3.5. Rules for using SASL security layers 
>    
>   If a SASL security layer is negotiated, the client MUST discard all 
>   information about the server fetched prior to the initiation of the 
>   SASL negotiation.

Too strong: I suggest SHOULD instead of MUST because a client,
understanding the implications of not doing so, should be allowed
not to discard certain infornmation fetched prior to the initiation.
In fact, how could the client compare before/after advertised SASL
mechanisms (and other features) if it was required to discard the
before information prior to the check.

Too broad: this mandates that information obtained in a secure
information be discarded.  There is no good reason to mandate this.
Suggest "all" be replaced with "information not otherwise secured"
or something.  Without this, this requirement could be viewed as
requiring implementations to discard information (such as identity
information learned through secure lower-level mechanisms).

>   If the client is configured to support multiple 
>   SASL mechanisms, it SHOULD fetch the supportedSASLmechanisms list 
>   both before and after the SASL security layer is negotiated. This 
>   allows the client to detect active attacks that remove supported 
>   SASL mechanisms from the supportedSASLMechanisms list and allows the 
>   client to ensure that it is using the best mechanism supported by 
>   both client and server. (This requirement is a SHOULD to allow for 
>   environments where the supportedSASLMechanisms list is provided to 
>   the client through a different trusted source, e.g. as part of a 
>   digitally signed object.) 

>   If a lower level security layer (such as TLS) is negotiated, any 
>   SASL security services SHALL be layered on top of such security 
>   layers regardless of the order of their negotiation. 
> 
>3.3.6. Use of EXTERNAL SASL Mechanism 
>    
>   A client can use the "EXTERNAL" SASL mechanism to request the LDAP 
>   server to make use of security credentials exchanged by a lower 
>   layer. If a TLS session has not been established between the client 
>   and server prior to making the SASL EXTERNAL Bind request and there 
>   is no other external source of authentication credentials (e.g. IP-
>   level security [RFC2401]), or if during the process of establishing 
>   the TLS session, the server did not request the client's 
>   authentication credentials, the SASL EXTERNAL bind MUST fail with a 
>   resultCode of inappropriateAuthentication.

This should be more simply worded:
	If authentication creditials have not been established at a lower-level
	(such as by TLS authentication), the SASL EXTERNAL bind MUST fail
	with a resultCode of inapprorpiateAuthentication.

>   Any client authentication 
>   and authorization state of the LDAP association is lost, so the LDAP 
>   association is in an anonymous state after the failure (see 
>   [Protocol] section 4.2.1). 

>3.4. SASL Authorization Identity 
> 
>   The authorization identity is carried as part of the SaslCredentials 
>   credentials field in the Bind request and response. 

Some mechanisms don't support authorization identities.
 
>   When the "EXTERNAL" SASL mechanism is being negotiated, if the 
>   credentials field is present, it contains an authorization identity 
>   of the authzId form described below. 

Delete "of the ..." here and (see below)
> 
>   Other mechanisms define the location of the authorization identity 
>   in the credentials field. 

add:
	In either case, the authorization identity is represented
	in the authzId form described below.

>3.4.1. Authorization Identity Syntax 
>    
>   The authorization identity is a string in the UTF-8 character set,  
>   corresponding to the following ABNF grammar [RFC2234]: 

s/in the UTF-8 character set/of [UTF-8] encoded [Unicode] characters/

>   ; Specific predefined authorization (authz) id schemes are 
>   ; defined below -- new schemes may be defined in the future. 
> 
>   authzId = dnAuthzId / uAuthzId 
> 
>   DNCOLON  = %x64 %x6e %x3a ; "dn:" 
>   UCOLON = %x75 %x3a ; "u:" 
>    
>   ; distinguished-name-based authz id. 
>   dnAuthzId = DNCOLON dn 
>   dn = utf8string    ; with syntax defined in [LDAPDN] section 3. 
> 
>   ; unspecified authorization id, UTF-8 encoded. 
> 
>   uAuthzId = UCOLON userid 
>   userid = utf8string    ; syntax unspecified 
>    
>   The dnAuthzId choice allows client applications to assert 
>   authorization identities in the form of a distinguished name.

add "to be matched in accordance with the distinguishedName
matching rule [Syntaxes]."

>  The 
>   decision to allow or disallow an authentication identity to have 
>   access to the requested authorization identity is a matter of local 
>   policy ([SASL] section 4.2). For this reason there is no requirement 
>   that the asserted dn be that of an entry in directory. 
>    
>   The uAuthzId choice allows for compatibility with client 
>   applications that wish to assert an authorization identity to a 
>   local directory but do not have that identity in distinguished name 
>   form. The format of utf8string is defined as only a sequence of UTF-
>   8 encoded ISO 10646 characters, and further interpretation is 
>   subject to prior agreement between the client and server. 

We need to say how two uAuthzIds are to be compared.  In particular,
we should require uAuthzIds be prepared using SASLprep before being
compared octet-wise.
 
>   For example, the userid could identify a user of a specific 
>   directory service, or be a login name or the local-part of an RFC 
>   822 email address. In general, a uAuthzId MUST NOT be assumed to be 
>   globally unique. 

The "in general" qualification to a MUST NOT implies that the MUST
NOT can be ignored in some cases.  Suggest dropping the "in general"
and s/MUST NOT/SHOULD NOT/.

>   Additional authorization identity schemes MAY be defined in future 
>   versions of this document. 

s/MAY/may/

>3.5. SASL Integrity and Privacy Protections 

It would be better to use the term "security layers" here.
SASL securary layers can offer a wide range of protective
services.

>   Any negotiated SASL integrity and privacy protections SHALL start on 
>   the first octet of the first LDAP PDU following successful 
>   completion of the SASL bind operation. If lower level security layer 
>   is negotiated, such as TLS, any SASL security services SHALL be 
>   layered on top of such security layers regardless of the order of 
>   their negotiation. 
> 
>4. Start TLS Operation 
>    
>   The Start Transport Layer Security (StartTLS) operation defined in 
>   section 4.13 of [Protocol] provides the ability to establish 
>   Transport Layer Security [RFC2246] on an LDAP association. 

Update the TLS reference to refer to draft-ietf-tls-rfc2246-bis-xx.txt.

>4.1. Sequencing of the Start TLS Operation 
> 
>   This section describes the overall procedures clients and servers 
>   must follow for TLS establishment. These procedures take into 
>   consideration various aspects of the overall security of the LDAP 
>   association including discovery of resultant security level and 
>   assertion of the client's authorization identity. 
> 
>   Note that the precise effects, on a client's authorization identity, 
>   of establishing TLS on an LDAP association are described in detail 
>   in section 4.2. 
> 
>4.1.1. Requesting to Start TLS on an LDAP Association 

s/LDAP Association/LDAP Connection/ (here and below)
> 
>   The client MAY send the Start TLS extended request at any time after 
>   establishing an LDAP association, except that in the following cases
>   the client MUST NOT send a Start TLS extended request: 
>        - if TLS is currently established on the connection, or 
>        - during a multi-stage SASL negotiation, or 
>        - if there are any LDAP operations outstanding on the 
>          connection. 

Suggest:
	The client may send the Start TLS request at any time after establishing
	the LDAP connection except:
		- when TLS is currently established on the connection,
		- when a multi-stage SASL negotiation is in progress on the connection, or
		- when there are one or more outstanding LDAP operations on the connection.

(Note the downcasing of the MAY and removal of the MUST.  The MUST is
removed because servers are required to handle these cases.)

>   The result of violating any of these requirements is a resultCode of 
>   operationsError, as described in [Protocol] section 4.13.2.2. Client 
>   implementers should note that it is possible to get back a 
>   resultCode of success in the case where LDAP operations are 
>   outstanding on the connection at the time a Start TLS operation 
>   request is sent by the client but they are processed by the server 
>   prior to its receiving the Start TLS request from the client. 
>   Implementors should ensure that they do not inadvertently depend 
>   upon this race condition for proper functioning of their 
>   applications. 

I think the last two sentences need to be reworded a bit. I'll offer
text later (after I think about it a bit).

>   In particular, there is no requirement that the client have or have 
>   not already performed a Bind operation before sending a Start TLS 
>   operation request. The client may have already performed a Bind 
>   operation when it sends a Start TLS request, or the client might 
>   have not yet bound. 
>    
>   If the client did not establish a TLS connection before sending any 
>   other requests, and the server requires the client to establish a 
>   TLS connection before performing a particular request, the server 
>   MUST reject that request by sending a resultCode of 
>   confidentialityRequired or strongAuthRequired. In response, the 
>   client MAY send a Start TLS extended request, or it MAY choose to 
>   close the connection. 

Or issue other requests (such as issue SASL bind request).

I think the sentence can be deleted.

>4.1.2. Starting TLS 
> 
>   The server will return an extended response with the resultCode of 
>   success if it is willing and able to negotiate TLS.  It will return 
>   other resultCodes (documented in [Protocol] section 4.13.2.2) if it 
>   is unable to do so. 
>    
>   In the successful case, the client (which has ceased to transfer 
>   LDAP requests on the connection) MUST either begin a TLS negotiation 
>   or close the connection. The client will send PDUs in the TLS Record 
>   Protocol directly over the underlying transport connection to the 
>   server to initiate TLS negotiation [RFC2246]. 

Likely should state server requirements here as well.

> 
>4.1.3. TLS Version Negotiation 
> 
>   Negotiating the version of TLS or SSL to be used is a part of the 
>   TLS Handshake Protocol, as documented in [RFC2246]. Please refer to 
>   that document for details. 
> 
>4.1.4. Discovery of Resultant Security Level 
> 
>   After a TLS connection is established on an LDAP association, both 
>   parties MUST individually decide whether or not to continue based on 
>   the privacy level achieved. Ascertaining the TLS connection's 
>   privacy level is implementation dependent, and accomplished by 
>   communicating with one's respective local TLS implementation. 

s/privacy/security/

>   If the client or server decides that the level of authentication or 
>   privacy is not high enough for it to continue, it SHOULD gracefully 
>   close the TLS connection immediately after the TLS negotiation has 
>   completed (see [Protocol] section 4.13.3.1 and section 4.2.3 below). 

s/privacy/security level/

>   If the client decides to continue, it MAY gracefully close the TLS 
>   connection and attempt to Start TLS again, it MAY send an unbind 
>   request, or it MAY send any other LDAP request. 

s/MAY/may/
 
>4.1.5. Assertion of Client's Authorization Identity 
> 
>   The client MAY, upon receipt of a Start TLS response indicating 
>   success, assert that a specific authorization identity be utilized 
>   in determining the client's authorization status. The client 
>   accomplishes this via an LDAP Bind request specifying a SASL 
>   mechanism of "EXTERNAL" [SASL] (see section 4.2.2 below). 

This section seems redundant with information in 4.2.

>4.1.6. Server Identity Check 
> 
>   The client MUST check its understanding of the server's hostname 
>   against the server's identity as presented in the server's 
>   Certificate message in order to prevent man-in-the-middle attacks. 
> 
>   Matching is performed according to these rules: 
>    
>     - The client MUST use the server hostname it used to open the LDAP 
>       connection as the value to compare against the server name as 
>       expressed in the server's certificate.  The client MUST NOT use 
>       any other derived form of name (including that derived by DNS 
>       canonicalization). 
>    
>     - If a subjectAltName extension of type dNSName is present in the 
>       certificate, it SHOULD be used as the source of the server's 
>       identity. 
>    
>     - Matching is case-insensitive. 
>    
>     - The "*" wildcard character is allowed.  If present, it applies 
>       only to the left-most name component. 
>    
>       For example, *.bar.com would match a.bar.com and b.bar.com, but 
>       it would not match a.x.bar.com nor would it match bar.com.  If 
>       more than one identity of a given type is present in the 
>       certificate (e.g. more than one dNSName name), a match in any 
>       one of the set is considered acceptable. 
>    
>   If the hostname does not match the dNSName-based identity in the 
>   certificate per the above check, user-oriented clients SHOULD either 
>   notify the user (clients MAY give the user the opportunity to 
>   continue with the connection in any case) or terminate the 
>   connection and indicate that the server's identity is suspect. 

s/MAY/may/

>   Automated clients SHOULD close the connection, returning and/or 
>   logging an error indicating that the server's identity is suspect. 

>   Beyond the server identity checks described in this section, clients 
>   SHOULD be prepared to do further checking to ensure that the server 
>   is authorized to provide the service it is observed to provide. The 
>   client MAY need to make use of local policy information. 

s/MAY/may/
 
>4.1.7. Refresh of Server Capabilities Information 
> 
>   Upon TLS session establishment, the client MUST discard all 
>   information about the server fetched prior to the initiation of the 
>   TLS negotiation and MUST refresh any cached server capabilities 
>   information (e.g. from the server's root DSE; see [Model] section 
>   5.1). This is necessary to protect against active-intermediary 
>   attacks that may have altered any server capabilities information 
>   retrieved prior to TLS establishment.  

See 3.3.5 comments.

>   The server MAY advertise different capabilities after TLS 
>   establishment. In particular, the value of supportedSASLMechanisms 
>   MAY be different after TLS has been negotiated (specifically, the 
>   EXTERNAL and PLAIN [PLAIN] mechanisms are likely to be listed only 
>   after a TLS negotiation has been performed). 

s/MAY/may/ (in both cases)   That way, the sentences imply the need
for clients to deal with the case where different capabilities are
published.  Otherwise, these sentences imply that the differences
don't matter (as MAY implies a "truly optional" feature).
 
>4.2. Effects of TLS on a Client's Authorization Identity 
> 
>   This section describes the effects on a client's authorization 
>   identity brought about by establishing TLS on an LDAP association. 
>   The default effects are described first, and next the facilities for 
>   client assertion of authorization identity are discussed including 
>   error conditions. Finally, the effects of closing the TLS connection 
>   are described. 
> 
>   Authorization identities and related concepts are described in 
>   Appendix B. 
> 
>4.2.1. Default Effects 
>    
>   Upon establishment of the TLS session onto the LDAP association, any 
>   previously established authentication and authorization identities 
>   MUST remain in force, including anonymous state. This holds even in 
>   the case where the server requests client authentication via TLS -- 
>   e.g. requests the client to supply its certificate during TLS 
>   negotiation (see [RFC2246]). 

This MUST does not take into consider the servers right to change
the LDAP association.   That is, a server could return an appropriate
error code (such as strongAuthRequired) for all operations subsequent
to the Start TLS indicating that it consider the previously establish
LDAP association inappropriate.   As the protocol provides a mechanism
for the server to indicate to the client that the previous LDAP
association is inadequate, we've covered the key interoperability
concerns and, hence, the MUST is not needed.   I think a SHOULD with
note would be more appropriate.  The note would include (or reference)
a discussion of how servers indicate invalidated associations).

>4.2.2. Client Assertion of Authorization Identity 
>    
>   A client MAY either implicitly request that its LDAP authorization 
>   identity be derived from its authenticated TLS credentials or it MAY 
>   explicitly provide an authorization identity and assert that it be 
>   used in combination with its authenticated TLS credentials. The 
>   former is known as an implicit assertion, and the latter as an 
>   explicit assertion. 

First, s/MAY/may in both cases above.

Second, note that the client cannot assume the server uses TLS
established creditials to derive or otherwise establish the
LDAP association.  EXTERNAL means the server is to use lower-level
creditials in establishing the LDAP association.  The server can
use those provided by any lower layer.  From a protocol interoperability
point of view, it doesn't matter which.  The server just says "yea"
or "nay."

>4.2.2.1. Implicit Assertion 
>    
>   An implicit authorization identity assertion is accomplished after 
>   TLS establishment by invoking a Bind request of the SASL form using 
>   the "EXTERNAL" mechanism name [SASL] [Protocol] that SHALL NOT 
>   include the optional credentials octet string (found within the 
>   SaslCredentials sequence in the Bind Request).

s/SASL form/sasl choice [Protocol]/ and s/[SASL] [Protocol]/[SASL]/

>   The server will 
>   derive the client's authorization identity from the authentication 
>   identity supplied in the client's TLS credentials (typically a 
>   public key certificate) according to local policy. The underlying 
>   mechanics of how this is accomplished are implementation specific. 
>    
>4.2.2.2. Explicit Assertion 
>    
>   An explicit authorization identity assertion is accomplished after 
>   TLS establishment by invoking a Bind request of the SASL form using 
>   the "EXTERNAL" mechanism name [SASL] [Protocol] that SHALL include 
>   the credentials octet string. This string MUST be constructed as 
>   documented in section 3.4.1. 
>    
>   The server MUST verify that the client's authentication identity as 
>   supplied in its TLS credentials is permitted to be mapped to the 
>   asserted authorization identity. The server MUST reject the Bind 
>   operation with an invalidCredentials resultCode in the Bind response 
>   if the client is not so authorized. 
>    
>4.2.2.3. Error Conditions 
>    
>   Additionally, with either form of assertion, if a TLS session has 
>   not been established between the client and server prior to making 
>   the SASL EXTERNAL Bind request and there is no other external source 
>   of authentication credentials (e.g. IP-level security [RFC2401]), or 
>   if during the process of establishing the TLS session, the server 
>   did not request the client's authentication credentials, the SASL 
>   EXTERNAL bind MUST fail with a result code of 
>   inappropriateAuthentication. 

redundant with 3.3.6.
    
>   After the above Bind operation failures, any client authentication 
>   and authorization state of the LDAP association is lost (see 
>   [Protocol] section 4.2.1), so the LDAP association is in an 
>   anonymous state after the failure.  The TLS session state is 
>   unaffected, though a server MAY end the TLS session, via a TLS 
>   close_notify message, based on the Bind failure (as it MAY at any 
>   time). 
>    
>4.2.3. TLS Connection Closure Effects 
>    
>   Closure of the TLS session MUST cause the LDAP association to move 
>   to an anonymous authentication and authorization state regardless of 
>   the state established over TLS and regardless of the authentication 
>   and authorization state prior to TLS session establishment. 
> 
>    
>5. LDAP Association State Transition Tables 

I still need to review this table.  When I was reviewing Jeff's orginals,
I found it easier to separate TLS state from the LDAP association state.
This separation, I think, is good because EXTERNAL doesn't necessarily
rely on TLS state.

>   To comprehensively diagram the various authentication and TLS states 
>   through which an LDAP association may pass, this section provides a 
>   state transition table to represent a state diagram for the various 
>   states through which an LDAP association may pass during the course 
>   of its existence and the actions that cause these changes in state. 
>    
>5.1. LDAP Association States 
>    
>   The following table lists the valid LDAP association states and 
>   provides a description of each state. The ID for each state is used 
>   in the state transition table in section 5.4. 
> 
>   ID State Description 
>   -- -------------------------------------------------------------- 
>   S1 Anonymous 
>       no Authentication  ID is associated with the LDAP connection 
>       no Authorization ID is in force 
>       No security layer is in effect. 
>       No TLS credentials have been provided 
>       TLS: no Creds, OFF] 
>   S2 no Auth ID 
>       no AuthZ ID 
>       [TLS: no Creds, ON] 
>   S3 no Auth ID 
>       no AuthZ ID 
>       [TLS: Creds Auth ID "I", ON] 
>   S4 Auth ID = Xn 
>       AuthZ ID= Y 
>       [TLS: no Creds, OFF] 
>   S5 Auth ID = Xn 
>       AuthZ ID= Yn 
>       [TLS: no Creds, ON] 
>   S6 Auth ID = Xn 
>       AuthZ ID= Yn 
>       [TLS: Creds Auth ID "I", ON] 
>   S7 Auth ID = I 
>       AuthZ ID= J 
>       [TLS: Creds Auth ID "I", ON] 
>   S8 Auth ID = I 
>       AuthZ ID= K 
>       [TLS: Creds Auth ID "I", ON] 
> 
>5.2. Actions that Affect LDAP Association State 
>    
>   The following table lists the actions that can affect the state of 
>   an LDAP association. The ID for each action is used in the state 
>   transition table in section 5.4. 
>    
>   ID Action 
>
> 
> 
>   -- ------------------------------------------------ 
>   A1 Client binds anonymously 
>   A2 Inappropriate authentication: client attempts an anonymous 
>       bind or a bind without supplying credentials to a server that 
>       requires the client to provide some form of credentials. 
>   A3 Client Start TLS request 
>       Server: client auth NOT required 
>   A4 Client: Start TLS request 
>       Server: client creds requested 
>       Client: [TLS creds: Auth ID "I"] 
>   A5 Client or Server: send TLS closure alert ([Protocol] section 
>       X) 
>   A6 Client: Bind w/simple password or SASL mechanism (e.g. DIGEST-
>       MD5 password, Kerberos, etc., except EXTERNAL [Auth ID "X" 
>       maps to AuthZ ID "Y"] 
>   A7 Client Binds SASL EXTERNAL with credentials: AuthZ ID "J" 
>       [Explicit Assertion (section 4.2.1.2.2)] 
>   A8 Client Bind SASL EXTERNAL without credentials [Implicit 
>       Assertion (section 4.2.1.2.1)] 
>   A9 Client abandons a bind operation or bind operation fails 
>                                                  
>5.3. Decisions Used in Making LDAP Association State Changes 
>    
>   Certain changes in the state of an LDAP association are only allowed 
>   if the server can affirmatively answer a question. These questions 
>   are applied as part of the criteria for allowing or disallowing a 
>   state change in the state transition table in section 5.4.  
> 
>   ID Decision Question 
>   -- -------------------------------------------------------------- 
>   D1 Can TLS Credentials Auth ID "I" be mapped to AuthZ ID "J"? 
>   D2 Can a valid AuthZ ID "K" be derived from TLS Credentials Auth 
>       ID "I"? 
> 
>5.4. LDAP Association State Transition Table 
>    
>   The LDAP Association table below lists the valid states for an LDAP 
>   association and the actions that could affect them. For any given 
>   row in the table, the Current State column gives the state of an 
>   LDAP association, the Action column gives an action that could 
>   affect the state of an LDAP assocation, and the Next State column 
>   gives the resulting state of an LDAP association after the action 
>   occurs. 
>    
>   The initial state for the state machine described in this table is 
>   S1. 
> 
>   Current                 Next   
>    State  Action         State Comment 
>   ------- -------------  ----- ----------------------------------- 
>      S1    A1              S1    
>      S1    A2              S1   Error: Inappropriate authentication 
>      S1    A3              S2    
> 
> 
>      S1    A4              S3    
>      S1    A6              S4    
>      S1    A7               ?   identity could be provided by 
>                                  another underlying mechanism such 
>                                  as IPSec. 
>      S1    A8               ?   identity could be provided by 
>                                  another underlying mechanism such 
>                                  as IPSec. 
>      S2    A1              S2    
>      S2    A2              S2   Error: Inappropriate authentication 
>      S2    A5              S1    
>      S2    A6              S5    
>      S2    A7               ?   identity could be provided by 
>                                  another underlying mechanism such 
>                                  as IPSec. 
>      S2    A8               ?   identity could be provided by 
>                                  another underlying mechanism such 
>                                  as IPSec. 
>      S3    A1              S3    
>      S3    A2              S3   Error: Inappropriate authentication 
>      S3    A5              S1    
>      S3    A6              S6    
>      S3    A7 and D1=NO    S3   Error: InvalidCredentials 
>      S3    A7 and D1=YES   S7    
>      S3    A8 and D2=NO    S3   Error: InvalidCredentials 
>      S3    A8 and D2=YES   S8    
>      S4    A1              S1    
>      S4    A2              S1   Error: Inappropriate Authentication 
>      S4    A3              S5    
>      S4    A4              S6    
>      S4    A5              S1    
>      S4    A6              S4    
>      S4    A7               ?   identity could be provided by 
>                                  another underlying mechanism such 
>                                  as IPSec. 
>      S4    A8               ?   identity could be provided by 
>                                  another underlying mechanism such 
>                                  as IPSec. 
>      S5    A1              S2    
>      S5    A2              S2   Error: Inappropriate Authentication 
>      S5    A5              S1    
>      S5    A6              S5    
>      S5    A7               ?   identity could be provided by 
>                                  another underlying mechanism such 
>                                  as IPSec. 
>      S5    A8               ?   identity could be provided by 
>                                  another underlying mechanism such 
>                                  as IPSec. 
>      S6    A1              S3    
>      S6    A2              S2   Error: Inappropriate Authentication 
>      S6    A5              S1    
>      S6    A6              S6    
> 
> 
>      S6    A7 and D1=NO    S6   Error: InvalidCredentials 
>      S6    A7 and D1=YES   S7    
>      S6    A8 and D2=NO    S3   Error: InvalidCredentials 
>      S6    A8 and D2=YES   S8    
>      S7    A1              S3    
>      S7    A2              S2   Error: Inappropriate Authentication 
>      S7    A5              S1    
>      S7    A6              S6    
>      S7    A7              S7    
>      S7    A8 and D2=NO    S3   Error: InvalidCredentials 
>      S7    A8 and D2=YES   S8    
>      S8    A1              S3    
>      S8    A2              S2   Error: Inappropriate Authentication 
>      S8    A5              S1    
>      S8    A6              S6    
>      S8    A7 and D1=NO    S6   Error: InvalidCredentials 
>      S8    A7 and D1=YES   S7    
>      S8    A8              S8    
>     Any   A9              S1   See [Protocol] section 4.2.1. 
> 
> 
>6. Anonymous Authentication 
> 
>   Directory operations that modify entries or access protected 
>   attributes or entries generally require client authentication. 
>   Clients that do not intend to perform any of these operations 
>   typically use anonymous authentication. Servers SHOULD NOT allow 
>   clients with anonymous authentication to modify directory entries or 
>   access sensitive information in directory entries. 
> 
>   LDAP implementations MUST support anonymous authentication, as 
>   defined in section 6.1. 

I think this should be a SHOULD.  A client which only implements
DIGEST-MD5 authentication should be considered fully compliant.
Otherwise, we're requiring clients which only need to implement
DIGEST-MD5 (say because they update the directory) to implement
anonymous authentication.

Now, I think server implementations MUST support anonymous authentication.

>   LDAP implementations MAY support anonymous authentication with TLS, 
>   as defined in section 6.2. 
> 
>   While there MAY be access control restrictions to prevent access to 
>   directory entries, an LDAP server SHOULD allow an anonymously-bound 
>   client to retrieve the supportedSASLMechanisms attribute of the root 
>   DSE. 
> 
>   An LDAP server MAY use other information about the client provided 
>   by the lower layers or external means to grant or deny access even 
>   to anonymously authenticated clients. 

s/even//

>6.1. Anonymous Authentication Procedure 
> 
>   An LDAPv3 client that has not successfully completed a bind 
>   operation on a connection is anonymously authenticated. See section 
>   3.1. 
> 
>   An LDAP client MAY also choose to explicitly bind anonymously. A 
>   client that wishes to do so MUST choose the simple authentication 
>   option in the Bind Request and set the password to be of zero 
>   length. (This is often done by LDAPv2 clients.) Typically the name 
>   is also of zero length.  

I think we also need to RECOMMEND the name to be zero length.
A non-zero length name with empty password is considered an
unauthenticated bind.  The server may treat these differently
than anonymous binds.

>6.2. Anonymous Authentication and TLS 
> 
>   An LDAP client MAY use the Start TLS operation (section 5) to 
>   negotiate the use of TLS security [RFC2246]. If the client has not 
>   bound beforehand, then until the client uses the EXTERNAL SASL 
>   mechanism to negotiate the recognition of the client's certificate, 
>   the client is anonymously authenticated. 
> 
>   Recommendations on TLS ciphersuites are given in section 9. 
> 
>   An LDAP server which requests that clients provide their certificate 
>   during TLS negotiation MAY use a local security policy to determine 
>   whether to successfully complete TLS negotiation if the client did 
>   not present a certificate which could be validated. 
> 
>7. Password-based Authentication 
>    
>   This section discusses various options for performing password-based 
>   authentication to LDAPv3 compliant servers and the environments 
>   suitable for their use. 
> 
>7.1. Simple Authentication 
> 
>   The LDAP "simple" authentication choice is not suitable for 
>   authentication in environments where there is no network or 
>   transport layer confidentiality.  LDAP implementations SHOULD support 
>   authentication with the "simple" authentication choice when the 
>   connection is protected against eavesdropping using TLS, as defined 
>   in section 4. LDAP implementations SHOULD NOT support authentication 
>   with the "simple" authentication choice unless the data on the 
>   connection is protected using TLS or other data confidentiality and 
>   data integrity protection. 
> 
>7.2. Digest Authentication 
>    
>   LDAP servers that implement any authentication method or mechanism 
>   (other than simple anonymous bind) MUST implement the SASL 
>   DIGEST-MD5 mechanism [DigestAuth]. 
>    
>   Support for subsequent authentication is OPTIONAL in clients and 
>   servers. 
>    
>   Implementors must take care to ensure that they maintain the 
>   semantics of the DIGEST-MD5 specification even when handling data 
>   that has different semantics in the LDAP protocol. 
>   For example, the SASL DIGEST-MD5 authentication mechanism utilizes 
>   realm and username values ([DigestAuth section 2.1) which are 
>   syntactically simple strings and semsantically simple realm and 
>   username values. These values are not LDAP DNs, and there is no 
>   requirement that they be represented or treated as such. Username 
>   and realm values that look like LDAP DNs in form, e.g. "cn=bob, 
>   o=Ace Industry ", are syntactically allowed, however DIGEST-MD5 
>   treats them as simple strings for comparison purposes. To illustrate 
>   further, the two DNs "cn=bob, o=Ace Industry" (space between RDNs) 
>   and "cn=bob,o=Ace Industry" (no space between RDNs) would be 
>   equivalent when being compared semantically as LDAP DNs, however 
>   they are not equivalent if they were used to represent username 
>   values in DIGEST-MD5 because simple octet-wise comparision semantics 
>   are used by DIGEST-MD5.  
>    
> 
>7.3. "simple" authentication choice under TLS encryption 
>    
>   Following the negotiation of an appropriate TLS ciphersuite 
>   providing connection confidentiality [RFC2246], a client MAY 
>   authenticate to a directory that supports the simple authentication 
>   choice by performing a simple bind operation 
>    
>   Simple authentication with TLS encryption protection is performed as 
>   follows:   
>    
>      1. The client will use the Start TLS operation [Protocol] to 
>        negotiate the use of TLS security [RFC2246] on the connection 
>        to the LDAP server. The client need not have bound to the 
>        directory beforehand. 
>      
>         For the subsequent authentication procedure to be performed 
>         securely, the client and server MUST negotiate a ciphersuite 
>         which contains a bulk encryption algorithm of appropriate 
>         strength. Recommendations on cipher suites are given in 
>         section 9. 
>    
>      2. Following the successful completion of TLS negotiation, the 
>         client MUST send an LDAP bind request with the version number 
>         of 3, the name field containing a DN, and the "simple" 
>         authentication choice, containing a password. 
>    
>7.3.1. "simple" Authentication Choice  
> 
>   DSAs that map the DN sent in the bind request to a directory entry 
>   with an associated set of one or more passwords will compare the 
>   presented password to the set of passwords associated with that 
>   entry. If the presented password matches any member of that set, 
>   then the server will respond with resultCode success, otherwise the 
>   server will respond with resultCode invalidCredentials. 
>    
>7.4. Other authentication choices with TLS 
>    
>   It is also possible, following the negotiation of TLS, to perform a 
>   SASL authentication that does not involve the exchange of plaintext 
>   reusable passwords. In this case the client and server need not 
>   negotiate a ciphersuite that provides confidentiality if the only 
>   service required is data integrity. 
>    
> 
> 
>8. Certificate-based authentication 
> 
>   LDAP server implementations SHOULD support authentication via a 
>   client certificate in TLS, as defined in section 8.1. 
> 
>8.1. Certificate-based authentication with TLS 
> 
>   A user who has a public/private key pair in which the public key has 
>   been signed by a Certification Authority may use this key pair to 
>   authenticate to the directory server if the user's certificate is 
>   requested by the server. The user's certificate subject field SHOULD 
>   be the name of the user's directory entry, and the Certification 
>   Authority that issued the user's certificate must be sufficiently 
>   trusted by the directory server in order for the server to process 
>   the certificate. The means by which servers validate certificate 
>   paths is outside the scope of this document. 
> 
>   A server MAY support mappings for certificates in which the subject 
>   field name is different from the name of the user's directory entry. 
>   A server which supports mappings of names MUST be capable of being 
>   configured to support certificates for which no mapping is required. 
> 
>   The client will use the Start TLS operation [Protocol] to negotiate 
>   the use of TLS security [RFC2246] on the connection to the LDAP 
>   server. The client need not have bound to the directory beforehand. 
> 
>   In the TLS negotiation, the server MUST request a certificate. The 
>   client will provide its certificate to the server, and the server 
>   MUST perform a private key-based encryption, proving it has the 
>   private key associated with the certificate. 
> 
>   In deployments that require protection of sensitive data in transit, 
>   the client and server MUST negotiate a ciphersuite that contains a 
>   bulk encryption algorithm of appropriate strength. Recommendations 
>   of cipher suites are given in section 9. 
> 
>   The server MUST verify that the client's certificate is valid. The 
>   server will normally check that the certificate is issued by a known 
>   certification authority (CA), and that none of the certificates on 
>   the client's certificate chain are invalid or revoked. There are 
>   several procedures by which the server can perform these checks. 
> 
>   Following the successful completion of TLS negotiation, the client 
>   will send an LDAP bind request with the SASL "EXTERNAL" mechanism. 
> 
>9. TLS Ciphersuites 
> 
>   A client or server that supports TLS MUST support 
>   TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA and MAY support other ciphersuites 
>   offering equivalent or better protection. 
>    
>   Several issues should be considered when selecting TLS ciphersuites 
>   that are appropriate for use in a given circumstance. These issues 
>   include the following: 
> 
> 
>    
>     - The ciphersuite's ability to provide adequate confidentiality 
>       protection for passwords and other data sent over the LDAP 
>       connection. Client and server implementers should recognize that 
>       some TLS ciphersuites provide no confidentiality protection 
>       while other ciphersuites that do provide confidentiality 
>       protection may be vulnerable to being cracked using brute force 
>       methods, especially in light of ever-increasing CPU speeds that 
>       reduce the time needed to successfully mount such attacks. 
>      
>       Client and server implementers SHOULD carefully consider the 
>       value of the password or data being protected versus the level 
>       of confidentially protection provided by the ciphersuite to 
>       ensure that the level of protection afforded by the ciphersuite 
>       is appropriate. 
>      
>     - The ciphersuite's vulnerability (or lack thereof) to man-in-the-
>       middle attacks. Ciphersuites vulnerable to man-in-the-middle 
>       attacks SHOULD NOT be used to protect passwords or sensitive 
>       data, unless the network configuration is such that the danger 
>       of a man-in-the-middle attack is tolerable. 
> 
>9.1. TLS Ciphersuites Recommendations 
>    
>   As of the writing of this document, the following recommendations 
>   regarding TLS ciphersuites are applicable. Because circumstances are 
>   constantly changing, this list must not be considered exhaustive, 
>   but is hoped that it will serve as a useful starting point for 
>   implementers.  
>    
>   The following ciphersuites defined in [RFC2246] MUST NOT be used for 
>   confidentiality protection of passwords or data: 
> 
>         TLS_NULL_WITH_NULL_NULL 
>         TLS_RSA_WITH_NULL_MD5 
>         TLS_RSA_WITH_NULL_SHA 
> 
>   The following ciphersuites defined in [RFC2246] can be cracked 
>   easily (less than a day of CPU time on a standard CPU in 2000) and 
>   are NOT RECOMMENDED for use in confidentiality protection of 
>   passwords or data. 
> 
>         TLS_RSA_EXPORT_WITH_RC4_40_MD5 
>         TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 
>         TLS_RSA_EXPORT_WITH_DES40_CBC_SHA 
>         TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA 
>         TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA 
>         TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA 
>         TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA 
>         TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 
>         TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA 
> 
>   The following ciphersuites are vulnerable to man-in-the-middle 
>   attacks: 
> 
> 
> 
>         TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 
>         TLS_DH_anon_WITH_RC4_128_MD5 
>         TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA 
>         TLS_DH_anon_WITH_DES_CBC_SHA 
>         TLS_DH_anon_WITH_3DES_EDE_CBC_SHA 
> 
>    
> 
>10. Security Considerations 
>    
>   Security issues are discussed throughout this memo; the 
>   (unsurprising) conclusion is that mandatory security is important 
>   and that session confidentiality protection is required when 
>   snooping is a problem. 
>    
>   Servers are encouraged to prevent modifications by anonymous users. 
>   Servers may also wish to minimize denial of service attacks by 
>   timing out idle connections, and returning the unwillingToPerform 
>   result code rather than performing computationally expensive 
>   operations requested by unauthorized clients. 
>    
>   Operational experience shows that clients can misuse unauthenticated 
>   access (simple bind with name but no password).  For example, a 
>   client program might authenticate a user via LDAP and then grant 
>   access to information not stored in the directory on the basis of 
>   completing a successful bind. Some implementations will return a 
>   success response to a simple bind that consists of a user name and 
>   an empty password thus leaving the impression that the client has 
>   successfully authenticated the identity represented by the user 
>   name, when in reality, the directory server has simply performed an 
>   anonymous bind.  For this reason, servers SHOULD by default reject 
>   authentication requests that have a DN with an empty password with 
>   an error of invalidCredentials. 
>    
>   Access control SHOULD always be applied when reading sensitive 
>   information or updating directory information. 
> 
>   A connection on which the client has not performed the Start TLS 
>   operation or negotiated a suitable SASL mechanism for connection 
>   integrity and encryption services is subject to man-in-the-middle 
>   attacks to view and modify information in transit. 
>    
>10.1.  Start TLS Security Considerations 
>    
>   The goals of using the TLS protocol with LDAP are to ensure 
>   connection confidentiality and integrity, and to optionally provide 
>   for authentication. TLS expressly provides these capabilities, as 
>   described in [RFC2246]. 
>    
>   All security gained via use of the Start TLS operation is gained by 
>   the use of TLS itself. The Start TLS operation, on its own, does not 
>   provide any additional security. 
>    
> 
> 
>   Once established, TLS only provides for and ensures confidentiality 
>   and integrity of the operations and data in transit over the LDAP 
>   association--and only if the implementations on the client and 
>   server support and negotiate it. The use of TLS does not provide or 
>   ensure for confidentiality and/or non-repudiation of the data housed 
>   by an LDAP-based directory server. Nor does it secure the data from 
>   inspection by the server administrators.  
>     
>   The level of security provided though the use of TLS depends 
>   directly on both the quality of the TLS implementation used and the 
>   style of usage of that implementation. Additionally, an active-
>   intermediary attacker can remove the Start TLS extended operation 
>   from the supportedExtension attribute of the root DSE. Therefore, 
>   both parties SHOULD independently ascertain and consent to the 
>   security level achieved once TLS is established and before beginning 
>   use of the TLS connection. For example, the security level of the 
>   TLS connection might have been negotiated down to plaintext. 
>    
>   Clients SHOULD either warn the user when the security level achieved 
>   does not provide confidentiality and/or integrity protection, or be 
>   configurable to refuse to proceed without an acceptable level of 
>   security. 
>    
>   Client and server implementors SHOULD take measures to ensure proper 
>   protection of credentials and other confidential data where such 
>   measures are not otherwise provided by the TLS implementation. 
>    
>   Server implementors SHOULD allow for server administrators to elect 
>   whether and when connection confidentiality and/or integrity is 
>   required, as well as elect whether and when client authentication 
>   via TLS is required. 
>    
>   Additional security considerations relating to the EXTERNAL 
>   mechanism to negotiate TLS can be found in [SASL] and [RFC2246]. 
>    
>11. IANA Considerations 
>    
>   The following IANA considerations apply to this document: 
>    
>   [To be completed] 
>    
>Contributors 
>    
>   This document combines information originally contained in RFC 2829 
>   and RFC 2830. The editor acknowledges the work of Harald Tveit 
>   Alvestrand, Jeff Hodges, Tim Howes, Steve Kille, RL "Bob" Morgan , 
>   and Mark Wahl, each of whom authored one or more of these documents. 
>    
>Acknowledgements 
> 
>   This document is based upon input of the IETF LDAP Revision working 
>   group. The contributions and suggestions made by its members in 
>   shaping the contents and technical accuracy of this document is 
>   greatly appreciated. 
> 
> 
>    
>Normative References 
> 
>   [RFC2119] Bradner, S., "Key Words for use in RFCs to Indicate 
>       Requirement Levels", BCP 14, RFC 2119, March 1997. 
>    
>   [RFC2234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax 
>       Specifications: ABNF", RFC 2234, November 1997. 
> 
>   [RFC2246] Dierks, T. and C. Allen. "The TLS Protocol Version 1.0", 
>       RFC 2246, January 1999. 

Reference 2246bis I-D instead.
 
>   [DigestAuth] Leach, P. C. Newman, and A. Melnikov, "Using Digest 
>      Authentication as a SASL Mechanism", draft-ietf-sasl-rfc2831bis-
>      xx.txt, a work in progress.  
>    
>   [LDAPDN] Zeilenga, Kurt D. (editor), "LDAP: String Representation of 
>      Distinguished Names", draft-ietf-ldapbis-dn-xx.txt, a work in 
>      progress. 
>    
>   [Model] Zeilenga, Kurt D. (editor), "LDAP: Directory Information 
>       Models", draft-ietf-ldapbis-models-xx.txt, a work in progress. 
>    
>   [Protocol] Sermersheim, J., "LDAP: The Protocol", draft-ietf-
>       ldapbis-protocol-xx.txt, a work in progress. 
>    
>   [ROADMAP] K. Zeilenga, "LDAP: Technical Specification Road Map", 
>       draft-ietf-ldapbis-roadmap-xx.txt, a work in progress. 
>   [SASL] Melnikov, A. (editor), "Simple Authentication and Security 
>       Layer (SASL)", draft-ietf-sasl-rfc2222bis-xx.txt, a work in 
>       progress. 
>    
>    
>     
>Informative References 
> 
>   [ANONYMOUS] Zeilenga, K.,"Anonymous SASL Mechanism", draft-zeilenga-
>       sasl-anon-xx.txt, a work in progress. 
>    
>   [PLAIN] Zeilenga, K.,"Plain SASL Mechanism", draft-zeilenga-sasl-
>       plain-xx.txt, a work in progress. 
>    
>    [RFC2828] Shirey, R., "Internet Security Glossary", RFC 2828, May 
>       2000. 
>    
>   [RFC2401] Kent, S. and R. Atkinson, "Security Architecture for the 
>       Internet Protocol", RFC 2401, November 1998. 
> 
> 
>Author's Address 
> 
>   Roger Harrison 
>   Novell, Inc. 
>   1800 S. Novell Place 
> 
> 
>   Provo, UT 84606 
>   +1 801 861 2642 
>   [email-masked] 
> 
>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. 
>    
>Appendix A. Example Deployment Scenarios 
> 
>   The following scenarios are typical for LDAP directories on the 
>   Internet, and have different security requirements. (In the 
>   following discussion, "sensitive data" refers to information whose 
>   disclosure, alteration, destruction, or loss would adversely affect 
>   the interests or business of its owner or user. Also note that there 
>   may be data that is protected but not sensitive.) This is not 
>   intended to be a comprehensive list; other scenarios are possible, 
>   especially on physically protected networks. 
>    
>   (1) A read-only directory, containing no sensitive data, accessible 
>       to "anyone", and TCP connection hijacking or IP spoofing is not 
>       a problem. Anonymous authentication, described in section 7, is 
>       suitable for this type of deployment, and requires no additional 
>       security functions except administrative service limits. 
> 
>   (2) A read-only directory containing no sensitive data; read access 
>       is granted based on identity. TCP connection hijacking is not 
>       currently a problem. This scenario requires data confidentiality 
>       for sensitive authentication information AND data integrity for 
>       all authentication information. 
> 
>   (3) A read-only directory containing no sensitive data; and the 
>       client needs to ensure the identity of the directory server and 
>       that the directory data is not modified while being returned 
>       from the server. A data origin authentication service AND data 
>       integrity service are required. 
> 
>   (4) A read-write directory, containing no sensitive data; read 
>       access is available to "anyone", update access to properly 
>       authorized persons. TCP connection hijacking is not currently a 
>       problem. This scenario requires data confidentiality for 
>       sensitive authentication information AND data integrity for all 
>       authentication information. 
>    
>   (5) A directory containing sensitive data. This scenario requires 
>       data confidentiality protection AND secure authentication. 
> 
>Appendix B. Authentication and Authorization: Definitions and Concepts 
> 
>   This appendix defines basic terms, concepts, and interrelationships 
>   regarding authentication, authorization, credentials, and identity. 
>   These concepts are used in describing how various security 
>   approaches are utilized in client authentication and authorization. 
> 
>B.1. Access Control Policy 
> 
>   An access control policy is a set of rules defining the protection 
>   of resources, generally in terms of the capabilities of persons or 
>   other entities accessing those resources. A common expression of an 
>   access control policy is an access control list. Security objects 
>   and mechanisms, such as those described here, enable the expression 
>   of access control policies and their enforcement. Access control 
>   policies are typically expressed in terms of access control factors 
>   as described below. 
> 
>B.2. Access Control Factors 
> 
>   A request, when it is being processed by a server, may be associated 
>   with a wide variety of security-related factors (section 4.2 of 
>   [Protocol]). The server uses these factors to determine whether and 
>   how to process the request. These are called access control factors 
>   (ACFs). They might include source IP address, encryption strength, 
>   the type of operation being requested, time of day, etc. Some 
>   factors may be specific to the request itself, others may be 
>   associated with the connection via which the request is transmitted, 
>   others (e.g. time of day) may be "environmental". 
> 
>   Access control policies are expressed in terms of access control 
>   factors. E.g., a request having ACFs i,j,k can perform operation Y 
>   on resource Z. The set of ACFs that a server makes available for 
>   such expressions is implementation-specific. 
> 
>B.3. Authentication, Credentials, Identity 
> 
>   Authentication credentials are the evidence supplied by one party to 
>   another, asserting the identity of the supplying party (e.g. a user) 
>   who is attempting to establish an association with the other party 
>   (typically a server). Authentication is the process of generating, 
>   transmitting, and verifying these credentials and thus the identity 
>   they assert. An authentication identity is the name presented in a 
>   credential. 
> 
>   There are many forms of authentication credentials -- the form used 
>   depends upon the particular authentication mechanism negotiated by 
>   the parties. For example: X.509 certificates, Kerberos tickets, 
>   simple identity and password pairs. Note that an authentication 
>   mechanism may constrain the form of authentication identities used 
>   with it. 
> 
>B.4. Authorization Identity 
> 
>   An authorization identity is one kind of access control factor. It 
>   is the name of the user or other entity that requests that 
>   operations be performed. Access control policies are often expressed 
>   in terms of authorization identities; e.g., entity X can perform 
>   operation Y on resource Z. 
> 
>   The authorization identity bound to an association is often exactly 
>   the same as the authentication identity presented by the client, but 
>   it may be different. SASL allows clients to specify an authorization 
>   identity distinct from the authentication identity asserted by the 
>   client's credentials. This permits agents such as proxy servers to 
>   authenticate using their own credentials, yet request the access 
>   privileges of the identity for which they are proxying [SASL]. Also, 
>   the form of authentication identity supplied by a service like TLS 
>   may not correspond to the authorization identities used to express a 
>   server's access control policy, requiring a server-specific mapping 
>   to be done. The method by which a server composes and validates an 
>   authorization identity from the authentication credentials supplied 
>   by a client is implementation-specific.