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

Django集成LDAP认证遇证书验证失败,咨询可信证书路径

Django LDAP认证证书查找路径及认证失败问题

我尝试在Django中集成LDAP认证,但认证无法正常进行——即使输入正确的LDAP凭据,用户信息也无法存入Django用户模型。

以下是我的Django项目settings.py文件内容:

AUTH_LDAP_SERVER_URI = 'ldaps://xxxxxx:636'
AUTH_LDAP_BIND_DN = 'CN=xxxxx,OU=Service,OU=Accounts,OU=SF_SAP,DC=sf,DC=priv'
AUTH_LDAP_BIND_PASSWORD = 'xxxxxxxx'
AUTH_LDAP_USER_SEARCH = LDAPSearch('OU=User,OU=Accounts,OU=SF_SAP, DC=sf,DC=priv',ldap.SCOPE_SUBTREE, '(CN=%(user)s)')

AUTH_LDAP_USER_ATTR_MAP = {
        "first_name": "givenName",
        "last_name": "sn",
        "email": "mail",
        "username": "uid",
        "password": "userPassword",
}
AUTH_LDAP_PROFILE_ATTR_MAP = {
        "home_directory": "homeDirectory"
}
AUTH_LDAP_ALWAYS_UPDATE_USER = True
AUTH_LDAP_CACHE_TIMEOUT = 3600

AUTHENTICATION_BACKENDS = (
        'django_auth_ldap.backend.LDAPBackend',
        'django.contrib.auth.backends.ModelBackend',
)

我启用了LDAP日志,日志中出现如下错误:

Binding as CN=xxxxxxxxx,OU=Service,OU=Accounts,OU=SF_SAP,DC=sf,DC=priv
Caught LDAPError while authenticating xxxxxx: SERVER_DOWN({'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': [], 'info': 'error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed (unable to get local issuer certificate)'})

正式问询:Django会在哪些路径下查找可信证书?


回答

Django本身没有单独维护可信证书路径,它依赖django-auth-ldap底层的python-ldap库,而该库使用OpenSSL的证书存储机制,默认查找路径如下:

  • Linux系统:通常为/etc/ssl/certs/目录,部分发行版(如RHEL/CentOS)会使用/etc/pki/tls/certs/;也会读取/etc/ssl/cert.pem或/etc/pki/tls/cert.pem这类合并证书文件。
  • Windows系统:直接调用系统证书存储(Windows Certificate Store)中的可信根证书。
  • macOS系统:默认读取/usr/local/etc/openssl/certs/,或系统钥匙串(Keychain Access)内的可信证书。

从你的错误日志来看,核心问题是本地缺少LDAP服务器证书的颁发机构证书,导致验证失败。可以通过以下方式解决:

  1. 指定自定义证书路径:在settings.py中配置全局LDAP选项,强制指定CA证书文件路径:
import ldap
AUTH_LDAP_GLOBAL_OPTIONS = {
    ldap.OPT_X_TLS_CACERTFILE: "/path/to/your/ca-certificate.pem",
    ldap.OPT_X_TLS_REQUIRE_CERT: ldap.OPT_X_TLS_DEMAND,
}

将/path/to/your/ca-certificate.pem替换为LDAP服务器CA证书的实际路径。
2. 测试环境临时跳过验证:仅用于测试场景,生产环境禁止使用:

import ldap
AUTH_LDAP_GLOBAL_OPTIONS = {
    ldap.OPT_X_TLS_REQUIRE_CERT: ldap.OPT_X_TLS_NEVER,
}

另外注意你的AUTH_LDAP_USER_SEARCH中DN的格式问题:OU=SF_SAP, DC=sf里逗号后多了空格,应改为OU=SF_SAP,DC=sf,避免DN解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:45:35