【问题标题】:Does Python ldap module support LDAP channel binding and LDAP signingPython ldap 模块是否支持 LDAP 通道绑定和 LDAP 签名
【发布时间】:2020-05-15 04:05:13
【问题描述】:

Microsoft Active Directory 将于 2020 年 3 月更新,默认启用 LDAP 通道绑定和 LDAP 签名,请参阅https://support.microsoft.com/en-us/help/4520412/2020-ldap-channel-binding-and-ldap-signing-requirement-for-windows

当激活 LDAP 通道绑定和 LDAP 签名以查询 Active Directory 中的数据时,Python ldap 模块是否仍然有效?

我是否必须更改任何内容,还是可以直接使用?

我像这样连接到 Active Directory:

conn = ldap.initialize('url', bytes_mode=False)
conn.set_option(ldap.OPT_REFERRALS, 0)
conn.start_tls_s()
conn.simple_bind_s('username', 'password')

更新后我必须使用的最低 Python 和 ldap 模块版本是多少?

提前致谢。

【问题讨论】:

    标签: python active-directory ldap python-ldap


    【解决方案1】:

    如果您使用的是简单绑定(如在您的代码示例中),那么您的客户端无需进行任何更改。它将继续与LdapEnforceChannelBinding=2 合作。

    如果您强制要求签名 (LDAPServerIntegrity=2),那么您将无法在没有 ldaps 或 STARTLS 的情况下使用简单绑定(但您的示例代码似乎请求 STARTTLS,因此它应该继续工作)。

    但是我还没有测试 Pyton-ldap 与 SASL 是否设置了绑定信息,如果您想使用 GSSAPI/Kerberos 或 SASL/Digest-md5,这将是相关的。两者都不再适用于未修改的客户端(例如,Java sun-ldap JNDI Provider 失败)。

    【讨论】:

      【解决方案2】:

      我认为通道绑定不会影响通过 TLS (LDAPS) 进行的 LDAP 简单绑定。 频道签名是另一回事,但使用 TLS 也可以。

      据我所知,通道绑定用于 CBT 令牌,并且是 NTLMv2 的 SASL/NTLM 的一部分,然后不是由 LDAP 直接实现,而是通过使用 SASL。从 github 项目https://github.com/jborean93/ntlm-auth/blob/master/README.md 我可以找到 CBT 定义为从服务器证书派生的某个值,我猜它可能被 rfc 5929 覆盖,并且通道绑定令牌在第 4 章“tls-server-end-point”通道绑定中定义类型。

      这与 GSSAPI/Kerberos 相同(请参阅 https://github.com/requests/requests-kerberos/blob/master/requests_kerberos/kerberos_.py _get_channel_bindings_application_data )

      不过,我没有看过 SASL/Digest-md5 CBT。

      频道绑定是 CBT : https://support.microsoft.com/en-us/help/4034879/how-to-add-the-ldapenforcechannelbinding-registry-entry

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-11
        • 2011-06-10
        • 2019-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多