You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的LDAP3模块通过LDAP签名连接AD查询GMSA属性

如何通过LDAP3模块或其他工具实现带LDAP签名的AD连接(389端口)

要在未部署LDAPS证书的环境下,通过389端口连接AD并启用LDAP签名(完整性校验),核心依赖Kerberos认证绑定——LDAP签名必须基于Kerberos会话密钥实现,无法通过明文绑定启用。以下是具体实现方案:

一、使用LDAP3模块实现

核心要点

  • 必须采用SASL的KERBEROS认证机制
  • 通过sasl_options={'sign': True}启用LDAP签名
  • 无需启用SSL,直接使用389端口

代码示例

from ldap3 import Server, Connection, SASL, KERBEROS

# 替换为你的AD域控制器地址
ad_server = 'dc01.example.com'
# 替换为目标GMSA的DN
gmsa_dn = 'CN=MyGMSA,OU=ServiceAccounts,DC=example,DC=com'

# 初始化LDAP服务器对象(禁用SSL)
server = Server(ad_server, port=389, use_ssl=False)

# 建立带签名的Kerberos连接
conn = Connection(
    server,
    authentication=SASL,
    sasl_mechanism=KERBEROS,
    sasl_options={'sign': True},  # 启用LDAP签名
    check_names=True
)

# 执行绑定与查询
if conn.bind():
    print("带LDAP签名的连接建立成功")
    # 查询GMSA的ManagedPassword属性
    conn.search(
        search_base=gmsa_dn,
        search_filter='(objectClass=msDS-GroupManagedServiceAccount)',
        attributes=['msDS-ManagedPassword']
    )
    # 输出结果
    for entry in conn.entries:
        print(f"GMSA密码Blob: {entry.msDS_ManagedPassword}")
    conn.unbind()
else:
    print(f"连接失败: {conn.result}")

环境配置说明

Windows平台

  • 若以域用户身份运行代码,系统会自动获取Kerberos票据,无需额外配置
  • 若以本地用户运行,需先通过命令行获取票据:
    kinit username@EXAMPLE.COM
    
    输入用户密码后再运行代码

Linux/macOS平台

  1. 安装Kerberos客户端工具:
    # Debian/Ubuntu
    sudo apt install krb5-user
    # RHEL/CentOS
    sudo yum install krb5-workstation
    
  2. 配置/etc/krb5.conf,指定AD域的KDC信息:
    [libdefaults]
        default_realm = EXAMPLE.COM
        dns_lookup_kdc = true
    [realms]
        EXAMPLE.COM = {
            kdc = dc01.example.com
            admin_server = dc01.example.com
        }
    [domain_realm]
        .example.com = EXAMPLE.COM
        example.com = EXAMPLE.COM
    
  3. 获取Kerberos票据:
    kinit username@EXAMPLE.COM
    
  4. 运行Python代码

二、使用ldapsearch工具实现

如果不需要编程,可直接用ldapsearch命令行工具实现带签名的查询:

ldapsearch -Y GSSAPI -h dc01.example.com -p 389 \
-b "CN=MyGMSA,OU=ServiceAccounts,DC=example,DC=com" \
"(objectClass=msDS-GroupManagedServiceAccount)" \
msDS-ManagedPassword -E "sign=TRUE"
  • -Y GSSAPI:指定Kerberos认证
  • -E "sign=TRUE":启用LDAP签名
  • -b:指定查询的基准DN

三、常见问题排查

  1. AD服务器配置检查:确保域控制器的组策略中,“域控制器: LDAP服务器签名要求”设置为「需要签名」或「允许签名」
  2. 权限验证:确保用于连接的AD用户拥有读取GMSA对象msDS-ManagedPassword属性的权限
  3. Kerberos票据有效性:用klist(Windows/Linux)命令查看当前是否有有效的Kerberos票据
  4. 错误信息分析:若连接失败,重点查看conn.result(LDAP3)或命令行输出中的错误码,排查Kerberos认证失败、签名未启用等问题

内容的提问来源于stack exchange,提问作者Sitaram Pamarthi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:13:15