У нас есть сервер openldap, и мы не хотим разрешать незашифрованный обмен данными, поэтому приемлемо либо tls через порт 389 (starttls
) или ssl более 636 (ldaps
).
Поскольку мы используем slapd.conf для настройки, olcSecurity
не вариант.
TLSCipherSuite
похоже, способ сделать это с помощью slapd.conf. Но при использовании этого slapd либо не запускается, либо игнорирует настройки (т.е. принимает незашифрованные запросы).
slapd не запускается (ошибка: сбой TLS init def ctx: -1) при использовании:
- TLSCipherSuite ALL
- TLSCipherSuite Default
- TLSCipherSuite ALL:!NULL
- TLSCipherSuite ALL:!aNULL
- TLSCipherSuite AES256-SHA #one of the ciphers offered by openssl
slapd запускается, но принимает незашифрованные запросы при использовании:
- TLSCipherSuite NORMAL
- TLSCipherSuite NORMAL:!NULL #would be acceptable
- TLSCipherSuite !NULL #would be acceptable
Мы тестируем с
ldapsearch -L -x -W -h [SERVER] -D [USER] - b [SEARCHBASE] uid=[USER]
(незашифрованный)
и
ldapsearch -L -x -W -ZZ -h [SERVER] -D [USER] - b [SEARCHBASE] uid=[USER]
(зашифровано)
ОС, на которой работает openldap, - это debian 8.7. Версия openldap, похоже, использует gnutls, а не openssl, так что это может быть причиной проблем.
Но последние три TLSCipherSuite
варианты кажутся допустимым синтаксисом, по крайней мере, slapd запускается без ошибок. Почему не !NULL
запретить slapd принимать незашифрованные запросы? Последние два (используйте любой доступный шифр, но не допускайте никакого шифрования) будут приемлемыми.
Требуются ли дополнительные настройки / параметры?
Обратите внимание, что мы попробовали данные предложения Вот (как описано выше), но это не сработало.
Прекратить использовать slapd.conf
, но это всего лишь общий совет. Большинство, если не все olc*
директивы от slapd-config
доступны как не-olc директивы для slapd.conf
конфигурация стиля.
Для security
что-то в порядке security tls=1
должно быть достаточно, если вы также не используете SASL без TLS.
Ваши манипуляции с TLSCipherSuite
не будет работать, потому что они контролируют допустимые шифры только после того, как TLS используется, не имеет значения при выборе, использовать или требовать TLS. Для этого вы захотите использовать security
. Однако вам следует использовать лучшие варианты TLS, например по крайней мере TLSCipherSuite HIGH:!aNull:!MD5:@STRENGTH
и olcTLSProtocolMin 3.1
.
Из slapd.conf(5)
:
security <factors>
Укажите требуемый набор факторов силы безопасности (разделенных пробелом) (см.sasl-secprops's minssf
вариант для описания факторов безопасности). Директива может быть указана глобально и / или для каждой базы данных.ssf=<n>
определяет общий коэффициент надежности безопасности.transport=<n>
указывает коэффициент надежности транспорта.tls=<n>
указывает коэффициент прочности безопасности TLS.sasl=<n>
указывает коэффициент надежности безопасности SASL.update_ssf=<n>
указывает общий коэффициент надежности безопасности, необходимый для обновлений каталога.update_transport=<n>
указывает коэффициент надежности транспорта, необходимый для обновления каталога.update_tls=<n>
указывает фактор силы безопасности TLS, необходимый для обновления каталога.update_sasl=<n>
указывает фактор силы безопасности SASL, необходимый для обновлений каталога.simple_bind=<n>
определяет коэффициент надежности, необходимый для простой аутентификации по имени пользователя и паролю. Обратите внимание, что транспортный фактор - это мера безопасности, обеспечиваемая базовым транспортом, например ldapi: // (и в конечном итоге IPSEC). Обычно не используется.
Если вам необходимо продолжить использование slapd.conf, тогда эта тема содержит нужный вам ответ:
Из man slapd.conf
TLSVerifyClient
<level>
demand | hard | true
Все эти ключевые слова эквивалентны по соображениям совместимости. Требуется сертификат клиента. Если сертификат не предоставлен или предоставлен неверный сертификат, сеанс немедленно прекращается.
Что касается выбора шифров, LDAP Zytrax для ученых-ракетчиков дает несколько подсказок:
# Cipher-list contains only RSA based
# authentication and key-exchange suites
# supported by TLSv1 (and SSLv3)
TLS_CIPHER_SUITE TLSv1+RSA
# Cipher-list contains only RSA based
# authentication and key-exchange suites
# supported by TLSv1 (and SSLv3)
# excludes EXPORT and NULL suites
TLS_CIPHER_SUITE TLSv1+RSA:!EXPORT:!NULL
# Ordered list of RSA based
# authentication and key-exchange suites
TLS_CIPHER_SUITE DES-CBC-SHA:DES-CBC3-SHA:RC4-SHA:RC4-MD5
# All ciphers excluding NULL
TLS_CIPHER_SUITE ALL:!NULL
# Default equivalent value if not defined
TLS_CIPHER_SUITE ALL
Вам нужно изменить TLS_CIPHER_SUITE
к TLSCipherSuite
, и я подозреваю, что вы, возможно, захотите проверить, какие имена шифров будут работать (из руководство администратора):
Помимо имен отдельных шифров, могут быть полезны спецификаторы HIGH, MEDIUM, LOW, EXPORT и EXPORT40, а также TLSv1, SSLv3 и SSLv2.
Чтобы получить список шифров в GnuTLS, используйте:
`gnutls-cli -l`