Algunos sistemas no pueden conectarse a ldap vía ldaps, pero otros pueden, ¿es el cert de comodín?

Cuando bash hacer conexiones de ldaps a mi server nuevo de Novell eDirectory 8.8, a veces tengo que poner TLS_REQCERT never en el file ldap.conf de los serveres del cliente. Obviamente, esto es una mala idea.

El command que ejecuto es algo como esto con cnetworkingenciales que realmente funcionan …

 ldapsearch -x -H ldaps://ldapserver -b 'ou=active,ou=people,dc=example,dc=org' -D 'cn=admin,dc=example,dc=org' -W "cn=username" 

En Ubuntu 13.10, funciona bien.

En SLES funciona bien.

En CentOS 6.5 devuelve:

 ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1) 

Ahora, el cert que he importado es un cert de comodín comprado de DigiCert. Mi compañero de trabajo encontró algunos informes que indican que algunos sistemas tienen problemas con comodines.

¿Así pues, es el cert del comodín a culpar? Si es así, ¿cómo lo soluciono?

Si no es el cert de comodín, ¿qué es?

Siguiendo la sugerencia de Andrew Schulman, añadí -d1 a mi command ldapsearch. Esto es lo que terminé con:

 ldap_url_parse_ext(ldaps://ldap.example.org) ldap_create ldap_url_parse_ext(ldaps://ldap.example.org:636/??base) Enter LDAP Password: ldap_sasl_bind ldap_send_initial_request ldap_new_connection 1 1 0 ldap_int_open_connection ldap_connect_to_host: TCP ldap.example.org:636 ldap_new_socket: 3 ldap_prepare_socket: 3 ldap_connect_to_host: Trying 10.225.0.24:636 ldap_pvt_connect: fd: 3 tm: -1 async: 0 TLS: certdb config: configDir='/etc/openldap' tokenDescription='ldap(0)' certPrefix='cacerts' keyPrefix='cacerts' flags=readOnly TLS: cannot open certdb '/etc/openldap', error -8018:Unknown PKCS #11 error. TLS: could not get info about the CA certificate directory /etc/openldap/cacerts - error -5950:File not found. TLS: certificate [CN=DigiCert High Assurance EV Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US] is not valid - error -8172:Peer's certificate issuer has been marked as not trusted by the user.. TLS: error: connect - force handshake failure: errno 2 - moznss error -8172 TLS: can't connect: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user.. ldap_err2string ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1) 

De lo que dice, CentOS no confía en DigiCert? O CentOS no tiene una list de emisores de confianza?

ldapsearch busca en / etc / openldap / cacerts para su almacén de certificates de CA de confianza, y que al parecer no está configurado, y por lo tanto está rechazando el certificate ya que no puede build una cadena de confianza para él. Si ldapsearch utilizaba OpenSSL, necesitaría una colección de formatting "hashdir" producida por, por ejemplo, el progtwig "authconfig" de Red Hat o un único file con una list plana de certificates de confianza. La reference aquí a "moznss" sugiere que este ldapsearch está construido contra Mozilla NSS, en cuyo caso usted necesita usar "certutil" para hacer el cert db (o mejor, apúntelo en el almacén de certificates NSS del sistema, si lo hay) .

En los sistemas en los que funciona, ldapsearch debe tener un almacén de certificates de trabajo, tal vez porque los packages de OpenLDAP se construyen en lugar de OpenSSL (o tal vez hay una tienda de estilo NSS disponible allí).

ldapsearch dirá "No se puede contactar con el server LDAP" si no puede verificar el certificate TLS. Agregue -d1 al command ldapsearch y compruebe las líneas de salida que comienzan con "TLS:" para get más información sobre si la connection TLS está fallando y por qué.

La solución depende de su installation:

  • Si está utilizando un cert no válido , puede forzarlo a aceptar configurando /etc/openldap/ldap.conf con

     TLS_REQCERT allow 

    o

     TLS_REQCERT never 
  • Si está utilizando un cert válido, probablemente su installation de ldap no sabe dónde está el almacén de certificates de CA de confianza (probablemente dependiendo de su installation de OpenSSL). A continuación, puede intentar establecer la location y verificar la fuerza configurando /etc/openldap/ldap.conf con

     TLS_CACERT /etc/openldap/cacert TLS_REQCERT demand 

    /etc/openldap/cacert puede ser esto o estar ubicado en cualquier ruta. Debe contener cadena de certificates de su CA. Puede ser un solo file con una list plana de certificates de confianza.

Las routes de notas dependen del proveedor ldap. Podría ser /etc/ldap o /etc/openldap o así.