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

如何在无SSL证书下用Python更新Microsoft Active Directory密码

解决ldap3修改AD密码触发'unwillingToPerform'异常的问题

这个问题我之前帮团队排查过好几次,核心原因很明确:Active Directory默认要求必须通过加密连接(SSL/TLS)来修改用户密码,未配置SSL的普通LDAP连接(389端口)会被拒绝操作,直接抛出unwillingToPerform异常。

下面给你两种可行的解决方案,按优先级推荐:

方案一:使用LDAPS加密连接(推荐,生产环境必选)

这是AD官方认可的安全方式,即使没有正式的SSL证书,也可以用企业内部CA签发的证书或者自签证书临时过渡(自签仅适合测试环境)。

代码示例

from ldap3 import Server, Connection, TLS

# 配置TLS参数:测试环境可关闭证书验证(不建议生产用)
# 生产环境请替换为CA证书路径,比如 ca_certs_file='/path/to/your-ca.crt'
tls_settings = TLS(validate=0)  # validate=0 跳过证书验证,生产用validate=2

# 连接AD的LDAPS端口(默认636)
ad_server = Server('your-ad-domain.com', port=636, use_ssl=True, tls=tls_settings)
conn = Connection(ad_server, user='DOMAIN\\admin-account', password='admin-password', auto_bind=True)

try:
    # 修改目标用户密码,DN替换为实际用户的区分名
    conn.extend.microsoft.modify_password(
        'CN=John Doe,OU=Employees,DC=company,DC=com',
        'NewSecurePass123!'
    )
    print("密码修改成功")
except Exception as e:
    print(f"修改失败:{str(e)}")
finally:
    conn.unbind()

注意事项

  • 生产环境务必开启证书验证,避免中间人攻击,需要将AD服务器的CA证书部署到执行代码的服务器上。
  • 如果AD服务器还没开启LDAPS,需要先在AD服务器上安装SSL证书并启用LDAPS服务(通常是在证书管理器中绑定证书到LDAP服务)。

方案二:临时允许非SSL连接修改密码(仅测试用,禁止生产)

如果只是临时测试,不想配置SSL,可以通过修改AD组策略放宽安全限制,但这个操作会大幅降低AD的安全性,绝对不能在生产环境使用:

  1. 打开AD组策略管理编辑器,定位到:计算机配置 > 策略 > Windows设置 > 安全设置 > 本地策略 > 安全选项
  2. 找到网络安全: LDAP服务器签名要求,设置为无
  3. 找到网络安全: LDAP客户端签名要求,设置为无
  4. 更新组策略后,普通LDAP连接(389端口)就能修改密码了

总结一下,优先选择方案一,既符合AD的安全规范,也能从根本上解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:28:41