Вопрос или проблема
Наши серверы OpenLDAP работают на версии EL6. OpenLDAP построен с использованием библиотек Mozilla Network Security Services (NSS). Наши клиенты LDAP работают на самых разных Unix и Linux системах.
Мы не можем заставить работать подключения OpenLDAP для клиентов или репликации, когда используем наши предпочтительные шифры TLS.
Например, если мы используем список Только самые сильные доступные шифры от Red Hat, такой как этот:
# /etc/openldap/slapd.conf
TLSProtocolMin 3.2
TLSCipherSuite ECDHE-RSA-AES256-SHA384:AES256-SHA256:!RC4:HIGH:!MD5:!EDH:!EXP:!SSLV2:!eNULL
Соединения с клиентами не проходят, потому что они не соответствуют нашему требованию ACL для минимального фактора силы безопасности (SSF):
slapd[22887]: conn=1022 fd=20 ACCEPT from IP=192.168.100.101:35936 (IP=192.168.100.100:636)
slapd[22887]: conn=1022 fd=20 TLS established tls_ssf=128 ssf=128
...
slapd[22887]: <= check a_authz.sai_ssf: ACL 256 > OP 128
Как я могу увидеть, какой шифр используется для этого соединения, чтобы я мог исключить его из списка?
Если мы отключаем список шифров и используем значения по умолчанию, предоставляемые OpenLDAP + NSS, это работает:
# /etc/openldap/slapd.conf
TLSProtocolMin 3.2
# TLSCipherSuite ECDHE-RSA-AES256-SHA384:AES256-SHA256:!RC4:HIGH:!MD5:!EDH:!EXP:!SSLV2:!eNULL
slapd[6020]: conn=1003 fd=20 ACCEPT from IP=192.168.100.101:35936 (IP=192.168.100.100:636)
slapd[6020]: conn=1003 fd=20 TLS established tls_ssf=256 ssf=256
Однако список по умолчанию неприемлем, потому что он включает некоторые слабые шифры, которые наша служба безопасности не хочет, например, шифры RC4-SHA и RC4-MD5.
Мы знаем, что EL6 становится EOL к концу года. Это другая проблема.
Мне не удалось сделать это напрямую с помощью tcpdump
или tshark
на узле. Что мне пришлось сделать, так это захватить tcpdump
на машине, передать данные на мой ноутбук, а затем запустить современную версию Wireshark, как указано на https://security.stackexchange.com/questions/52150/identify-ssl-version-and-cipher-suite
Еще одной очень полезной командой было использование скриптов nmap
для перечисления шифров:
$ nmap --script ssl-enum-ciphers -p 636 ldap.example.org -Pn
PORT STATE SERVICE
636/tcp open ldapssl
| ssl-enum-ciphers:
...
| TLSv1.2
| Ciphers (16)
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
| TLS_RSA_WITH_3DES_EDE_CBC_SHA
| TLS_RSA_WITH_AES_128_CBC_SHA
| TLS_RSA_WITH_AES_128_CBC_SHA256
| TLS_RSA_WITH_AES_128_GCM_SHA256
| TLS_RSA_WITH_AES_256_CBC_SHA
| TLS_RSA_WITH_AES_256_CBC_SHA256
| TLS_RSA_WITH_AES_256_GCM_SHA384
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds
Эти шифры AES_128
вызывают мою проблему, и поэтому я отключил их, добавив в список исключенных шифров:
TLSCipherSuite HIGH:!LOW:!MEDIUM:!RC4:HIGH:!MD5:!EDH:!EXP:!SSLV2:!eNULL:!AES128
С недавней версией openssl вы можете попробовать разные наборы шифров.
Для начала вы можете использовать:
openssl s_client -connect FQHN:port -starttls ldap
Он покажет цепочку сертификатов и выбранный шифр.
Например:
...
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 5335 bytes and written 452 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2400 bit
This TLS version forbids renegotiation.
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
...
.
Ответ или решение
Для решения вопроса о том, как определить шифр TLS, используемый в соединении OpenLDAP, необходимо учитывать несколько аспектов касательно конфигурации OpenLDAP и взаимодействия с клиентами через протоколы безопасности. Рассмотрим возможность идентификации используемого шифра, устранения проблем с безопасностью и соответствия требованиям к шифрам, установленным вашей организацией.
Теория
Для начала важно понять, что OpenLDAP использует библиотеки Mozilla Network Security Services (NSS) для реализации TLS. При этом, конфигурация шифров, поддерживаемых вашим сервером OpenLDAP, играет ключевую роль в успешности установления соединения с клиентами. В случае, если ваш сервер пытается использовать шифры, которые не поддерживаются клиентом или не соответствуют требованиям безопасности, установленным вашей организацией, это может привести к сбоям в соединениях.
В ситуации, описанной в вопросе, серверная конфигурация включает параметр TLSCipherSuite
, который определяет список допустимых шифров. Проблема возникает, когда применяемый шифр не соответствует минимальному требованию к фактору безопасности (Security Strength Factor, SSF).
Пример
Рассмотрим конфигурацию OpenLDAP:
# /etc/openldap/slapd.conf
TLSProtocolMin 3.2
TLSCipherSuite ECDHE-RSA-AES256-SHA384:AES256-SHA256:!RC4:HIGH:!MD5:!EDH:!EXP:!SSLV2:!eNULL
При этой настройке соединения могут проваливаться с ошибкой, как показано в логах:
slapd[22887]: conn=1022 fd=20 ACCEPT from IP=192.168.100.101:35936 (IP=192.168.100.100:636)
slapd[22887]: conn=1022 fd=20 TLS established tls_ssf=128 ssf=128
...
slapd[22887]: <= check a_authz.sai_ssf: ACL 256 > OP 128
Здесь видно, что SSF 128 не соответствует требованию ACL в 256, что приводит к отказу в соединении.
Практическое применение
Чтобы диагностировать, какой конкретно шифр используется в соединении и рассматривается с недостаточной SSF, можно использовать ряд инструментов:
-
tcpdump и WireShark: хотя это может быть неудобно на вашем устаревшем оборудовании, возможность захвата трафика с помощью
tcpdump
и последующего анализа в WireShark на более совершенной платформе может предоставить детальную информацию о безопасном соединении, включая используемый шифр. -
nmap: с помощью команды
nmap --script ssl-enum-ciphers -p 636 ldap.example.org -Pn
можно получить список доступных шифров, поддерживаемых вашим сервером. Это дает представление о том, какие шифры вообще могут быть предложены сервером клиенту.
-
openssl: использование команды
openssl s_client -connect FQDN:port -starttls ldap
позволяет вам как вручную протестировать связь, так и получить информацию о выбранном шифре после установления соединения.
Отказ от поддержки шифров с низким уровнем безопасности, таких как AES_128
, может устранить проблемы с соответствием требованиям безопасности. В вашем случае, добавление следующих параметров к TLSCipherSuite
для отключения небезопасных шифров послужило решением:
TLSCipherSuite HIGH:!LOW:!MEDIUM:!RC4:HIGH:!MD5:!EDH:!EXP:!SSLV2:!eNULL:!AES128
Вывод
Уверенность в том, что ваш сервер OpenLDAP использует современные, безопасные и соответствующие корпоративной политике шифры, требует тщательной настройки и проверки конфигурации. Используйте инструменты диагностики, чтобы проверить, какие шифры имеют поддержку и какие используются в реальных соединениях. Это поможет вам не только устранить текущие проблемы с конфигурацией, но и обеспечить безопасность и совместимость в будущем.
Помните, что использование устаревшего оборудования и ПО, срок службы которого подходит к концу, усложняет управление безопасностью. Поскольку ваша версия EL6 в ближайшее время будет дезактуализирована, вам следует рассмотреть обновление инфраструктуры для повышения её надежности и безопасности.