En este punto ya se puede re/iniciar el demonio slapd con la nueva configuración de seguridad. Para ello emplee la orden /etc/init.d/slapd restart (en el Ejemplo 3.7, “Reinicio del demonio slapd” se muestra como hacerlo).
En las siguientes secciones se verá la forma de comprobar que OpenLDAP se comporta como debe. Para cumplir este objetivo, se hará uso de las herramientas que vienen con OpenSSL para verificar las conexiones SSL y se realizarán búsquedas en el directorio LDAP.
![]() | Nota |
---|---|
Antes de ejecutar la siguiente orden, ha de asegurarse que valor tiene la variable TLSVerifyClient. Si su valor es demand, la orden no se ejecutará correctamente, ya que el cliente no se ha autentificado, como se requiere en la configuración de OpenLDAP. |
Nótese que a la orden del Ejemplo 4.19, “Comprobando la conexión SSL sin autentificación del cliente” se le pasa como argumento[14] el certificado de la entidad certificadora del cliente. ¿Por qué se ha de especificar el certificado, si ya se ha configurado en el archivo ldap.conf? la razón es porque la orden que estamos ejecutando, es una orden dependiente de OpenSSL y no de OpenLDAP.
Ejemplo 4.19. Comprobando la conexión SSL sin autentificación del cliente
![]() | Nota |
---|---|
Normalmente, para finalizar la ejecución de la orden anterior, se ha de pulsar Ctrl+c. No se preocupe por ello. |
Ahora se verá un ejemplo donde el cliente se autentifica ante el servidor:
Ejemplo 4.20. Comprobando la conexión SSL con autentificación del cliente
OpenLDAP tiene varias herramientas, como son: ldapsearch, ldapadd, ldapmodify y ldapdelete. A continuación se verán algunos ejemplos de su uso, para ilustrar la comunicación mediante SSL y TLS.
Los ejemplos se centrarán en las búsquedas de varias entradas, previamente incorporadas al directorio.
Lo primero que se va a hacer es añadir una serie de datos al directorio LDAP, sobre los cuales, posteriormente, se realizarán las búsquedas. Para ello, puede copiar el siguiente texto a un archivo denominado datos-iniciales.ldif, por ejemplo.
Tenga en cuenta que ha de eliminar cualquier espacio al inicio o al final de las líneas del ejemplo. Tampoco olvide adaptar el ejemplo que aquí se presenta a su configuración.
#datos-iniciales.ldif dn: cn=sergio,dc=gsr,dc=pt objectclass: organizationalRole cn: sergio dn: ou=unidade de contas,dc=gsr,dc=pt objectclass: organizationalUnit ou: unidade de contas description: Organizacao de provas que contera ao administrador dn: cn=senhor administrador,ou=unidade de contas,dc=gsr,dc=pt objectclass: person userPassword: chaveprova description: Usuario de exemplo como administrador cn: senhor administrador sn: admin |
Ahora se procederá a añadir estas entradas a la base de datos de LDAP, para ello haga uso del usuario administrador de su directorio LDAP.
Ejemplo 4.21. Incorporación de datos al directorio LDAP por medio de un archivo LDIF
$ /usr/bin/ldapadd -x -D "cn=admin,dc=gsr,dc=pt" -W -f datos-iniciales.ldif Enter LDAP Password:[Clave] adding new entry "cn=sergio,dc=gsr,dc=pt" adding new entry "ou=unidade de contas,dc=gsr,dc=pt" adding new entry "cn=senhor administrador,ou=unidade de contas,dc=gsr,dc=pt" |
La orden anterior se ha realizado en texto plano, por lo que la transmisión de la clave del administrador del directorio LDAP se ha hecho sin ningún tipo de cifrado, como se puede apreciar en la siguiente captura de pantalla (debajo del color rojo aparece la clave del administrador):
Figura 4.1. Captura de la clave del administrador del directorio LDAP con ethereal
Al comunicarse con el servidor LDAP sin hacer uso de cifrado, las claves de los usuarios viajan en texto plano, como puede apreciarse en esta captura de pantalla. Las líneas en rojo ocultan la clave del administrador del directorio LDAP capturada por el programa ethereal.
Para evitar esta situación, se puede hacer uso de SSL o TLS en las comunicaciones con el servidor LDAP. Las siguientes secciones explican como hacerlo:
Para asegurarse de que sus comunicaciones con el servidor LDAP utilizan SSL al hacer uso de las herramientas que incorpora OpenLDAP, ha de añadir el siguiente parámetro a sus órdenes: “-H ldaps://gsr.pt/”.
La principal diferencia entre una conexión SSL y una TLS, es que la primera siempre utilizará el cifrado en la conexión mientras que la segunda provee al cliente la opción de hacer uso de cifrado cuando lo desee.
Tenga en cuenta que por el simple hecho de acceder al servidor mediante ldap://:389 no asegura que la conexión haga uso de cifrado TLS, pero tampoco si accede mediante ldaps://. Para activar una conexión TLS tendrá que hace uso del parámetro “-Z” o “-ZZ”.
El parámetro “-ZZ” fuerza que la negociación TLS tenga éxito, mientras que el parámetro “-Z”, intenta habilitar el cifrado TLS, pero si no lo consigue, continua con la conexión sin TLS.
En esta sección se realizarán una serie de búsquedas en el directorio. El uso del parámetro -D “cn=admin,dc=gsr,dc=pt” es necesario, debido a la restricción de acceso que se ha impuesto en el archivo slapd.conf:
access to * by dn="cn=admin,dc=gsr,dc=pt" write by dn="cn=readadmin,dc=gsr,dc=pt" read |
![]() | Para más datos sobre este usuario, ver el Apéndice A, Creación y configuración de un usuario de sólo lectura para el directorio LDAP. |
Ejemplo 4.22. Devuelve todas las entradas del directorio
Si el cliente se encuentra en la misma máquina que el servidor:
$ /usr/bin/ldapsearch -x -b 'dc=gsr,dc=pt' -D "cn=admin,dc=gsr,dc=pt" -W \ '(objectclass=*)' |
Si el cliente se encuentra en una máquina distinta al servidor y se quiere hacer uso de SSL :
$ /usr/bin/ldapsearch -x -b 'dc=gsr,dc=pt' -D "cn=admin,dc=gsr,dc=pt" -W \ '(objectclass=*)' -H ldaps://gsr.pt/ |
Si el cliente se encuentra en una máquina distinta al servidor y se quiere hacer uso de TLS :
$ /usr/bin/ldapsearch -x -b 'dc=gsr,dc=pt' -D "cn=admin,dc=gsr,dc=pt" -W \ '(objectclass=*)' -H ldap://gsr.pt/ -ZZ |
Después de ejecutar las órdenes anteriores, la salida debería ser similar a:
Enter LDAP Password:[Clave] # extended LDIF # # LDAPv3 # base <dc=gsr,dc=pt> with scope sub # filter: (objectclass=*) # requesting: ALL # # gsr.pt dn: dc=gsr,dc=pt objectClass: top objectClass: dcObject objectClass: organization o: gsr.pt dc: gsr # admin, gsr.pt dn: cn=admin,dc=gsr,dc=pt objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator userPassword:: e2NyeXB0fXkxcFlKZVpQQzQ5Qlk= # sergio, gsr.pt dn: cn=sergio,dc=gsr,dc=pt objectClass: organizationalRole cn: sergio # unidade de contas, gsr.pt dn: ou=unidade de contas,dc=gsr,dc=pt objectClass: organizationalUnit ou: unidade de contas description: Organizacao de provas que contera ao administrador # senhor administrador, unidade de contas, gsr.pt dn: cn=senhor administrador,ou=unidade de contas,dc=gsr,dc=pt objectClass: person userPassword:: Y2hhdmVwcm92YQ== description: Usuario de exemplo como administrador cn: senhor administrador sn: admin # search result search: 3 result: 0 Success # numResponses: 6 # numEntries: 5 |
Ejemplo 4.23. Devuelve algunas entradas del directorio
$ /usr/bin/ldapsearch -x -b 'cn=sergio,dc=gsr,dc=pt' -D "cn=admin,dc=gsr,dc=pt" \ '(objectclass=*)' -H ldaps://gsr.pt/ -w clave # extended LDIF # # LDAPv3 # base <cn=sergio,dc=gsr,dc=pt> with scope sub # filter: (objectclass=*) # requesting: ALL # # sergio, gsr.pt dn: cn=sergio,dc=gsr,dc=pt objectClass: organizationalRole cn: sergio # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1 $ $ /usr/bin/ldapsearch -x -b 'ou=unidade de contas,,dc=gsr,dc=pt' \ -D "cn=admin,dc=gsr,dc=pt" '(objectclass=*)' -H ldaps://gsr.pt/ -w clave # extended LDIF # # LDAPv3 # base <ou=unidade de contas,dc=gsr,dc=pt> with scope sub # filter: (objectclass=*) # requesting: ALL # # unidade de contas, gsr.pt dn: ou=unidade de contas,dc=gsr,dc=pt objectClass: organizationalUnit ou: unidade de contas description: Organizacao de provas que contera ao administrador # senhor administrador, unidade de contas, gsr.pt dn: cn=senhor administrador,ou=unidade de contas,dc=gsr,dc=pt objectClass: person userPassword:: Y2hhdmVwcm92YQ== description: Usuario de exemplo como administrador cn: senhor administrador sn: admin # search result search: 2 result: 0 Success # numResponses: 3 # numEntries: 2 |
Como ha podido comprobar, la comunicación con el servidor LDAP se realiza satisfactoriamente, bien sea utilizando cifrado bien sin el.