我正在尝试使用一些基本的安全参数配置 LDAP 服务器,包括 TLS 和所需的身份验证绑定。
我已经启动了服务器,并且可以使用以下命令从本地主机访问它:
ldapsearch -x -b 'dc=server,dc=com' 'objectclass=*' -W -D 'cn=manager,dc=server,dc=com' -H ldaps://server.com:389
当我从我的计算机远程尝试相同的命令时,我收到以下错误消息:
ldap_sasl_bind(SIMPLE):无法联系 LDAP 服务器(-1)
我不知道为什么会发生这种情况,我可以 ping 我的服务器,但目前没有防火墙。
slapd
推出-h ldaps://server.com:389/
DNS 服务器在同一台服务器上以基本方式配置,仅具有 A 记录。
你有什么主意吗 ?
编辑
我已经在另一台工作站(在 arch-linux 上)上进行了测试,并且它可以正常工作!在我使用的两台计算机上TLS_REQCERT allow
,/etc/openldap/ldap.conf
所以这应该不是证书问题,不是吗?
如果有任何重要性的话,ldap 查询不起作用的工作站是 Mac OS X。
一些输出:
远程登录:
telnet server.com 389
Trying w.x.y.z...
Connected to server.com.
Escape character is '^]'.
Iptables:
sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
网络状态:
sudo netstat -lnt | grep 389
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN
tcp6 0 0 :::389 :::* LISTEN
我已经在没有任何安全参数的情况下进行了测试,并且得到了相同的结果。
答案1
我会考虑使用标准端口。以 开始-h ldap:///
。LDAP 支持 startTLS,并且可以轻松配置为在传递敏感信息之前要求 TLS。
可以使用 Telnet 来确定是否可以访问服务器。尝试命令telnet server.com ldap
。如果服务器地址正确,则应该可以连接。
在服务器上,您可以使用命令检查以确保 LDAP 已绑定到外部地址netstat -lnt | grep 389
。这将显示您正在监听哪个地址。
一旦 LDAP 在没有 TLS 的情况下工作,请启用 startTLS 和/或添加ldaps:///
到您的启动中。
您可以使用选项security update_ssf=16 simple_bind=16
来要求这些操作使用 TLS。然后客户端可以连接到端口LDAP
并切换到TLS
使用 startTLS 操作。
编辑:在客户端和/或服务器上使用调试有助于确定连接失败的位置。添加-d -1
到命令行以调试所有内容。调试开关接受各种子系统的调试标志位图。 -d ?
将列出它们及其值。一旦您知道子系统正在运行,您就可以停止调试并专注于其他子系统。
从客户端开始调试是最简单的,但可能需要在服务器上进行一些调试。如果您通过 syslog 进行记录,则有一个调试日志文件可以检查调试输出,这会很有帮助。
答案2
当您使用 LDAP网址在表单中
ldaps://server.com:389
,服务器将期望
SSL当 客户 端 连接 端口 时 , 就会 进行 协商
389
.启动TLS无法在现有的 SSL 连接上使用:StartTLS“转换”(可能促进是一个更好的词)将不安全的连接到安全连接,因此,由于ldaps://server.com:389
已经是安全连接,因此无法使用 StartTLS。您的服务器应接受来自 上的明文客户端的连接ldap://server.com:389
,并拒绝任何不立即使用 StartTLS 的客户端连接 - 如果您的服务器产品无法立即拒绝不安全的客户端连接,则应选择该类别的产品。如果还需要 SSL 端点,服务器应在 上监听安全客户端连接ldap://server.com:636
。