• Para usar la configuración segura de ldap primero debemos tener los certificados correspondientes, primero creamos una clave privada con openssl.
root@apolo:~# openssl genrsa 4096 > /etc/ssl/private/apoloalexgv.key
  • Y usando esa clave creamos un certificado que deberá ser firmado por la unidad certificadora del gonzalo nazareno en nuestro caso.
root@apolo:~# openssl req -new -key /etc/ssl/private/apoloalexgv.key -out /root/apoloalexgv.csr
  • Con la clave, el certificado firmado y el certificado del gonzalo nazareno que descargaremos de gestiona tendremos todos los certificados necesarios, veamos donde se ubica cada uno.
root@apolo:~# ls /etc/ssl/private/
apoloalexgv.key

root@apolo:~# ls /etc/ssl/certs/ | egrep 'gonzalo|apolo'
apoloalexgv.crt
gonzalonazareno.crt
  • Para una mayor seguridad vamos a crear unas acls para que unicamente en usuario openldap tenga acceso a la clave privada.
root@apolo:~# setfacl -m u:openldap:r-x /etc/ssl/private
root@apolo:~# setfacl -m u:openldap:r-x /etc/ssl/private/apoloalexgv.key
  • Ahora necesitamos especificar el servicio de ldap que use SSL/TLS. Para ello crearemos un fichero ldif con la siguiente configuración.
dn: cn=config
changetype: modify
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/gonzalonazareno.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/apoloalexgv.key
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/apoloalexgv.crt
  • Vamos a realizar los cambios.
root@apolo:~# ldapmodify -Y EXTERNAL -H ldapi:/// -f ldaps.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
  • LDAPS usa el puerto 636, para que el serivicio lo use debemos modificar el fichero /etc/default/slapd tal que así:
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"
root@apolo:~# netstat -tlnp | egrep slap
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      29945/slapd         
tcp        0      0 0.0.0.0:636             0.0.0.0:*               LISTEN      29945/slapd         
tcp6       0      0 :::389                  :::*                    LISTEN      29945/slapd         
tcp6       0      0 :::636                  :::*                    LISTEN      29945/slapd 
  • Ahora debemos hacer que nuestro cliente apolo use por defecto este ldaps, para ello debemos copiar el certificado del gonzalo nazareno a la carpeta /usr/local/share/ca-certificates/ que es donde se alojan los certificados instalados localmente.
root@apolo:~# cp /etc/ssl/certs/gonzalonazareno.crt /usr/local/share/ca-certificates/
  • Una vez hecho esto actualizamos la lista de certificados locales.
root@apolo:~# update-ca-certificates
Updating certificates in /etc/ssl/certs...
rehash: warning: skipping duplicate certificate in gonzalonazareno.pem
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
  • Ahora ya podemos hacer consultas ldaps, vamos a comprobarlo.
root@apolo:~# ldapsearch -x -b "dc=alexgv,dc=gonzalonazareno,dc=org" -H ldaps://localhost:636
# extended LDIF
#
# LDAPv3
# base <dc=alexgv,dc=gonzalonazareno,dc=org> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# alexgv.gonzalonazareno.org
dn: dc=alexgv,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: alexgv.gonzalonazareno.org
dc: alexgv

# Usuarios, alexgv.gonzalonazareno.org
dn: ou=Usuarios,dc=alexgv,dc=gonzalonazareno,dc=org
objectClass: organizationalUnit
ou:: VXN1YXJpb3Mg

# Grupos, alexgv.gonzalonazareno.org
dn: ou=Grupos,dc=alexgv,dc=gonzalonazareno,dc=org
objectClass: organizationalUnit
ou: Grupos

# search result
search: 2
result: 0 Success

# numResponses: 4
# numEntries: 3
  • Funciona, pero hemos tenido que especificar que use el puerto que queremos, para que ldap use ldaps por defecto debemos ir al fichero /etc/ldap/ldap.conf donde encotraremos la siguiente línea comentada:
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666
  • La descomentamos y la modifcamos de la siguiente forma:
URI     ldaps://localhost
  • Ahora si, las consultas se hacen por defecto en ldaps.
root@apolo:~# ldapsearch -x -b "dc=alexgv,dc=gonzalonazareno,dc=org"
# extended LDIF
#
# LDAPv3
# base <dc=alexgv,dc=gonzalonazareno,dc=org> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# alexgv.gonzalonazareno.org
dn: dc=alexgv,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: alexgv.gonzalonazareno.org
dc: alexgv

# Usuarios, alexgv.gonzalonazareno.org
dn: ou=Usuarios,dc=alexgv,dc=gonzalonazareno,dc=org
objectClass: organizationalUnit
ou:: VXN1YXJpb3Mg

# Grupos, alexgv.gonzalonazareno.org
dn: ou=Grupos,dc=alexgv,dc=gonzalonazareno,dc=org
objectClass: organizationalUnit
ou: Grupos

# search result
search: 2
result: 0 Success

# numResponses: 4
# numEntries: 3