首页 > 解决方案 > Django LDAPS TLS 开始失败并出现错误 SERVER_DOWN

问题描述

今天我们很高兴 LDAPS 在 Django 应用程序中失败。

我们的点子要求包括:

python-ldap==3.3.1
django-auth-ldap==3.0.0

我们的 Django 设置文件包括:

AUTH_LDAP_SERVER_URI = "ldaps://ldaps.server.net.au:636"

AUTH_LDAP_CONNECTION_OPTIONS = {
    ldap.OPT_DEBUG_LEVEL: 1,
    ldap.OPT_REFERRALS: 0,
    ldap.OPT_NETWORK_TIMEOUT: 5.0,
    ldap.OPT_TIMEOUT: 5.0,
}

我们看到的模糊错误是:

Caught LDAPError while authenticating sighmon: SERVER_DOWN({'result': -1, 'desc': "Can't contact LDAP server", 'errno': 115, 'ctrls': [], 'info': '(unknown error code)'},)

在今天之前,它已经运行了大约 2 年。

我们尝试固定django-auth-ldap到各种旧版本,但都以同样的方式失败。

标签: pythondjangoldap

解决方案


解决方案是首先通过使用AUTH_LDAP_GLOBAL_OPTIONS而不是设置选项来获得调试输出AUTH_LDAP_CONNECTION_OPTIONS

这给出了更有用的错误:TLS: peer cert untrusted or revoked (0x42).

我们确认LDAP没有S认证没问题,所以继续深入研究 TLS 问题。

我们测试了与 LDAPS 服务器的连接:telnet ldaps.server.net.au:636并且连接愉快。所以看起来我们的 LDAPS 服务器很开心。

我们通过以下方式检查了证书:openssl s_client -showcerts -verify 5 -connect ldaps.server.net.au:636 < /dev/null

一切似乎都很好,所以我们一直在研究 LDAP 选项......

这个选项为我们解决了问题:ldap.OPT_X_TLS_REQUIRE_CERT: ldap.OPT_X_TLS_ALLOW所以我们的全部选项最终是:

AUTH_LDAP_GLOBAL_OPTIONS = {
    ldap.OPT_DEBUG_LEVEL: 1,
    ldap.OPT_REFERRALS: 0,
    ldap.OPT_NETWORK_TIMEOUT: 5.0,
    ldap.OPT_TIMEOUT: 5.0,
    ldap.OPT_X_TLS_REQUIRE_CERT: ldap.OPT_X_TLS_ALLOW,
}

请参阅此解决方案和其他解决方案的未解决问题:https ://github.com/django-auth-ldap/django-auth-ldap/issues/198

下一步:找出我们的证书包有什么问题


推荐阅读