openldap: 클라이언트를 강제로 시작하는 것이 가능합니까?

openldap: 클라이언트를 강제로 시작하는 것이 가능합니까?

서버에서 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

TLS를 강제하기 위해 서버에서 이 ldif를 사용합니다.

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcSecurity
olcSecurity: tls=1

이제 문제는 TLS를 시행하더라도 LAN에서 비밀번호를 스니핑할 수 있다는 것입니다.

-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 강제 서버를 인식하고 localhost 또는 ldapi를 제외하고 -ZZ를 자동으로 활성화하는 메커니즘입니다.

답변1

클라이언트 LDAP 구성 파일(예: ~/.ldaprc 또는 /etc/ldap/ldap.conf)의 URI에 STARTTLS에 대한 LDAP 확장 작업을 추가해 볼 수 있습니다.

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는 URI에
추가하는 것과 같습니다. -ZZ는 URI에 추가하는 것과 같습니다. END UPDATE????1.3.6.1.4.1.1466.20037
????!1.3.6.1.4.1.1466.20037

몇 가지 팁이 포함된 참고 자료:

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

관련 정보