Configurar OpenLDAP con TLS = requerido

16

Hoy en día, OpenLDAP debe configurarse con ldapmodify cn = config, como se describe aquí . Pero en ninguna parte puedo encontrar cómo lo configura para aceptar solo el tráfico TLS. Acabo de confirmar que nuestro servidor acepta tráfico sin cifrar (con ldapsearch y tcpdump).

Normalmente, simplemente cerraría el puerto que no es SSL con tablas IP, pero aparentemente el uso del puerto SSL está en desuso, por lo que no tengo esa opción.

Entonces, con los comandos de configuración SSL, así:

dn: cn=config
changetype:modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/bla.key
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/bla.crt
-
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/ca.pem

¿Hay un parámetro para forzar TLS?

Editar: probé el olcTLSCipherSuite, pero no funciona. Salida de depuración:

TLS: could not set cipher list TLSv1+RSA:!NULL.
main: TLS init def ctx failed: -1
slapd destroy: freeing system resources.
slapd stopped.
connections_destroy: nothing to destroy.

Edit2 (casi arreglado): pude solucionarlo cargando:

# cat force-ssl.tx 
dn: cn=config
changetype:  modify
add: olcSecurity
olcSecurity: tls=1

Pero luego comandos como

ldapmodify -v -Y EXTERNAL -H ldapi:/// -f /etc/ssl/tls-required.ldif

No trabaje más ... Y cámbielo a:

ldapmodify -v -x -D "cn=admin,dc=domain,dc=com" -H ldap://ldap.bla.tld/ -ZZ -W -f force-ssl.txt

me da "ldap_bind: credenciales no válidas (49)". Aparentemente, aunque este enlace se especifica como rootdn, no puedo usarlo para alterarlo cn=config. ¿Se puede cambiar eso?

Halfgaar
fuente

Respuestas:

16

Parecía haberlo entendido:

Hice esto:

dn: olcDatabase={1}hdb,cn=config
changetype:  modify
add: olcSecurity
olcSecurity: tls=1

Y eso parece tener el efecto deseado. Todavía puedo ejecutar comandos como:

ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config

Pero intentar vincularse con " ldapsearch -xLLL -b ..." sin SSL dice: "Se requiere confidencialidad TLS"

Halfgaar
fuente
2
+1 parece funcionar muy bien. Desafortunadamente, si el cliente intenta autenticarse sin STARTTLS, envía la contraseña en texto sin formato y luego el servidor responde con el TLS confidentiality requiredmensaje.
Carlos Campderrós
1
Publiqué eso en la lista de correo de OpenLDAP como un posible problema de seguridad. Di el ejemplo de FTP, que se bloquea tan pronto como le das al USUARIO. Pero, fui anulado. Mira esto.
Halfgaar
divertido, miré ese hilo antes de encontrar esta respuesta :)
Carlos Campderrós
Gracias, justo lo que estaba buscando. La contraseña que pasa por el cable en texto claro será específica de la implementación en el software del lado del cliente. El requisito de TLS se puede probar primero con enlace anónimo antes de intentar enlazar como usuario.
Error del servidor el
3

Esto se logra con la opción TLSCipherSuite . Un ejemplo está documentado en el capítulo de seguridad LDAP del libro OpenLDAP Zytrax . Con él puede decirle a OpenLDAP las suites de cifrado que su servidor aceptará. Por ejemplo, puede decir que no desea un NULLconjunto de cifrado (es decir, una sesión no cifrada).

Sin embargo, tenga cuidado de que OpenLDAP puede vincularse con las bibliotecas OpenSSL o GnuTLS. Aquellos usan diferentes listas de cifrado para describir su soporte de cifrado. La lista de cifrado de OpenSSL se puede obtener con un comando como openssl ciphers -vy la lista GnuTLS con gnutls-cli -l.

La forma más sencilla de deshabilitar la conexión sin cifrado sería:

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: ALL:!NULL

Una restricción más específica usando la sintaxis GnuTLS :

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: TLS_RSA_CAMELLIA_128_CBC_SHA1:TLS_RSA_CAMELLIA_256_CBC_SHA1:!NULL

Un ejemplo más completo podría ser (usando la sintaxis de OpenSSL ):

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: HIGH:+SSLv3:+TLSv1:MEDIUM:+SSLv2:@STRENGTH:+SHA:+MD5:!NULL

Hay una discusión en la lista de correo de OpenLDAP que vale la pena leer sobre una pregunta similar .

También vale la pena señalar que las herramientas cli de OpenLDAP, como ldapsearch, cambian automáticamente al uso de TLS cuando se conectan a un servidor que prohíbe las conexiones no cifradas. Eso significa que no necesita agregar -Za la lista de argumentos.

Tonin
fuente
Lo intenté. No funcionó. Edité mi pregunta para reflejarla.
Halfgaar
Creo que el error que informa está relacionado con los cifrados que conoce su implementación de TLS. OpenLDAP se puede compilar con las bibliotecas OpenSSL o gnuTLS. El ejemplo que di utilizó la sintaxis OpenSSL, su implementación probablemente esté usando gnuTLS. Te sugiero que pruebes un CipherSuite simplificado, por ejemploALL:!NULL
Tonin el
"ADVERTENCIA: no sea inteligente y cambie TLSCipherSuite a algo inteligente como ALTO: MEDIO: -SSLv2: esta es una directiva de openssl" - lea rogermoffatt.com/2011/08/24/ubuntu-openldap-with-ssltls .
Xdg