我没有解释如何在服务器上配置 tls-ldap,在 google 上有很多配置它的东西(创建 tls 证书、创建 ldif、导入 ldif、尝试 ldapsearch -ZZ 等)。也很容易从服务器强制 tls,因此没有 -Z 或 -ZZ 的连接将被拒绝
ldapsearch -LLL -D "cn=ldapadm,dc=ldap1,dc=mydom,dc=priv" -wPASSWORD -b dc=ldap1,dc=mydom,dc=priv uidNumber=10009 uidNumber
ldap_bind: Confidentiality required (13)
additional info: TLS confidentiality required
与 ldapsearch 使用 -Z 就可以了
ldapsearch -Z -LLL -D "cn=ldapadm,dc=ldap1,dc=mydom,dc=priv" -wPASSWORD -b dc=ldap1,dc=mydom,dc=priv uidNumber=10009 uidNumber
dn: sambaSID=S-1-5-21-38458588-165473958-13245875-1289,ou=idmap,dc=ldap1,dc=mydom,dc=priv
uidNumber: 10009
我在服务器上使用此 ldif 强制进行 TLS
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcSecurity
olcSecurity: tls=1
现在的问题是,即使使用 tls 强制,也可以从局域网中嗅探密码
我运行不带 -Z 的命令,连接被拒绝
ldapsearch -LLL -D "cn=ldapadm,dc=ldap1,dc=mydom,dc=priv" -wPASSWORD -b dc=ldap1,dc=mydom,dc=priv uidNumber=10009 uidNumber
ldap_bind: Confidentiality required (13)
additional info: TLS confidentiality required
但是tcpdump可以看到密码!
tcpdump -i any port 389 -vvv -Xx|egrep --colour cn= -A 11
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
blah blah blah blah blah blah blah blah blah blah .`7...."cn=ldapa
blah blah blah blah blah blah blah blah blah blah dm,dc=ldap1,dc=m
blah blah blah blah blah blah blah blah blah blah ydom,dc=priv..PAS
blah blah blah blah blah blah blah blah blah blah SSWORDCLEAR!
....
问题很简单,当服务器上强制使用 tls 时,是否可以强制 ldapsearch 和所有 ldap 客户端使用 -Z ?如果看起来不可能,我可以提出一些“想法”
1) 带有 ldap 客户端选项的 rc 文件,其中包含要传递给客户端的选项,例如
LDAPSEARCH_OPTIONS="-ZZ"
2) 一种识别 tls 强制服务器并自动启用 -ZZ 的机制,但 localhost 或 ldapi 除外。
答案1
您可以尝试将 STARTTLS 的 LDAP 扩展操作添加到客户端 LDAP 配置文件(例如 ~/.ldaprc 或 /etc/ldap/ldap.conf)中的 URI。
URI ldap://<ldap-server>/????1.3.6.1.4.1.1466.20037
我似乎在这方面取得了一些成功。尽管我发现该选项TLS_REQCERT demand
要么停止工作,要么不太明白 STARTTLS 如何与 LDAP 配置文件中的证书选项交互。即使用上面的扩展操作配置,我仍然看到会话尝试使用不支持 STARTTLS 的服务器尝试 STARTTLS,然后返回到明文。
更新:如果您在 OID 之前添加感叹号 (!),则这似乎可以防止客户端故障返回到明文。例如
URI ldap://<ldap-server>/????!1.3.6.1.4.1.1466.20037
所以看来客户端(例如ldapsearch)命令行选项:
-Z 相当于添加????1.3.6.1.4.1.1466.20037
到URI
-ZZ 相当于添加????!1.3.6.1.4.1.1466.20037
到URI
END UPDATE
带有一些提示的参考资料:
https://lists.openldap.org/hyperkitty/list/[电子邮件受保护]/线程/SXWOL5SVSLWSNX35QFPVP6BPSLSHWOYG/#SXWOL5SVSLWSNX35QFPVP6BPSLSHWOYG
https://www.openldap.org/lists/openldap-devel/200202/msg00070.html
https://ldapwiki.com/wiki/StartTLS
https://www.rfc-editor.org/rfc/rfc4511#page-40
https://git.openldap.org/search?utf8=%E2%9C%93&snippets=false&scope=&repository_ref=master&search=LDAP_EXOP_START_TLS&group_id=13&project_id=1