В настоящее время 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
в список аргументов.