我在最新的 Debian 机器上运行 OpenLDAP。我尝试运行一个简单的命令:
ldapsearch -x -h <<IP>>:636 -D cn=<<BASE DN>> -d1
我得到了这个输出:
ldap_create
ldap_url_parse_ext(ldap://<<IP>>:636)
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP <<IP>>:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying <<IP>>:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
ldap_open_defconn: successful
ldap_send_server_request
ber_scanf fmt ({it) ber:
ber_scanf fmt ({i) ber:
ber_flush2: 35 bytes to sd 3
ldap_result ld 0x7f962cf14460 msgid 1
wait4msg ld 0x7f962cf14460 msgid 1 (infinite timeout)
wait4msg continue ld 0x7f962cf14460 msgid 1 all 1
** ld 0x7f962cf14460 Connections:
* host: <<IP>> port: 636 (default)
refcnt: 2 status: Connected
last used: Wed Dec 17 13:48:09 2014
** ld 0x7f962cf14460 Outstanding Requests:
* msgid 1, origid 1, status InProgress
outstanding referrals 0, parent count 0
ld 0x7f962cf14460 request count 1 (abandoned 0)
** ld 0x7f962cf14460 Response Queue:
Empty
ld 0x7f962cf14460 response count 0
ldap_chkResponseList ld 0x7f962cf14460 msgid 1 all 1
ldap_chkResponseList returns ld 0x7f962cf14460 NULL
ldap_int_select
read1msg: ld 0x7f962cf14460 msgid 1 all 1
ber_get_next
ldap_err2string
ldap_result: Can't contact LDAP server (-1)
ldap_free_request (origid 1, msgid 1)
ldap_free_connection 1 1
ldap_free_connection: actually freed
我不知道这到底是什么意思。看起来一切都很顺利,但在尝试检索结果时却一团糟。输出中是否有任何内容可以让我弄清楚为什么我的搜索不起作用?
当我运行相同的查询而不指定安全端口时,我的搜索工作正常:
ldapsearch -x -h <<IP>> -D cn=<<BASE DN>>
答案1
不要在 IP 地址后指定 SSL 端口,而是在 URI 中使用 LDAPS 协议使用 -H 开关:
ldapsearch -x -H ldaps://127.0.0.1 -D cn=[base DN] -d1
如果您使用自签名证书连接到服务器,您可能还需要修改ldap.conf
以禁用证书验证(不推荐):
HOST 127.0.0.1
PORT 636
TLS_REQCERT ALLOW
或者将服务器的公钥复制到你的客户端的证书列表中。
答案2
将本地(自行生成的)目标服务器和本地网络 CA 颁发机构复制到您想要使用 ldapsearch 的服务器的 /usr/local/share/ca-certificates/ 文件夹中。
运行命令
sudo 更新 ca 证书
此后 ldapsearch 查询将会起作用。