在Python中使用LDAP3模块进行LDAP签名

zbq4xfa0  于 2023-04-22  发布在  Python
关注(0)|答案(1)|浏览(198)

我正在使用LDAP3模块从Active Directory中查询信息。要获取像GMSA密码blob这样的信息(ManagedPassword属性),则ActiveDirectory期望任一连接都是安全的(LDAPS)或**LDAP签名(完整性)**被使用。我遇到了一个环境没有安装LDAPS证书的情况,安装的可能性被排除了。所以我剩下的唯一选择就是使用LDAP签名。任何人都有一个想法,如何使用LDAP签名,同时连接到活动目录超过389无论是与LDAP3模块或其他一些?

fjaof16o

fjaof16o1#

TLS有两个方面(LDAPS中的S):
1.服务器信任客户端
1.客户端信任服务器
这与LDAP无关,但与TLS有关,与HTTPS使用的TLS相同,所以在回答你的问题之前,我将使用HTTPS。

1.服务端信任客户端

大多数情况下,服务器无法信任客户端。想象一下,如果您每次访问新的https网页时都必须建立信任关系!那么服务器几乎从未配置为信任其客户端。即使您的LDAP服务器处于更好的位置来信任其客户端(例如,它可以保存他们的证书),它通常不是这样配置的。当它是,我们称之为双向TLS或双向TLS。
在建立了单边TLS连接之后,信任将通过使用密码或Kerberos票证在安全连接上进行身份验证来实现。所以这里没有什么可担心的。

2.客户端信任服务端

一些服务器配置了错误的TLS。这里是一个test server that uses a certificate that your browser (or operating system) does not trust
但是,如果您单击“高级”并继续访问该网站(在Chrome,ymmv中),则会向您显示内容(一个大的红色页面),因为决定通过忽略/接受不受信任的证书来“信任”该网站。
当然,如果你不能信任服务器的证书,有可能你正在发送你的凭据到一个流氓服务器。这可能是不太可能的,所以我会让处理这种可能性,并回答你的问题。

无证书连接LDAPS

只需指示LDAPS库跳过证书验证并继续,就像您在该测试页面上手动执行的操作一样。
对于python-ldap,在调用ldap.initialize之前添加以下内容:

ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
ldap.initialize("ldaps://ad.example.com")

或ldap 3,然后再创建服务器:

import ssl
tls_configuration = Tls(validate=ssl.CERT_NONE, version=ssl.PROTOCOL_TLSv1)
server = Server("ldaps://ad.example.com", use_ssl=True, tls=tls_configuration)

相关问题