Назад | Перейти на главную страницу

Ошибка репликации в зеркальном режиме OpenLDAP с TLS за балансировщиком нагрузки

У меня есть два сервера OpenLDAP, на которых работает TLS. Они есть:

ldap1.mydomain.com
ldap2.mydomain.com

У меня также есть кластер балансировщика нагрузки с собственным именем DNS:

ldap.mydomain.com

Сертификат SSL имеет CN ldap.mydomain.com, а SAN - ldap1.mydomain.com и ldap2.mydomain.com.

Все работает ... Кроме режима зеркала репликации.

Моя репликация в зеркальном режиме настроена следующим образом:

ldap.conf

TLS_REQCERT allow

cn = config.ldif

olcServerID: 1 ldap://ldap1.mydomain.com
olcServerID: 2 ldap://ldap2.mydomain.com

На ldap1 olcDatabase {1} hdb.ldif

olcMirrorMode: TRUE
olcSyncrepl: {0}rid=001 provider=ldap://ldap2.mydomain.com bindmethod=simple bindmethod=simple binddn="cn=me,dc=mydomain,dc=com" credentials="REDACTED" starttls=yes searchbase="dc=mydomain,dc=com" schemachecking=on type=refreshAndPersist retry="60 +"

На ldap2 olcDatabase {1} hdb.ldif

olcMirrorMode: TRUE
olcSyncrepl: {0}rid=001 provider=ldap://ldap1.mydomain.com bindmethod=simple bindmethod=simple binddn="cn=me,dc=mydomain,dc=com" credentials="REDACTED" starttls=yes searchbase="dc=mydomain,dc=com" schemachecking=on type=refreshAndPersist retry="60 +"

Вот ошибки, которые я получаю в системном журнале:

Dec  1 21:05:01 ldap1 slapd[6800]: slap_client_connect: URI=ldap://ldap2.mydomain.com DN="cn=me,dc=mydomain,dc=com" ldap_sasl_bind_s failed (-1)
Dec  1 21:05:01 ldap1 slapd[6800]: do_syncrepl: rid=001 rc -1 retrying
Dec  1 21:05:08 ldap1 slapd[6800]: conn=1111 fd=20 ACCEPT from IP=ldap.mydomain.com:2295 (IP=ldap1.mydomain.com:636)
Dec  1 21:05:08 ldap1 slapd[6800]: conn=1111 fd=20 closed (TLS negotiation failure)

Любые идеи? Я слишком долго работаю над OpenLdap.

Починил это. Было две проблемы.

1) Сертификат CSR ясно показал альтернативные имена субъектов для двух отдельных серверов LDAP. Я подписал его, используя обычную команду openssl, которую использую для подписи, и никогда не проверял сам сертификат. Оказывается, на сертификате не было альтернативных имен субъектов, потому что для них требуются специальные расширения v3. Вот команда, которую я использовал.

openssl x509 -req -days 3650 -in ldap.csr -signkey ldapskey.pem -out cert.pem -extensions v3_req -extfile /etc/ssl/openssl.cnf

2) УДАЛЕНО пароль, который у меня был в моей директиве olcSyncrepl, на самом деле был хешем SSHA. Похоже, это не круто. Я заменил хэш SSHA паролем в виде открытого текста.

Да, и я также убрал наложения syncprov, так что только один оверлей существовал в каждой из фактических баз данных, а не в базах данных конфигурации.

Кстати, я нашел сообщение Говарда Чу, в котором он сказал, что избавление должно быть уникальным в конфигурации сервера, а не в вашей зеркальной конфигурации, охватывающей серверы. Итак, похоже, что rid может быть 001 на обоих серверах, но в любом случае я оставил его 001 и 002, и это никому не вредит.

Как указано в 16.5.3. Конфигурация MirrorMode,

Вам также необходимо убедиться, что избавляться каждой пары зеркальных узлов отличается ...

Итак, на ldap2 меняем rid=001 к rid=002.