La autentificaci�n CRAM-MD es uno de los mecanismos SASL que fue propuesto en un principio como mecanismo requerido para servidores LDAP v3. Ha sido desplazado por DIGEST-MD5. Sin embargo, algunos servidores existentes, como el Netscape Directory Server, soportan CRAM-MD5. Como el uso de SASL es parte del LDAP v3 (RFC 2251), los servidores que s�lo soportan LDAP v2, no soportan CRAM-MD5.
Cuando usamos el mecanismo CRAM-MD5, el servidor LDAP env�a algunos datos al cliente LDAP. El cliente responde encriptando los datos con su password usando el algoritmo MD5. Entonces el servidor LDAP usa la password almacenada del cliente para determinar si el cliente ha usado la password correcta.
Para usar el mecanismo de autentificaci�n CRAM-MD5, debemos configurar las propiedades de entorno de autentificaci�n de esta forma:
- Context.SECURITY_AUTHENTICATION.
- Configurada con el string "CRAM-MD5".
- Context.SECURITY_PRINCIPAL.
- Configurada con el nombre principal. De acuerdo a la RFC 2829, el nombre deber�a ser el string "dn:", seguido por el DN cualificado de la entidad que est� siendo autentificada, o el string "u:", seguido por la identidad del usuario. La forma requerida depende de la implementaci�n del servidor LDAP. Algunos ejemplo son: "dn: cn=C. User, ou=NewHires, o=JNDITutorial" y "u: cuser". Un borrador anterior de esta proposici�n no inclu�a el uso del prefijo "dn:", por eso algunos servidores podr�an aceptar simplemente el DN totalmente cualificado de la entidad que est� siendo autentificada (por ejemplo, "cn=C. User, ou=NewHires, o=JNDITutorial"). Debemos comprobar con nuestro servidor LDAP qu� nombre espera. En cualquier caso, el tipo de dato de esta propiedad debe ser java.lang.String.
- Context.SECURITY_CREDENTIALS.
- Configurado con las password principal. (por ejemplo, "mysecret"). Es del tipo java.lang.String, array de char (char[]), o array de byte (byte[]). Si la password es un java.lang.String o un array de char[], se convierten usando UTF-8 para transmitirla al servidor. Si la password es un array de byte[], se transmite directamente al servidor.
El siguiente ejemplo muestra c�mo un cliente realiza su autentificaci�n usando CRAM-MD5 sobre un servidor LDAP:
// Set up the environment for creating the initial context
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");
// Authenticate as C. User and password "mysecret"
env.put(Context.SECURITY_AUTHENTICATION, "CRAM-MD5");
env.put(Context.SECURITY_PRINCIPAL, "cn=C. User, ou=NewHires, o=JNDITutorial");
env.put(Context.SECURITY_CREDENTIALS, "mysecret");
// Create the initial context
DirContext ctx = new InitialDirContext(env);
// ... do something useful with ctx
|
Nota:
Netscape Directory Server v4.1 soporta el mecanismo CRAM-MD5 s�lo si instalamos alg�n software adicional en el servidor. De otra forma, intentar usar CRAM-MD5 con el servidor resultara en el lanzamiento de una CommunicationException. Puedes ver la documentaci�n del servidor para ver instrucciones de c�mo obtener e instalar el software. |