gpt4 book ai didi

python 和 ldap 通过 SSL

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:27 25 4
gpt4 key购买 nike

我尝试使用 python 查询 Active Directory 服务器,但效果很好。但现在我不想通过网络发送未加密的凭据,所以我想使用 LDAP。是否有捷径可寻?到目前为止,我发现我必须添加这个选项:

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

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

Traceback (most recent call last):
File "./ldap-to-sql.py", line 21, in <module>
bind = l.simple_bind_s(USERNAME, PASS)
File "/usr/local/lib/python2.7/site-packages/ldap/ldapobject.py", line 214, in simple_bind_s
msgid = self.simple_bind(who,cred,serverctrls,clientctrls)
File "/usr/local/lib/python2.7/site-packages/ldap/ldapobject.py", line 208, in simple_bind
return self._ldap_call(self._l.simple_bind,who,cred,RequestControlTuples(serverctrls),RequestControlTuples(clientctrls))
File "/usr/local/lib/python2.7/site-packages/ldap/ldapobject.py", line 106, in _ldap_call
result = func(*args,**kwargs)
ldap.SERVER_DOWN: {'info': 'SSLHandshake() failed: misc. bad certificate (-9825)', 'desc': "Can't contact LDAP server"}

最佳答案

我用 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 证书签名以避免证书错误。在我将第二个 DC 添加到同一个 FQDN 之前一直在工作,但是如果您只有一个 DC,它应该可以工作。我不知道它在 Windows LDAP 上是如何工作的,但看起来很相似。

您好!

关于python 和 ldap 通过 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29296279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com