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

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Fast_Deer
мл. сержант
Сообщения: 126
Зарегистрирован: 2013-01-09 10:56:34

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

Непрочитанное сообщение Fast_Deer » 2020-02-08 15:37:55

: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
Я уже все перепробовал, больше нет идей. Если нужен какой-нибудь еще листинг, то выложу.
Помогите пожалуйста - я уже не знаю "куда копать". Перенос серваков просто встал из-за это проблемы

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Fast_Deer
мл. сержант
Сообщения: 126
Зарегистрирован: 2013-01-09 10:56:34

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

Непрочитанное сообщение Fast_Deer » 2020-02-08 16:09:12

Ну просто нет слов... Только стоило написать сюда как решение тут же было найдено! Ларчик, как оказалось, просто открывался: нужно было прописать сервак 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);