python和ldap通过SSL

2024-10-04 11:31:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用python查询一个运行良好的activedirectory服务器。但现在我不想把我的凭证在网上加密,所以我想用ldap。 有没有一个简单的方法可以做到这一点?到现在为止,我只发现我必须加上这个选项:

l.set_option(ldap.OPT_X_TLS_CACERTFILE,'/path/to/my/Ca.pem')

但实际上我不想得到CA证书或正确的证书,并且也要进行验证。当然,从安全的角度来看,我应该验证我的通信伙伴是正确的,但是我不关心我的内部网络,只希望这更容易处理。 如果我只是将LDAP URL从LDAP更改为ldaps,则会出现以下错误:

^{pr2}$

Tags: topath方法服务器选项tlsldap证书
2条回答

两年前,嗯。。。。好吧,可能太迟了。在

但是,请尝试下面的代码。适用于python/ldap/activedirectory/TLS。在

import ldap
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_ALLOW)
l = ldap.initialize("ldaps://ad.xxx.yyy:636")
l.set_option(ldap.OPT_REFERRALS, 0)
l.simple_bind_s("xxx\username", 'pw')
l.search_s('DC=AD,DC=XXX,DC=YYY', ldap.SCOPE_SUBTREE, '(samaccountname=username)', ['displayname'])

我使用Samba4 DC和python ldap模块进行了一些测试,并完成了以下示例:

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

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

GrupoLDAP = "Domain Users" #Grupo a recuperar
CACert = '/etc/cert/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','PassWord')

    base = 'OU=Users,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)

证书需要CN中的FQDN,并由CA证书签名以避免证书错误。在我向同一个FQDN添加第二个DC之前一直在工作,但如果您只有一个DC,它应该可以工作。 我不知道它在windowsldap上是如何工作的,但是看起来很相似。在

你好!!在

相关问题 更多 >