Introducción
Buenas, en este post vamos a configurar el servidor LDAP instalado anteriormente para que utilice el protocolo ldaps://
a la vez que el ldap://
utilizando un certificado x509.
Ficheros necesarios
Hemos creado una clave privada y un fichero .csr
para que nos lo pueda firmar nuestra entidad certificadora con la siguiente instrucción:
openssl req -out cabezas.gonzalonazareno.org.csr -newkey rsa:2048 -nodes -keyout cabezas.gonzalonazareno.org.key
Una vez que nos lo han firmado, tenemos un archivo .crt
:
cabezas.gonzalonazareno.org.crt
Nos hemos descargado de gestiona
el certificado del gonzalo:
gonzalonazareno.crt
Instalación certificado gonzalo
Para instalar el certificado del gonzalo, movemos el fichero:
sudo mv gonzalonazareno.crt /usr/local/share/ca-certificates/
Y ejecutamos la instrucción:
sudo update-ca-certificates
Se generará el siguiente fichero
/etc/ssl/certs/gonzalonazareno.pem
Tendremos que copiarlo a otra ubicación posteriormente.
Creación carpetas necesarias:
mkdir -p /etc/ssl/openldap/{private,certs,newcerts}
Ubicación de ficheros
Necesitaremos crear los siguientes archivos para rastraear certificados firmados:
echo "1001" > /etc/ssl/openldap/serial
touch /etc/ssl/openldap/index.txt
Después de mover los ficheros mencionados anteriormente tendremos que tener el siguiente árbol:
/etc/ssl/openldap/
├── certs
│ ├── cabezas.gonzalonazareno.org.crt
│ └── gonzalonazareno.pem
├── index.txt
├── newcerts
├── private
│ └── cabezas.gonzalonazareno.org.key
└── serial
Cambiamos los permisos:
sudo chown -R openldap: /etc/ssl/openldap/
Modificación ficheros configuración
Tendremos que editar varios archivos. Uno de ellos:
sudo nano /usr/lib/ssl/openssl.cnf
Y cambiamos la línea:
dir = ./demoCA # Where everything is kept
Por esta otra:
dir = /etc/ssl/openldap
Actualización certificados TLS OpenLDAP
Debemos de actualizar los certificados TLS de OpenLDAP, para ello crearemos un fichero ldif:
nano ssl.ldif
Con la siguiente información:
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/openldap/certs/gonzalonazareno.pem
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/openldap/certs/cabezas.gonzalonazareno.org.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/openldap/private/cabezas.gonzalonazareno.org.key
Y con ldapmodify
importaremos lo anterior:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f ldap-tls.ldif
Para verificar que ha funcionado:
slapcat -b "cn=config" | grep -E "olcTLS"
olcTLSCACertificateFile: /etc/ssl/openldap/certs/gonzalonazareno.pem
olcTLSCertificateFile: /etc/ssl/openldap/certs/cabezas.gonzalonazareno.org.cert
olcTLSCertificateKeyFile: /etc/ssl/openldap/private/cabezas.gonzalonazareno.org.key
Podemos validar la configuración de LDAP con el siguiente comando:
sudo slaptest -u
También tendremos que modificar:
sudo nano /etc/ldap/ldap.conf
Y actualizar la línea:
TLS_CACERT /etc/ssl/openldap/certs/cabezas.gonzalonazareno.org.crt
Y por último editar el fichero:
sudo nano /etc/default/slapd
Y la línea:
SLAPD_SERVICES
Dejarla de la siguiente forma:
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"
Reiniciamos el servicio:
sudo systemctl restart slapd
Configuracion en cliente
En el cliente tendremos que tener el fichero cabezas.gonzalonazareno.org.crt
, lo instalaremos igual que hicimos anteriormente.
Y tendremos que modificar el fichero:
sudo nano /etc/ldap/ldap.conf
Para añadir lo siguiente:
BASE dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
URI ldaps://freston.cabezas.gonzalonazareno.org
TLS_CACERT /etc/ssl/certs/cabezas.gonzalonazareno.org.pem
TLS_REQCERT demand
Así la conexión la hará por ldaps por defecto y escogerá el certificado que le indiquemos.
Comprobación desde un cliente externo
Desde dulcinea vamos a probar la conexión mediante ldaps
y ldap
:
LDAPs
ldapsearch -x -D "cn=admin,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org" -b dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org -H ldaps://freston.cabezas.gonzalonazareno.org:636 -W
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# freston.cabezas.gonzalonazareno.org
dn: dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: Cabezas company
dc: freston
# admin, freston.cabezas.gonzalonazareno.org
dn: cn=admin,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9amhZcWJyRWs1T2FYcXZ2RVhDZkRpb0E2LzFuMS94Lzg=
# People, freston.cabezas.gonzalonazareno.org
dn: ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
ou: People
objectClass: organizationalUnit
# Group, freston.cabezas.gonzalonazareno.org
dn: ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
ou: Group
objectClass: organizationalUnit
# search result
search: 2
result: 0 Success
# numResponses: 5
# numEntries: 4
LDAP
ldapsearch -x -D "cn=admin,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org" -b dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org -H ldap://freston.cabezas.gonzalonazareno.org -W
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# freston.cabezas.gonzalonazareno.org
dn: dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: Cabezas company
dc: freston
# admin, freston.cabezas.gonzalonazareno.org
dn: cn=admin,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9amhZcWJyRWs1T2FYcXZ2RVhDZkRpb0E2LzFuMS94Lzg=
# People, freston.cabezas.gonzalonazareno.org
dn: ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
ou: People
objectClass: organizationalUnit
# Group, freston.cabezas.gonzalonazareno.org
dn: ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
ou: Group
objectClass: organizationalUnit
# search result
search: 2
result: 0 Success
# numResponses: 5
# numEntries: 4
Verificación del certificado
Para poder verificar el certificado vamos a instalar Apache Directory Studio
en nuestra máquina(hemos añadido previamente la configuración que hicimos en Configuracion en cliente
) Y haremos la siguiente conexión, siendo:
Pulsamos en View Certificate
para ver nuestro certificado:
Y cuando lo veamos y digamos que confiamos en él, pulsamos en siguiente y añadimos la ruta DN para el usuario admin:
Finalizamos y ya tendremos la conexión a través de Apache Directory:
Se me olvidaba comentar que para poder realizar la conexión a través de nuestra máquina hemos tenido que añadir las siguientes reglas en dulcinea:
iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 389 -j DNAT --to 10.0.1.9:389
iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 636 -j DNAT --to 10.0.1.9:636