如何将ldap python代码转换为ldapsearch参数?

如何将ldap python代码转换为ldapsearch参数?,python,ldap,Python,Ldap,以下python代码为我提供了预期的条目: from ldap3 import Server, Connection, ALL, SUBTREE, ALL_ATTRIBUTES from pprint import pprint import json server = Server( 'server.domain.org', use_ssl = True, port = 636 ) c = Connection( server, user = 'username', password = '

以下python代码为我提供了预期的条目:

from ldap3 import Server, Connection, ALL, SUBTREE, ALL_ATTRIBUTES
from pprint import pprint
import json

server = Server( 'server.domain.org', use_ssl = True, port = 636 )
c = Connection( server, user = 'username', password = 'password123' )
c.bind()
c.search(search_base = 'cn=users,dc=domain,dc=org',
         search_filter = '(mailNickname=username)',
         search_scope = SUBTREE,
         attributes = ALL_ATTRIBUTES,
         paged_size = 5)

total_entries = len( c.response )

print( total_entries ) 
for entry in c.entries:
    converted = json.loads( entry.entry_to_json() )
    pprint( converted )
我希望能够使用ldapsearch命令获得相同的条目

但是,当我尝试使用变体时:

ldapsearch -x -LLL -H ldaps://server.domain.org:636 -D '' -w password123 -b 'cn=users,dc=domain,dc=org' -s sub '(objectClass=*)' 'givenName=username'
我只是得到了如下错误:

ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

知道哪里出了问题吗?

将代码中执行的搜索(我将域名更改为RFC 2606保留域之一)转换为ldapsearch会产生:

ldapsearch -x -LLL -H ldaps://server.example.org:636 -D 'username' -w password123 -b 'cn=users,dc=domain,dc=org' -s sub '(mailNickname=username)' 
ldapsearch二进制文件可能无法与LDAP服务器协商SSL连接。如果主机上有明文LDAP,请在不使用SSL的情况下进行测试,以验证连接失败的原因:

ldapsearch -x -LLL -H ldap://server.example.org:389 -D 'username' -w password123 -b 'cn=users,dc=domain,dc=org' -s sub '(mailNickname=username)' 

问题在于python代码能够访问TLS通信所需的证书,而ldapsearch则无法访问。我可以通过添加以下内容来解决此问题:

TLS_CACERT  /full/path/to/Certificates.pem
TLS_REQCERT demand
至~/.ldaprc。Certificates.pem包含我需要的证书

可能还有其他有效的方法允许ldapsearch查找所需的证书