Debido a un problema de licencias con OpenSSL, los desarrolladores de Debian han decidido incorporar GNU TLS al paquete de OpenLDAP de esta distribución.
Este soporte no se ha incorporado oficialmente al proyecto OpenLDAP, y la implementación que se distribuye desde Debian no funciona correctamente. El principal problema que se ha presentado en la realización de esta documentación, relacionado con el soporte de gnutls por parte de OpenLDAP, ha sido que no reconoce el certificado generado en la Sección 4.2, “Creación de un certificado”, por lo que no puede verificar su autenticidad, y por lo tanto no se puede establecer una conexión segura.
La primera solución que se planteó, para poder llevar a cabo la parte de cifrado de esta documentación, fue el empleo de OpenSSL en detrimento de GNU TLS[11].
La solución pasaba por especificar, en las opciones de compilación de OpenLDAP, el empleo de OpenSSL para el cifrado (en Debian se utiliza GNU TLS por defecto). Para ello, y teniendo en cuenta el reporte 214753 [12] del sistema de seguimiento de errores de Debian, se recompiló el paquete OpenLDAP con esta nueva opción y se probó el funcionamiento del sistema.
Con el uso de OpenSSL, en lugar de GNU TLS, el certificado ya era reconocido y permitía realizar conexiones cifradas con el servidor LDAP. Pero ahora se presentaba un nuevo problema[13]: tras finalizar la ejecución de cualquier orden que implicara la conexión cifrada con el servidor LDAP, se obtenía una violación de segmento (segmentation fault). Este problema impedía, por ejemplo, hacer uso de las cuentas almacenadas en el directorio LDAP para acceder al sistema.
Después de un período de pruebas y análisis del problema, se consiguió solucionarlo, presentando la solución en la siguiente sección.
Después del planteamiento del problema (Sección 4.4.1, “Descripción del problema”), la solución que se ha llevado a cabo ha sido la de eliminar los parches aplicados por los desarrolladores de Debian, para dar soporte GNU TLS a OpenLDAP, entre otros.
![]() | Atención |
---|---|
De todas formas, ha de tomarse esta solución como algo temporal (a la espera de que se solucionen los problemas con el paquete de Debian). Si se desea hacer uso de cifrado junto con OpenLDAP en un entorno de producción, sería recomendable utilizar la versión oficial estable de OpenLDAP (en estos momentos es la versión 2.2.*), que todavía no tiene paquetes para Debian. |
En las siguientes secciones se muestran los pasos seguidos para aplicar la solución planteada.
Puede obtener el código fuente de la versión 2.1.30 de OpenLDAP de dos formas: a partir del proyecto OpenLDAP o de los distintos mirrors de Debian. Si opta por la segunda opción, tendrá que teclear la siguiente orden en un directorio en el que tenga permisos de escritura:
![]() | Nota |
---|---|
Asegúrese de tener una entrada deb-src en el archivo /etc/apt/sources.list que apunte a uno de los mirrors de Debian, para poder bajarse el código fuente de OpenLDAP. |
La solución planteada se muestra en forma de parche a las fuentes de OpenLDAP. Dependiendo de donde haya obtenido el código fuente, tendrá que aplicar uno u otro parche (ambos darán el mismo resultado):
Si ha obtenido el código fuente de OpenLDAP del proyecto oficial, ha de aplicar el siguiente parche: openldap-2.1.30-debianized.patch.bz2.
Si ha preferido obtener el código fuente desde Debian, ha de aplicar el siguiente parche: openldap-2.1.30-without-gnutls.patch.bz2.
El proceso para aplicar los parches es similar en ambas situaciones, por lo que aquí sólo se mostrará el proceso para una de ellas. Se aplicará el parche al código fuente obtenido desde Debian.
Ejemplo 4.14. Aplicando el parche a las fuentes de OpenLDAP
$ cd openldap2-2.1.30/ /usr/bin/bzcat ../openldap-2.1.30-without-gnutls.patch.bz2 | /usr/bin/patch -p1 patching file configure patching file configure.in patching file contrib/ldapc++/config.guess patching file contrib/ldapc++/config.sub patching file debian/changelog patching file debian/control patching file include/ldap_pvt_gnutls.h patching file include/portable.h.in patching file libraries/libldap/getdn.c patching file libraries/libldap/gnutls.c patching file libraries/libldap/Makefile.in patching file libraries/libldap/tls.c patching file libraries/libldap_r/Makefile.in patching file servers/slapd/schema_init.c |
El último paso, antes de proceder a recompilar el código, es la resolución de las dependencias de compilación de OpenLDAP. Para ello, ha de ejecutar:
Ejemplo 4.15. Resolviendo las dependencias de compilación para OpenLDAP
# /usr/bin/apt-get build-dep openldap2 |
La orden anterior instalará dos paquetes, libgnutls11-dev y libgcrypt11-dev, que no son necesarios tras aplicar el parche, por lo que puede desinstalarlos si lo considera oportuno.
Ahora ya está todo listo para proceder a recompilar el paquete, para ello teclee:
Tras la compilación, se habrán generado los siguientes paquetes:
Ejemplo 4.17. Listado de paquetes de OpenLDAP
$ /bin/ls -l ../*deb -rw-r--r-- 1 sergio src 112810 2004-09-21 22:12 ldap-utils_2.1.30-3.1_i386.deb -rw-r--r-- 1 sergio src 284366 2004-09-21 22:12 libldap2_2.1.30-3.1_i386.deb -rw-r--r-- 1 sergio src 321336 2004-09-21 22:12 libldap2-dev_2.1.30-3.1_i386.deb -rw-r--r-- 1 sergio src 71864 2004-09-21 22:12 libslapd2-dev_2.1.30-3.1_all.deb -rw-r--r-- 1 sergio src 945220 2004-09-21 22:12 slapd_2.1.30-3.1_i386.deb |
La única acción que nos queda por hacer es la instalación de los nuevos paquetes que se han generado. Para ello teclee:
Ejemplo 4.18. Instalación de los nuevos paquetes de OpenLDAP
# /usr/bin/dpkg -i ../slapd_2.1.30-3.1_i386.deb \ ../ldap-utils_2.1.30-3.1_i386.deb \ ../libldap2_2.1.30-3.1_i386.deb (Leyendo la base de datos ... 132792 ficheros y directorios instalados actualmente.) Preparando para reemplazar slapd 2.1.30-3 (usando slapd_2.1.30-3.1_i386.deb) ... Stopping OpenLDAP: slapd. Stopping OpenLDAP: slapd. Desempaquetando el reemplazo de slapd ... Preparando para reemplazar ldap-utils 2.1.30-3 (usando ldap-utils_2.1.30-3.1_i386.deb) ... Desempaquetando el reemplazo de ldap-utils ... Preparando para reemplazar libldap2 2.1.30-3 (usando libldap2_2.1.30-3.1_i386.deb) ... Desempaquetando el reemplazo de libldap2 ... Configurando libldap2 (2.1.30-3.1) ... Configurando slapd (2.1.30-3.1) ... Starting OpenLDAP: slapd. Configurando ldap-utils (2.1.30-3.1) ... |
Con esto se finalizaría la instalación del servidor OpenLDAP modificado.
[11] Esta decisión se tomó, debido a que si se empleaba el paquete oficial de OpenLDAP, tal cual, no se presentaban los problemas aquí detallados. Ha de recordarse que la distribución oficial de OpenLDAP hace uso de OpenSSL.
[12] OpenLDAP source package does not compile correctly with '--with-tls=openssl' flag
[13] Inexistente si se hacía uso de la distribución oficial de OpenLDAP.