Назад | Перейти на главную страницу

Настроить OpenLDAP с TLS = обязательно

В настоящее время 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. Это можно изменить?

Я вроде понял:

Я сделал это:

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 "

Это достигается с помощью TLSCipherSuite вариант. Пример задокументирован на Глава о безопасности LDAP в книге OpenLDAP Zytrax. С его помощью вы можете указать 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 о подобном вопросе.

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