¿Cómo hacer que ldapsearch funcione en SLES sobre tls usando un certificado?

12

Necesitamos conectar nuestro script php a LDAP a través de tls usando un certificado. La conexión LDAP funciona bien sin tls. Más detalles aquí /programming/15260252/how-to-use-multiple-tls-certificates-for-ldap-from-php-zend

Logramos conectarnos a través de tls desde Windows usando el navegador Softerra LDAP. Nos pidió que instalemos un certificado y si confiamos en él.

Mi resultado final es poder autenticarme con LDAP usando TLS de php. Me han dado un certificado de tipo .cer. Proviene de una máquina con Windows Exchange. Por lo que puedo ver, SLES admite certificados .pem. Entonces mi pregunta es ...

Q1: ¿Necesito convertir de .cer a .pem primero antes de poder instalar el certificado en el cliente (que es el servidor SLES) y finalmente Q2: cuál es la mejor manera de instalar este certificado en el servidor para que mi aplicación php pueda acceder a él y hacer su trabajo . Tenga en cuenta que en el servidor SLES necesitamos conectarnos a diferentes servidores LDAP.

En la actualidad si corremos

ldapsearch -H ldaps://localhost:9215 -W

obtenemos

Enter LDAP Password: 
ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)
additional info: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed (unable to get local issuer certificate)

Encontré mucha información buena aquí http://www.php.net/manual/de/function.ldap-connect.php#36156 y especialmente esta oración es importante a mis ojosOnce you've gotten the ldapsearch tool working correctly PHP should work also.


  • SUSE Linux Enterprise Server 11 (x86_64)
  • ldapsearch: @ (#) $ OpenLDAP: ldapsearch 2.4.26 (26 de septiembre de 2012 13:14:42) $ abuild @ baur: /usr/src/packages/BUILD/openldap-2.4.26/clients/tools (biblioteca LDAP: OpenLDAP 20426)
Radek
fuente
Una forma alternativa de depurar es ignorar la parte LDAP y solo mirar el SSL: puede ejecutar "openssl s_client -connect localhost: 9215" para escupir el certificado que utiliza el servidor y los resultados de la validación.
Kowh
OKAY. Lo pasaré al desarrollador. Todavía no entiendo cómo instalo el certificado y está vinculado a un servidor cuando quiero acceder a él.
Radek

Respuestas:

25

Eso significa que el certificado en el servidor ha caducado o no es válido.

En cuanto a la solución alternativa, use la LDAPTLS_REQCERTvariable para ignorar el certificado, por ejemplo:

LDAPTLS_REQCERT=never ldapsearch -D "cn=drupal-test,ou=Services,dc=example,dc=com" -w my_pass -h ldap.example.com -b "ou=People,dc=example,dc=com" -s sub -x -ZZ "(uid=admin)"

De lo contrario, puede importar el certificado y marcarlo como confiable.

kenorb
fuente
También funciona en cygwin donde no había un ldap.confarchivo existente para establecer el TLS_REQCERTparámetro.
bvj
8

No estoy seguro acerca de la conversión de pem a cer, pero para hacer que ldapsearch use certificados sin tener un ldap.conf o sin los permisos para modificar certificados globales, debería poder hacer esto:

env LDAPTLS_CACERT=/path/to/cert ldapsearch
tink
fuente
1

Utilizando

LDAPTLS_REQCERT=never

elimina la validación del certificado del servidor LDAP. Esto anula la seguridad proporcionada por TLS en primer lugar. No hagas esto. Debe corregir los certificados si hay un problema y luego proporcionar al cliente LDAP la autoridad de certificación según lo descrito por tink.

refundntosender404
fuente