TLS = 필수로 OpenLDAP 구성


16

오늘날 OpenLDAP는 여기에 설명 된대로 ldapmodify cn = config로 구성해야합니다 . 그러나 TLS 트래픽 허용 하도록 구성하는 방법을 찾을 수 없습니다 . 방금 서버에서 암호화되지 않은 트래픽 (ldapsearch 및 tcpdump 사용)을 허용 함을 확인했습니다.

일반적으로 IP 테이블로 비 SSL 포트를 닫을 것이지만 SSL 포트 사용은 더 이상 사용되지 않으므로 분명히 해당 옵션이 없습니다.

따라서 다음과 같이 SSL 구성 명령을 사용하십시오.

dn: cn=config
changetype:modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/bla.key
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/bla.crt
-
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/ca.pem

TLS를 강제하는 매개 변수가 있습니까?

편집 : olcTLSCipherSuite를 시도했지만 작동하지 않습니다. 디버그 출력 :

TLS: could not set cipher list TLSv1+RSA:!NULL.
main: TLS init def ctx failed: -1
slapd destroy: freeing system resources.
slapd stopped.
connections_destroy: nothing to destroy.

Edit2 (거의 고정) :로드하여 수정할 수있었습니다.

# cat force-ssl.tx 
dn: cn=config
changetype:  modify
add: olcSecurity
olcSecurity: tls=1

그러나 다음과 같은 명령

ldapmodify -v -Y EXTERNAL -H ldapi:/// -f /etc/ssl/tls-required.ldif

더 이상 작동하지 않습니다 ... 그리고 그것을 다음으로 변경하십시오 :

ldapmodify -v -x -D "cn=admin,dc=domain,dc=com" -H ldap://ldap.bla.tld/ -ZZ -W -f force-ssl.txt

"ldap_bind : 잘못된 자격 증명 (49)"이 표시됩니다. 분명히이 binddn이 rootdn으로 지정되어 있지만 그것을 변경하는 데 사용할 수는 없습니다 cn=config. 변경할 수 있습니까?

답변:


16

나는 그것을 얻은 것 같았다 :

저는 이것을 했어요:

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

그리고 그것은 원하는 효과가있는 것 같습니다. 여전히 다음과 같은 명령을 실행할 수 있습니다.

ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config

그러나 ldapsearch -xLLL -b ...SSL없이 " " 와 바인딩하려고하면 "TLS 기밀성이 필요합니다"라고 말합니다.


2
+1 잘 작동하는 것 같습니다. 불행하게도 클라이언트가 STARTTLS없이 인증을 시도하면 암호를 일반 텍스트로 보낸 다음 서버가 TLS confidentiality required메시지로 응답 합니다.
Carlos Campderrós

1
가능한 보안 문제로 OpenLDAP 메일 링리스트에 게시했습니다. USER에게 제공하자마자 차단되는 FTP의 예를 들었습니다. 그러나 나는 기각되었습니다. 이것 좀 봐.
Halfgaar

웃긴, 나는이 답변을 찾기 전에 그 스레드를 보았다 :)
Carlos Campderrós

고마워, 내가 찾던 것. 일반 텍스트로 유선을 통과하는 암호는 클라이언트 측 소프트웨어에 따라 구현됩니다. TLS 요구 사항은 사용자로 바인드하기 전에 먼저 익명 바인드로 테스트 할 수 있습니다.
서버 오류

3

이것은 TLSCipherSuite 옵션으로 달성됩니다 . 예는 OpenLDAP Zytrax 서적의 LDAP 보안 장에 설명되어 있습니다. 그것으로 당신은 서버가 받아 들일 암호 모음을 OpenLDAP에게 알릴 수 있습니다. 예를 들어, NULL암호화 제품군 (예 : 암호화되지 않은 세션)을 원하지 않는다고 말할 수 있습니다 .

OpenLDAP는 OpenSSL 또는 GnuTLS 라이브러리와 링크 될 수 있지만주의하십시오. 이들은 다른 암호화 목록을 사용하여 암호화 지원을 설명합니다. OpenSSL 암호 목록 openssl ciphers -v은와 같은 명령으로 , GnuTLS 목록 은로 얻을 수 있습니다 gnutls-cli -l.

암호화없이 연결을 해제 하는 가장 간단한 방법 은 다음과 같습니다.

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: ALL:!NULL

GnuTLS 구문을 사용하는보다 구체적인 제한 사항 :

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: TLS_RSA_CAMELLIA_128_CBC_SHA1:TLS_RSA_CAMELLIA_256_CBC_SHA1:!NULL

보다 완벽한 예는 다음과 같습니다 ( OpenSSL 구문 사용 ).

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: HIGH:+SSLv3:+TLSv1:MEDIUM:+SSLv2:@STRENGTH:+SHA:+MD5:!NULL

비슷한 질문에 대해 읽을 가치가있는 OpenLDAP 메일 링리스트 토론이 있습니다 .

ldapsearch암호화되지 않은 연결을 금지하기 위해 서버에 연결할 때 와 같은 OpenLDAP cli 도구 가 TLS를 사용하여 자동으로 전환 한다는 점도 주목할 가치가 있습니다. 즉 , args 목록 에 추가 할 필요 가 없습니다-Z .


나는 그것을 시도했다. 작동하지 않았다. 질문을 반영하여 편집했습니다.
Halfgaar December

보고하는 오류는 TLS 구현이 알고있는 암호와 관련이 있다고 생각합니다. OpenLDAP는 OpenSSL 또는 gnuTLS 라이브러리로 컴파일 할 수 있습니다. 내가 사용한 OpenSSL 구문의 예에서는 구현이 아마도 gnuTLS를 사용하고 있습니다. 예를 들어, CipherSuite와 같은 간단한 CipherSuite를 시도해보십시오.ALL:!NULL
Tonin

"경고 : 영리하지 말고 TLSCipherSuite를 HIGH : MEDIUM : -SSLv2와 같은 영리한 것으로 변경하십시오. 이것은 openssl 지시문입니다" -rogermoffatt.com/2011/08/24/ubuntu-openldap-with-ssltls를 읽으 십시오 .
Xdg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.