Java y Active Directory (IV): conexión LDAP con SSL (LDAPS)

He dejado para la última entrega la operación más complicada de las que hemos visto. Una modificación de un objeto, pero no cualquier modificación de cualquier objeto: nada más y nada menos que el cambio de contraseña de un usuario. He dividido la entrada en dos partes, ya que primero necesitamos establecer una conexión cifrada a LDAP. Veamos esta primera parte.

En la primera parte de esta serie de artículos vimos como localizar los controladores de dominio a través del servicio DNS. En la segunda parte nos atrevimos a validar un usuario utilizando simplemente LDAP, y vimos que era fácil. En la tercera parte realizamos una búsqueda para encontrar a un usuario a través de su correo electrónico.

El cambio de contraseña de un usuario a través de LDAP presenta alguna peculiaridades que hay que tratar con especial "cariño". El primer requisito, imprescindible, es que toda comunicación durante la operación de modificación ha de estar protegida mediante SSL.

Conexión LDAPS

La conexión a LDAP sobre SSL se puede gestionar con las librerías estándar de Java a pesar de que es posible que haya que configurar un almacén personalizado de autoridades de certificación .

Los certificados que hay que pedir para cifrar esta comunicación son certificados de servidor convencionales (cómo los que pediríamos para un servidor web) donde el CN del servidor es su nombre de servidor canónico (no se puede usar el nombre del dominio y aprovechar el mismo certificado por todos los servidores).

Si hay que añadir los certificados raíz de la autoridad certificadora tenemos varias maneras de hacerlo. Una opción es configurar el servidor de aplicaciones para coger los nuevos certificados. También podemos hacerlo por código y utilizando un keystore propio.

Esta última opción es la escogida por el autor de este artículo (15/04/2015: Ha dejado de funcionar esa web, hay una copia en archive.org), en el que vemos como importar los certificados raíz en Windows y además crear una _keystore _con Java con esos mismos certificados y cargarla mediante código Java, fijando la propiedad javax.net.ssl.trustStore.

En el próximo artículo utilizaremos una conexión LDAPS para modificar la contraseña de un usuario mediante una cuenta de administrador y, lo que es más interesante, la propia contraseña del usuario sin necesitar ninguna cuenta privilegiada, tan sólo la antigua contraseña del usuario.

Entradas relacionadas: