Страница 1 из 1

Dovecot + OpenLDAP через TSL. Help me!

Добавлено: 2020-02-08 15:37:55
Fast_Deer
:st: Уже неделю бьюсь с этой бедой - моск кипит и от этого тупит! ПАМАГИТЕ!
Задача: есть сервак OpenLDAP (LDAP), где хранятся записи пользователей почты и есть почтовый сервак Dovecot+Postfix (далее mail) с авторизацией через Dovecot. В обычном режиме, без SSL, по 389 порту все работает нормально, но если переводишь LDAP в режим SSL (на 636 порт) и говоришь Dovecot подключаться туда, то на LDAP получаем:

Код: Выделить всё

Feb  8 14:23:14 ldap1 slapd[10057]: daemon: read activity on 9
Feb  8 14:23:14 ldap1 slapd[10057]: daemon: select: listen=6 active_threads=0 tvp=NULL
Feb  8 14:23:14 ldap1 slapd[10057]: daemon: select: listen=7 active_threads=0 tvp=NULL
Feb  8 14:23:14 ldap1 slapd[10057]: connection_closing: readying conn=1001 sd=9 for close
Feb  8 14:23:14 ldap1 slapd[10057]: daemon: activity on 1 descriptor
Feb  8 14:23:14 ldap1 slapd[10057]: daemon: waked
Feb  8 14:23:14 ldap1 slapd[10057]: daemon: select: listen=6 active_threads=0 tvp=NULL
Feb  8 14:23:14 ldap1 slapd[10057]: daemon: select: listen=7 active_threads=0 tvp=NULL
Feb  8 14:23:14 ldap1 slapd[10057]: daemon: removing 9
Feb  8 14:23:14 ldap1 slapd[10057]: conn=1001 fd=9 closed (TLS negotiation failure)
Сразу скажу: сертификат купленный, не самоподписанный, на домен (wildcard) и положен на все серваки в сети. Если с mail серва обратится к LDAP, то все работает:

Код: Выделить всё

root@mail: # ldapsearch -b 'dc=domain,dc=ru' -D 'uid=dovecot,ou=daemons,dc=domain,dc=ru' -w 'password' -H ldaps://ldap1.domain.ru '(cn=%u)' -d
# extended LDIF
#
# LDAPv3
# base <dc=domain,dc=ru> with scope subtree
# filter: (cn=%u)
# requesting: -d
#

# search result
search: 2
result: 0 Success

# numResponses: 1
Если включаешь в Dovecot обращение к ldap1.domain.ru:636,то вылазит вышеуказанная ошибка. В dovecot-ldap.conf.ext прописано:

Код: Выделить всё

hosts = ldap1.domain.ru:636
# Use TLS to connect to the LDAP server.
tls = no
#tls = yes
# TLS options, currently supported only with OpenLDAP:
tls_ca_cert_file = /etc/ssl/certs/ca-bundle.crt
tls_ca_cert_dir = /etc/ssl/certs/
#tls_cipher_suite =
# TLS cert/key is used only if LDAP server requires a client certificate.
tls_cert_file = /etc/ssl/domain.ru.crt
tls_key_file = /etc/ssl/private/domain.ru.key
# Valid values: never, hard, demand, allow, try
#tls_require_cert = allow
Я уже все перепробовал, больше нет идей. Если нужен какой-нибудь еще листинг, то выложу.
Помогите пожалуйста - я уже не знаю "куда копать". Перенос серваков просто встал из-за это проблемы

Dovecot + OpenLDAP через TSL. Help me!

Добавлено: 2020-02-08 16:09:12
Fast_Deer
Ну просто нет слов... Только стоило написать сюда как решение тут же было найдено! Ларчик, как оказалось, просто открывался: нужно было прописать сервак LDAP не через host, а через URIS:

Код: Выделить всё

uris = ldaps://ldap1.domain.ru
и все заработало!
Может кому нить понадобится в дальшейшем:
Использование ldap_connect с двумя параметрами теперь не приветствуется. Он может создавать только незашифрованное LDAP-соединение с серверами, указанными как $host и на порт, указанный в $port.

К настоящему времени вы должны использовать LDAP-URI, содержащий схему (ldap или ldaps), сервер и необязательно порт, если он не является стандартным для схемы. Второй параметр игнорируется.

Поэтому в нашем случае вы должны использовать что-то вроде этого:

$ldap_uri = "ldap://XXX.XX.XXX.edu:1636";

$ldap = @ldap_connect($ldap_uri);