Ssl

openldap:可以從客戶端強制啟動 starttls 嗎?

  • February 2, 2022

我沒有解釋如何在伺服器上配置 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

使用 -Z 的 ldapsearch 可以

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 force 也可以從區域網路中嗅出密碼

我在沒有 -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"
  1. 一種辨識 tls 強制伺服器並自動啟用 -ZZ 的機制,但 localhost 或 ldapi 除外。

您可以嘗試將 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/openldap-devel@openldap.org/thread/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

引用自:https://unix.stackexchange.com/questions/618924