python - 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
到各种旧版本,但都以同样的方式失败。
解决方案
解决方案是首先通过使用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
下一步:找出我们的证书包有什么问题
推荐阅读
- javascript - 使用平铺打开图层保存画布地图
- java - .jar 输出到 python smtp 电子邮件
- python - 如何在 python 中循环使用 elementtree 并正确打印 XML?
- java - 尝试将文件复制到 Windows 的启动文件夹时出现 AccessDeniedException
- c - C - 如何在文本文件中拆分一行并存储它们的值?
- html - 如何防止某个页面被 Blogdown 编辑但仍放置在公用文件夹中?
- javascript - 回文检查器 - for 循环的问题
- python - 用python中的dict制作一个字符串
- java - 在 Java SpringBoot 中构建自定义 Curl 请求
- php - 使用PHP删除MongoDB中数组内的元素