Anteriormente demostré cómo configurar TLS en OpenLDAP empleando la configuración estática (en el archivo slapd.conf
). Ahora voy a demostrar cómo hacerlo cuando se está utilizando la configuración dinámica cn=config (directorio slapd.d
)
Luego de instalar OpenLDAP en Linux, la configuración por defecto no incluye el soporte para TLS a pesar de que el puerto 636 se encuentra abierto y aceptando peticiones. Es posible verificar que TLS no funciona haciendo una consulta con ldapsearch
:
root@ldap:~# ldapsearch -x -H ldaps://localhost:636 -W -D "cn=root,dc=linuxito,dc=com" -b "dc=linuxito,dc=com" "(objectClass=organization)" Enter LDAP Password: ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
Antes de comenzar es necesario disponer de los certificados SSL (del servidor y autoridad certificante intermedia, en caso de ser necesario) junto con la clave privada. Si no se dispone de un certificado es posible crear un certificado autofirmado para pruebas.
Copiar los certificados y clave privada en un directorio ssl
dentro de la configuración de OpenLDAP:
# cd /usr/local/etc/openldap/ # mkdir ssl # mv /home/admin/server* ssl/
Setear los permisos adecuados para los certificados y clave. El usuario ldap debe poder leer los certificados y la clave privada, sino el demonio no inicia:
# chown -R root:ldap . # chmod 0400 * # chmod 0550 .
Deben quedar como se observa a continuación:
root@ldap:/usr/local/etc/openldap# ls -l ssl/server* -r--r----- 1 root ldap 2199 jun 23 09:51 ssl/server-ca.crt -r--r----- 1 root ldap 1704 jun 23 09:51 ssl/server.crt -r--r----- 1 root ldap 4135 jun 23 09:51 ssl/server.key
Habiendo comprobado que slapd no funciona sobre TLS, será necesario configurarlo. Cuando se utiliza la configuración dinámica (OLC), se debe crear un archivo ldiff para insertar con ldapadd
o ldapmodify
:
# nano tls_config.ldiff
Agregar el siguiente contenido:
# cn=config base (global section) dn: cn=config changetype: modify # Security - TLS section replace: olcTLSCertificateFile olcTLSCertificateFile: /usr/local/etc/openldap/ssl/server.crt - replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /usr/local/etc/openldap/ssl/server.key - replace: olcTLSCACertificateFile olcTLSCACertificateFile: /usr/local/etc/openldap/ssl/server-ca.crt - # the following directive is the default but # is explicitly included for visibility reasons replace: olcTLSVerifyClient olcTLSVerifyClient: never
Las variables olcTLSCertificateFile
, olcTLSCertificateKeyFile
y olcTLSCACertificateFile
configuran las rutas al certificado, clave privada y certificado de la autoridad certificante intermedia respectivamente.
Agregar la configuración en el ldiff con ldapadd
:
root@ldap:/usr/local/etc/openldap# ldapadd -f tls_config.ldiff -x -D "cn=admin,cn=config" -W Enter LDAP Password: modifying entry "cn=config"
Luego es necesario reiniciar el servicio:
# service slapd restart
Finalmente, verificar el funcionamiento haciendo una consulta sobre TLS:
root@ldap:/usr/local/etc/openldap# ldapsearch -x -H ldaps://localhost:636 -W -D "cn=root,dc=linuxito,dc=com" -b "dc=linuxito,dc=com" "(objectClass=organization)" Enter LDAP Password: # extended LDIF # # LDAPv3 # base <dc=linuxito,dc=com> with scope subtree # filter: (objectClass=organization) # requesting: ALL # # linuxito.com dn: dc=linuxito,dc=com objectClass: dcObject objectClass: organization dc: linuxito o: Linuxito description: El mejor blog sobre GNU/Linux de habla hispana # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Para más información, consultar las referencias a continuación.
Referencias
- How do I use TLS/SSL? - OpenLDAP Faq-O-Matic
- Chapter 15. LDAP Security - LDAP for Rocket Scientists
- Chapter 6.1.1: OpenLDAP using OLC (cn=config) - LDAP for Rocket Scientists
- Cómo implementar LDAP sobre SSL/TLS con OpenLDAP
- Cómo montar un servidor LDAP en Linux