Настройте OpenLDAP с TLS = требуется

16

В настоящее время OpenLDAP необходимо настроить с помощью ldapmodify cn = config, как описано здесь . Но нигде я не могу найти, как вы настраиваете его только для приема трафика TLS. Я только что подтвердил, что наш сервер принимает незашифрованный трафик (с помощью ldapsearch и tcpdump).

Обычно я просто закрывал бы не-SSL-порт с IP-таблицами, но использование 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. Можно ли это изменить?

Halfgaar
источник

Ответы:

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"

Halfgaar
источник
2
+1 вроде бы отлично работает. К сожалению, если клиент пытается пройти аутентификацию без STARTTLS, он отправляет пароль в виде открытого текста, а затем сервер отвечает TLS confidentiality requiredсообщением.
Карлос Кампдеррос
1
Я разместил это в списке рассылки OpenLDAP как возможную проблему безопасности. Я привел пример FTP, который блокирует, как только вы даете USER. Но я был отменен. Видеть это.
Halfgaar
Забавно, я посмотрел эту
ветку,
Спасибо, именно то, что я искал. Пароль, передаваемый по незашифрованному тексту, будет зависеть от реализации программного обеспечения на стороне клиента. Требование TLS может быть проверено с анонимным связыванием, прежде чем пытаться связываться как пользователь.
Ошибка сервера
3

Это достигается с помощью опции TLSCipherSuite . Пример документирован в главе о безопасности LDAP книги OpenLDAP Zytrax . С его помощью вы можете сообщить OpenLDAP наборы шифров, которые будет принимать ваш сервер. Например, вы можете сказать, что вам не нужен набор NULLшифров (т.е. сеанс без шифрования).

Будьте осторожны, хотя OpenLDAP может быть связан с библиотеками OpenSSL или GnuTLS. Они используют разные списки шифров для описания своей поддержки шифрования. Список шифров OpenSSL можно получить с помощью команды like, 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, о котором стоит прочитать по аналогичному вопросу .

Стоит также отметить, что инструменты OpenLDAP cli, например ldapsearch, автоматически переключаются на использование TLS при подключении к серверу, запрещающему незашифрованные соединения. Это означает, что вам не нужно добавлять -Zв список аргументов.

Tonin
источник
Я попробовал это. Это не сработало. Я отредактировал свой вопрос, чтобы отразить его.
Halfgaar
Я думаю, что ошибка, о которой вы сообщаете, связана с шифрами, о которых знает ваша реализация TLS. OpenLDAP может быть скомпилирован с библиотеками OpenSSL или gnuTLS. В приведенном мной примере используется синтаксис OpenSSL, ваша реализация, вероятно, использует gnuTLS. Я бы посоветовал вам попробовать упрощенный CipherSuite, напримерALL:!NULL
Tonin
«ПРЕДУПРЕЖДЕНИЕ. Не будьте умными и измените TLSCipherSuite на что-то умное, например, HIGH: MEDIUM: -SSLv2 - это директива openssl» - прочитайте rogermoffatt.com/2011/08/24/ubuntu-openldap-with-ssltls .
Xdg