Autenticación de usuarios con ldap con SSL/TSL: Instalar y configurar servidor y clientes ldap


Dada su flexibilidad y la posibilidad de configurarlo para reemplazar un Active Directory de Windows, la autenticación por ldap se está utilizando cada vez mas. Mas aún en ambientes mixtos: linux/windows.
Aplicable a: Redhat/Fedora/CentOS

Instalación del Servidor:
Necesitamos instalar los siguientes paquetes para instalar el servidor ldap:
# yum -y install openldap openldap-clients openldap-servers authconfig authconfig-gtk

Creamos un directorio especifico para organizar la información:
# mkdir /var/lib/ldap/autenticar
# chmod 700 /var/lib/ldap/autenticar
# chown ldap.ldap /var/lib/ldap/autenticar

Creamos la passwd de acceso del administrador del directorio LDAP:
# slappasswd
La salida de este comando la utilizaremos en el archivo slapd.conf para indicar la passwd del administrador.
Editamos el archivo /etc/openldap/slapd.conf y verificamos o modificamos las siguientes líneas:

database bdb
suffix "dc=su-red-local,dc=com
"rootdn "cn=Administrator,dc=su-red-local,dc=com
"rootpw {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
directory /var/lib/ldap/autenticar

Starteamos el servicio y lo agregamos al arranque del sistema:
# service ldap start
# chkconfig –level 2345 ldap on

Migración de datos:
Editamos el archivo /usr/share/openldap/migration/migrate_common.ph y modificamos las variables $DEFAULT_MAIL_DOMAIN y $DEFAULT_BASE para que asuman nuestros valores de configuración.

Creamos un objeto base que contendrá el resto de los objetos del directorio:
# /usr/share/openldap/migration/migrate_base.pl > base.ldif 

Con ldapadd seteamos los datos de “base”:
# ldapadd -x -W -D ‘cn=Administrator, dc=su-red-local, dc=com’ -h 127.0.0.1 -f base.ldif
Migramos usuarios y grupos:
# /usr/share/openldap/migration/migrate_group.pl /etc/group group.ldif
# /usr/share/openldap/migration/migrate_passwd.pl /etc/passwd passwd.ldif
Con ldapadd los agregamos al directorio:
# ldapadd -x -W -D ‘cn=Administrator, dc=su-red-local, dc=com’ -h 127.0.0.1 -f group.ldif
# ldapadd -x -W -D ‘cn=Administrator, dc=su-red-local, dc=com’ -h 127.0.0.1 -f passwd.ldif

Verificamos que esté todo correcto hasta aquí:
Con este comando verificamos los directorios disponibles en el localhost:
# ldapsearch -h 127.0.0.1 -x -b ” -s base ‘(objectclass=*)’ namingContexts 
Este comando devuelve toda la información existente en el directorio:
# ldapsearch -x -b ‘dc=su-red-local,dc=com’ ‘(objectclass=*)’
Este comando devuelve la información especifica de un usuario:
# ldapsearch -x -b ‘uid=hvivani,ou=People,dc=su-red-local,dc=com’

Apertura de Puertos en Firewall / iptables:
Necesitamos abrir los puertos 389 y 636. Por defecto para las comunicaciones por ssl, escucha por el puerto 636. Si hacemos un “nmap localhost” en el servidor ldap y vemos que no está escuchando en el puerto 636 es que hay algún error en la configuración del SSL.

Se puede verificar también que en el /etc/init.d/ldap la llamada debe contener el “ldaps://”, sinó, no se abrirá nunca el puerto 636.
# Sección: Set default values
SLAPD_SERVICES=”ldap:/// ldaps:///”

Configuración de Clientes:

Debemos tener instalado el paquete openldap-clients:
# yum install openldap-clients
Creamos el directorio para almacenar los certificados:
# mkdir -p /etc/openldap/cacerts/

En el /etc/ldap.conf, establecemos las siguientes líneas:

URI ldap://servidor.su-red-local.com
BASE dc=su-red-local,dc=com
HOST su-red-local.com
TLS_CACERTDIR /etc/openldap/cacerts/
TLS_REQCERT allow

Descargamos el certificado generado en el servidor en los clientes. La forma mas simple es descargarlos con el comando openssl desde el cliente:
# openssl s_client -connect servidor.su-red-local.com:636 > fds_cacert.asc
Editamos el archivo fds_cacert.asc y le dejamos solo la info del certificado:
BEGIN CERTIFICATE—–
MIIBwjCCASugAwIBAgICA+kwDQYJKoZIhvcNAQEEBQAwETEPMA0GA1UEAxMGQ0Fj
ZXJ0MB4XDTA3MTEwMjAwMTkwMFoXDTE3MTEwMjAwMTkwMFowPDEgMB4GA1UECxMX
RmVkb3JhIERpcmVjdG9yeSBTZXJ2ZXIxGDAWBgNVBAMTD2RzMS52emxhLmdvYi52
ZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwqeOpO9FckLO55gCIq49yIpf
ikh4Ny1fcHJtFzPV0uMJgGkNEozqTMJ9D7Qtwfv2xmCVKF8AAKtTQBg3IlUMttA8
20lIA0lkrkD3dH36ix51N/NA53S2S7pyj8O3hsye6ZOTJ7KwY8LSLrpe41qKNLIC
sOvtcdcNRT/4OpIu+jUCAwEAATANBgkqhkiG9w0BAQQFAAOBgQAkaaJlp4V9aoCO
chigU9YZCQhr5VJOq6+QXh3FAvFZYmmbZfjwqovWDdPMXlmB8fledMuo0Q2Y6Pqu
cjiM5y+C43+ydvgHmo5Q5rViQnBbaXtWlAeI3IkIzcpzCCmL/cuJT1L65JBrs7eZ
33CAW2p2PLMVY8ORipIGaD0Wn98FXA==
—–END CERTIFICATE—–

Otra opción es utilizar el comando system-config-authentication y utilizar la opción “descargar certificado”. Para esto, previamente debemos habilitar el servidor http y dejar una copia del certificado disponible para descarga.