Python-ldap可以从python控制台连接到活动目录,但不能连接到应用程序

时间:2017-07-22 16:42:26

标签: python django ssl active-directory ldap

我正在尝试使用Python-ldap库连接到活动目录。 我有以下绑定代码:

def bind_connection():
    ldap_password = *******
    ldap_url = 'ldaps://*******:636
    ldap_login = "CN=***, CN=Users, DC=***, DC=local"
    ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
    l = ldap.initialize(ldap_url)
    l.set_option(ldap.OPT_REFERRALS, 0)
    l.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
    l.set_option(ldap.OPT_X_TLS, ldap.OPT_X_TLS_DEMAND)
    l.set_option(ldap.OPT_X_TLS_DEMAND, True)
    l.set_option(ldap.OPT_DEBUG_LEVEL, 255)
    l.simple_bind_s(ldap_login, ldap_password)
    return l

在python控制台中导入并运行它可以正常工作。我可以使用此绑定搜索,创建用户等。

尝试在Django应用程序中使用此类返回:

SERVER_DOWN: {'info': 'SSLHandshake() failed: misc. bad certificate
(-9825)', 'errno': 2, 'desc': "Can't contact LDAP server"}

所有代码都是从同一个开发环境运行的。 为什么它在一个实例中而不在另一个实例中工作?

1 个答案:

答案 0 :(得分:0)

能够弄清楚。我在随python-ldap库提供的演示中找到了这个。

# Force libldap to create a new SSL context (must be last TLS option!)
l.set_option(ldap.OPT_X_TLS_NEWCTX,0)

必须创建新的SSL上下文,此选项将执行此操作。