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

使用ldap3连接LDAP服务器遇SSL握手失败及地址无效问题排查

问题解答

1. 你的代码没有真正关闭证书名称校验

你创建了SSL上下文但未传递给Server对象,且仅关闭check_hostname不足以完全关闭证书校验,必须同时设置verify_mode为ssl.CERT_NONE。正确代码如下:

import ssl
from ldap3 import Server

context = ssl.create_default_context()
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE  # 必须添加该行以关闭证书校验

ldap_server = Server(
    host=LDAP_server_IP, port=636, use_ssl=True, get_info=ALL, ssl_context=context
)  # 需将ssl_context传入Server对象

2. 错误的其他可能原因

  • SSL/TLS版本不兼容:Python默认SSL上下文会禁用SSLv3、TLS 1.0等旧协议,若负载均衡或后端LDAP服务器仅支持这些弱版本,会触发握手失败。可尝试指定允许的协议版本:
    # 根据实际情况调整,比如允许TLS 1.0/1.1
    context.options |= ssl.OP_NO_TLSv1_3 | ssl.OP_NO_TLSv1_2
    
  • 负载均衡配置异常:负载均衡可能未正确配置LDAPS端口转发,或后端LDAP服务器健康检查失败导致无可用节点,触发"invalid server address"错误。需检查负载均衡的后端状态与流量转发规则。
  • 证书信任问题:若服务器使用自签证书,即使关闭名称校验,证书不在Python默认CA信任列表中仍会握手失败。可将证书导入信任池,或在上下文中加载证书:
    context.load_verify_locations('/path/to/server_cert.pem')
    
  • 网络/防火墙限制:端口636可能被本地防火墙、网关或云安全组拦截,导致无法建立连接。可通过telnet LDAP_server_IP 636测试端口是否可达。
  • LDAP库参数问题:get_info=ALL会尝试获取服务器全部信息,部分LDAP服务器不支持该操作,可能导致连接失败。可尝试改为get_info=NONE简化连接流程。

内容的提问来源于stack exchange,提问作者E. Jaep

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:30:07