通过TLS的python和ldap问题

通过TLS的python和ldap问题,python,ldap,ldap-query,Python,Ldap,Ldap Query,首先,我为我的英语感到抱歉 我试图向LDAPS服务器查询一些数据,但遇到了一些问题 我有两个Samba4DC控制器作为同一个域工作。我在不同的子域上有两个DC,例如: dc.domain.com dc2.domain.com 我使用这个python脚本来查询ldap服务器的一些数据: #!/usr/bin/env python2 # -*- coding: utf-8 -*- import ldap, ldapurl, subprocess, sys, shlex, os GrupoLD

首先,我为我的英语感到抱歉

我试图向LDAPS服务器查询一些数据,但遇到了一些问题

我有两个Samba4DC控制器作为同一个域工作。我在不同的子域上有两个DC,例如:

  • dc.domain.com
  • dc2.domain.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上工作

问题似乎是ldaps的基本DN,因为如果我将基本更改为:

    base = 'OU=Users,DC=domain,DC=com'
或者我使用ldap代替ldap,那么它就可以完美地工作了。问题是我需要在没有任何OU的情况下查询服务器的根目录

我可以使用标准ldap通道,但我希望使用安全通道来获取数据

我得到的错误是:

{'info': '00002020: Operation unavailable without authentication', 'desc': 'Operations error'}
当然,我正在使用身份验证,我已经更新了两台服务器上的证书,将CN改为“domain.com”,并且似乎在Owncloud和Prosody(使用Saslauth)上工作得很好,但在python上却失败了

有人知道会发生什么


谢谢

我终于找到了解决问题的方法。我已将这一行添加到python脚本中:

ldap.set_option(ldap.OPT_REFERRALS, 0)
现在工作得很好

你好