Проблемы с python и ldap через TLS

прежде всего, я прошу прощения за мой английский.

Я пытаюсь запросить некоторые данные на серверах LDAPS, но у меня возникают проблемы.

У меня есть два контроллера Samba4 DC, работающие в одном домене. У меня было два DC на разных поддоменах, например:

  • dc.domain.com
  • dc2.домен.com

и у меня есть этот скрипт Python для запроса некоторых данных на эти серверы ldap:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

import ldap, ldapurl, subprocess, sys, shlex, os

GrupoLDAP = "Domain Users" #Grupo a recuperar
CACert = '/etc/ssl/ca.cert.pem' #Certificado CA

ldap.set_option(ldap.OPT_X_TLS_CACERTFILE, CACert)
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_HARD)

proto = 'ldaps' #Protocolo
server = 'domain.com' #Dirección del servidor (mismo nombre del Certificado)
port = 636 #Puerto seguro para ldaps

try:
    url = ldapurl.LDAPUrl(urlscheme=proto, hostport="%s:%s" % (server, str(port))).initializeUrl()
    ldap_obj = ldap.initialize(url)
    ldap_obj.simple_bind_s('user@domain,com','_PassWd_')

    base = 'DC=domain,DC=com' #Ruta y UO del grupo

    scope = ldap.SCOPE_SUBTREE

    query = '(&(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'

    res_attrs = ['sAMAccountName', 'cn']
    #res_attrs = ['*']
    res = ldap_obj.search_s(base, scope, query, res_attrs)
except ldap.LDAPError as Error:
    print "Ha ocurrido un error al conectar o realizar la query al servidor LDAP:\n\n%s" % Error
    sys.exit(1)

print res

Этот сценарий работал отлично, пока я не присоединил оба сервера к одной и той же записи DNS, чтобы обеспечить избыточность. Сейчас оба сервера работают на domain.com.

Проблемы, похоже, связаны с базовым DN с ldaps, потому что, если я изменю базу на:

    base = 'OU=Users,DC=domain,DC=com'

или я использую ldap вместо ldaps, тогда все работает отлично. Проблема в том, что мне нужно запросить корень сервера без какой-либо OU.

Я могу использовать стандартный канал ldap, но я хочу использовать безопасный канал для получения данных.

Ошибка, которую я получаю:

{'info': '00002020: Operation unavailable without authentication', 'desc': 'Operations error'}

И, конечно же, я использую аутентификацию, и я обновил сертификаты на обоих серверах, чтобы изменить CN на «domain.com», и, кажется, отлично работает с Owncloud и Prosody (используя Saslauth), но с python не работает.

Кто-то знает, что может происходить?

Спасибо!!


person Daniel Carrasco Marín    schedule 23.06.2015    source источник


Ответы (1)


Наконец-то я нашел способ решить проблему. Я добавил эту строку в скрипт Python:

ldap.set_option(ldap.OPT_REFERRALS, 0)

И теперь работает идеально.

Привет!!

person Daniel Carrasco Marín    schedule 26.06.2015