прежде всего, я прошу прощения за мой английский.
Я пытаюсь запросить некоторые данные на серверах 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 не работает.
Кто-то знает, что может происходить?
Спасибо!!