Como fazer o ldapsearch funcionar no SLES sobre tls usando o certificado?

12

Precisamos conectar nosso script php ao LDAP sobre tls usando um certificado. A conexão LDAP funciona bem sem tls. Mais detalhes aqui /programming/15260252/how-to-use-multiple-tls-certificates-for-ldap-from-php-zend

Conseguimos conectar via tls a partir do Windows usando o Softerra LDAP Browser. Ele nos pediu para instalar um certificado e se confiamos nele.

Meu resultado final é poder me autenticar com LDAP usando TLS do php. Recebi um certificado do tipo .cer. Vem de uma máquina Windows Exchange. Pelo que vejo, o SLES suporta certificados .pem. Então minha pergunta é ...

Q1: Preciso converter de .cer para .pem antes de poder instalar o certificado no cliente (que é o servidor SLES) e, finalmente, Q2: qual é a melhor maneira de instalar esse certificado no servidor para que meu aplicativo php possa acessá-lo e fazer seu trabalho . Observe que no servidor SLES, precisamos nos conectar a diferentes servidores LDAP.

No momento, se corrermos

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

Nós temos

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)

Encontrei muitas informações boas aqui http://www.php.net/manual/de/function.ldap-connect.php#36156 e, especialmente, essa frase é importante aos meus olhosOnce 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 setembro de 2012 13:14:42) $ abuild @ baur: /usr/src/packages/BUILD/openldap-2.4.26/clients/tools (biblioteca LDAP: OpenLDAP 20426)
Radek
fonte
Uma maneira alternativa de depurar é ignorar a parte LDAP e apenas observar o SSL: Você pode executar "openssl s_client -connect localhost: 9215" para cuspir o certificado que o servidor usa e os resultados da validação.
Kowh
ESTÁ BEM. Vou passar para o desenvolvedor. Eu, pessoalmente, ainda não entendo como instalo o certificado e ele está vinculado a um servidor quando quero acessá-lo.
Radek

Respostas:

25

Isso significa que o certificado no servidor expirou ou é inválido.

Quanto à solução alternativa, use a LDAPTLS_REQCERTvariável para ignorar o certificado, por exemplo:

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)"

Caso contrário, você pode importar o certificado e marcá-lo como confiável.

kenorb
fonte
Também funciona no cygwin, onde não havia ldap.confarquivo existente para definir o TLS_REQCERTparâmetro.
bvj 10/02/19
7

Não tenho certeza sobre a conversão de pem para cer, mas para fazer com que o ldapsearch use certs sem ldap.conf ou sem as permissões para modificar certs globais, você deve fazer isso:

env LDAPTLS_CACERT=/path/to/cert ldapsearch
consertar
fonte
1

Usando

LDAPTLS_REQCERT=never

remove a validação de certificado do servidor LDAP. Isso anula a segurança fornecida pelo TLS em primeiro lugar. Não faça isso. Você deve corrigir os certificados, se houver um problema, e fornecer ao cliente LDAP a autoridade de certificação, conforme descrito por tink.

returntosender404
fonte