openldap TLS error -8179: O emissor do certificado de peer não é reconhecido

1

tl; dr Esse erro significa que eu preciso encontrar o certificado público do servidor ldap da minha empresa e instalá-lo, ou que o servidor ldap da minha empresa precisa instalar meu certificado público? Se o primeiro, como posso pegar os certs e instalá-lo?

Estou tentando integrar um aplicativo ao LDAP da minha empresa. Sou muito novo no LDAP e no SSL, por isso peço desculpas antecipadamente. Eu posso fazer isso com êxito em não-SSL, mas estou atingindo esse problema quando eu tento fazer isso através de SSL. Eu estou em um Rhel 6.4 com openldap versão 2.4.

Usando ldapsearch

ldapsearch -v -h myhost.com -b 'DC=myhost,DC=com, -D 'CN=me,DC=myhost,DC=com' -x -W -Z

ou Python

import ldap
con = ldap.initialize('ldaps://myhost.com')
dn = 'CN=me,DC=myhost,DC=com'
pw = 'password'
con.simple_bind_s(dn, pw)

resulta em:

ldap_start_tls: Connect error (-11)
    additional info: TLS error -8179:Peer's Certificate issuer is not recognized.

Isso significa que preciso encontrar o certificado público do servidor LDAP da minha empresa e instalá-lo em algum lugar, por exemplo, / etc / openldap / certs? Ou, isso significa que eu preciso dizer ao servidor ldap da minha empresa para aprovar meu certificado público?

openssl s_client -connect myhost.com:636

Isso despeja um certificado, mas no final diz:

Verify return code: 20 (unable to get local issuer certificate)

Novamente, não tenho certeza se isso significa que eu preciso dos certificados do servidor LDAP ou vice-versa.

Eu tentei ver a cadeia de certificados assim:

openssl s_client -showcerts -connect myhost.com:636

Copiei os certificados em ordem e criei um arquivo como esse, chamado cert.pem:

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

Eu tentei isso:

openssl s_client -connect myhost.com:636 -cert /path/to/cert.pem 

mas falhou com:

unable to load client certificate private key file
140503604590408:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:
Expecting: ANY PRIVATE KEY

(Eu também tentei -CAfile e -CApath nisso, mas recebi o unable to get local issuer certificate .)

Eu recriei o arquivo pem, mas desta vez incluí a chave privada do meu servidor, e cert, seguido pelos certificados do servidor ldap, mas recebi o mesmo erro ( Verify return code: 20 (unable to get local issuer certificate) ) novamente.

Estou criando esses arquivos de certificado incorretamente?

    
por Matthew Moisen 09.02.2016 / 07:09

2 respostas

1

A razão pela qual recebi esses erros foi porque eu não tinha os certificados do servidor ldap instalados no meu servidor. O servidor ldap não precisa ter os certificados do meu servidor instalados.

Entrei em contato com alguém da minha empresa que conseguiu fornecer dois certificados, um certificado raiz e um certificado intermediário, ambos em der format. Notavelmente, esses certificados eram não iguais aos que recebi usando o comando openssl s_client -showcerts . Eu segui este link para convertê-los de der para pem , como este :

openssl x509 -in root.cer -inform der -outform pem -out root.pem
openssl x509 -in intermediary.cer -inform der -outform pem -out intermediary.pem
# Combine these files into one cert in exactly this order
cat root.pem > master.pem
cat intermediary.pem >> master.pem

Eu poderia então emitir este comando bem

openssl s_client -connect myhost:636 -CAfile /path/to/master.pem

E para se conectar em Python:

import ldap
# point to the cert
cert_file='/path/to/master.pem'
ldap.set_option(ldap.OPT_X_TLS_CACERTFILE, cert_file)
con = ldap.initialize('ldaps://myhost.com')
dn = 'CN=me,DC=myhost,DC=com'
pw = 'password'
con.simple_bind_s(dn, pw)
    
por 10.02.2016 / 04:15
0

O Openldap 2.4 usa a porta padrão 398 para tls, então tente s_client através dela. Você pode verificar os arquivos de configuração em /etc/openldap/slapd.d/, verificar o arquivo de instância do banco de dados cn = olcDatabase = {2} hdb.ldif. Este arquivo pode conter nomes de arquivos e localização de seus certificados. Se a sua empresa comprar certs de um provedor de domínio como o goDaddy, você pode comprar e usar seus certificados para instalar com o openldap e quando você navega na internet você não encontrará o aviso vermelho de browers porque é um certificado mundial. Ou você pode criar seus próprios certificados usando o openssl e instalar a parte do servidor para o seu servidor openldap e instalar a parte do cliente no seu cliente para que eles possam identificar um ao outro.

    
por 09.02.2016 / 09:51