Настройте 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, Можно ли это изменить?

2 ответа

Решение

Я, кажется, получил это:

Я сделал это:

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, как ldapsearch, автоматически переключаются на использование TLS при подключении к серверу, запрещающему незашифрованные подключения. Это означает, что вам не нужно добавлять -Z в список аргументов.

Другие вопросы по тегам