LINUX.ORG.RU

Проверка авторизации openLDAP через Redmine и Openfire

 , , ,


0

2

Уважаемые эксперты, прощу помощи.

Как проверить аутентификацию через openldap?

Первый раз настраиваю openLDAP (на Centos 7), настраивала для авторизации через openLDAP redmine и openfire. Ни в одном сервисе не получается залогиниться через ldap.

1. Проверка через redmine Проверяла настройку с другого Centos, через

getent passwd ldap1
, где ldap1 - это пользователь, созданный на сервере, мигрированный в ldap. С Centos-клиента могу авторизоваться на сервере через
 su - ldap1

Теперь, собственно, к Redmine. Стоит на другой машине в локальной сети, на самой машине прописала в

 /etc/hosts 
локальный IP сервера с openLDAP и имя локального домена local.domen

В редмине в режимах аутентификации прописываю

  • имя профиля - openLDAP
  • Компьютер - local.domen
  • Порт - 389 (на сервере открыт, на редминовский машине - тоже)
  • Учетная запись - ldap1
  • Пароль - пароль от пользователя ldap1, который был задан на сервере openLDAP перед миграцией
  • BaseDN - dc=local,dc=domen
  • Атрибут Login - sAMAccountName
  • Имя - givenName
  • Фамилия - sN
  • email - mail

После этого провожу проверку - Редмин пишет «Подключение успешно установлено». Пробую залогиниться тем же ldap1 - «Неправильное имя пользователя или пароль».

2. Проверка через авторизацию openfire.

Устанавливаю openfire, имя сервера - openfire, прописываю сервер авторизации - local.domen, Base DN - dc=local,dc=domen, логин - cn=Manager,dn=local,dc=domen, пароль от него, тест настроек успешен, администратором назначаю ldap1, проверка - успешна после ввода пароля. В админку openfire захожу под ldap1, вижу всех пользователей ldap.

А вот авторизоваться клиентом не могу - ни один логин/пароль от ldap не подходит - invalid username or password. В качестве сервера ввожу имя openfire, в hosts прописан IP openfire. Порт на openfire 5222 открыла. На сервере в

 all.log 
вот такое выводит после подключений:

2016.12.23 13:49:20 WARN  [socket_c2s-thread-3]: org.jivesoftware.openfire.nio.ConnectionHandler - Closing connection due to exception in session: (0x000000E3: nio socket, server, /192.168.1.**:3273 => /192.168.1.***:5222)
javax.net.ssl.SSLHandshakeException: SSL handshake failed.
        at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:487)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765)
        at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:109)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:410)
        at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:710)
        at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:664)
        at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:653)
        at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:67)
        at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1124)
        at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: javax.net.ssl.SSLException: Received fatal alert: certificate_unknown
        at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
        at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1666)
        at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1634)
        at sun.security.ssl.SSLEngineImpl.recvAlert(SSLEngineImpl.java:1800)
        at sun.security.ssl.SSLEngineImpl.readRecord(SSLEngineImpl.java:1083)
        at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:907)
        at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781)
        at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
        at org.apache.mina.filter.ssl.SslHandler.unwrap(SslHandler.java:728)
        at org.apache.mina.filter.ssl.SslHandler.unwrapHandshake(SslHandler.java:666)
        at org.apache.mina.filter.ssl.SslHandler.handshake(SslHandler.java:552)
        at org.apache.mina.filter.ssl.SslHandler.messageReceived(SslHandler.java:351)
        at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:468)
        ... 15 more

Судя по логам, подключение не прошло из-за SSL, ничего не настраивала, все из коробки, в качестве решения гугл пердложил проверить версию java и 7-ю обновить на 8,

 java -version

openjdk version "1.8.0_111"

OpenJDK Runtime Environment (build 1.8.0_111-b15)

OpenJDK 64-Bit Server VM (build 25.111-b15, mixed mode) 
Проверила на сервере ldap - пользователь есть, в ldap’е он есть, вывод команды дает следующее
 ldapsearch -x cn=ldap1 -b dc=local,dc=domen
 # extended LDIF

# ldap1, People, local.domen
dn: uid=ldap1,ou=People,dc=local,dc=domen
uid: ldap1
cn: ldap1
sn: ldap1
mail: ldap1@local.domen
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JHdNdWtqcm5uJC96cGJtL1FzM0FRVDJ4NHNnMC5vQ3B5WkdQUllJa3NMWFpTSWwucEZnUjJzRWwwUW5OT3VwQzdSb1RJbkpzUXZJdVJ3bXlHUi41eEZONkRwR2V4RG8v
shadowLastChange: 17154
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1003
gidNumber: 1003
homeDirectory: /home/ldap1

# ldap1, Group, local.domen
dn: cn=ldap1,ou=Group,dc=local,dc=domen
objectClass: posixGroup
objectClass: top
cn: ldap1
userPassword:: e2NyeXB0fXg=
gidNumber: 1003

# search result
search: 2
result: 0 Success

# numResponses: 3 
Т.е. получается пользователь один, но в разных группах у него разные пароли? Или пользователей все-таки два? По этому параметру
 userPassword:: e2NyeXB0fXg=
нашла только http://www.openldap.org/lists/openldap-software/200304/msg00083.html, из чего поняла, что какие-то пароли хешируются и эти аккаунты работают, а пароли со значением e2NyeXB0fXg= имеют не работающие аккаунты

Итого, вопроса три:

1. Редмин не распознает пользователей ldap, как проверить, где ошибка?

2. Openfire не распознает пользователей ldap через клиент, а вот через веб-интерфейс в админ-панели управления сервером логинит и видит всех пользователей ldap. Как починить?

3. Два пользователя (ldap1) в ldap в разных группах. Это норма или мои кривые руки? Пароли разные (судя по хешам), может это влиять на работу клиентов (redmine и openfire)? Если да, то как это исправить?

P.S. Есть более простой способ проверки правильной настройки openLDAP? :)

1.

avax.net.ssl.SSLHandshakeException: SSL handshake failed.

Добавь используемые SSL сертификаты в хранилище, путь к хранилищу пропиши в параметрах java приложения.
https://dev64.wordpress.com/2013/06/17/ssl-keystore-java/

Либо не используй (плохая идея) шифрование SSL

2.
getent, su и пр. Ни к редмайну ни к openfire отношения не имеют => чтобы ты не проверяла с их помощью, смысла в этом 0.

zgen ★★★★★ ()

1. В redmine login attribute должен быть uid, а не samaccountname.

2. openfire у тебя пытается подключаться по ldaps. Если ты его не настраивала на сервере openldap, то он ldaps и не слушает. В конфигурации openfire надо выставить правильный ldap url.

Ivan_qrt ★★★★★ ()
Ответ на: комментарий от Ivan_qrt

Спасибо за ответ.

В redmine login attribute должен быть uid, а не samaccountname.

Исправила параметр, результат тот же - Неправильный логин/пароль.

Если ты его не настраивала на сервере openldap, то он ldaps и не слушает.

Правильно ли я поняла, что сервер openfire нужно прописать в сервере ldap? В ldap я не настраивала openfire, ткните в направление, что искать.

В конфигурации openfire надо выставить правильный ldap url.

В системных настройках openfire-сервера нашла только параметр

ldap.host = local.domen

ldap url не нашла. Или самой внести как дополнительный параметр?

manik207 ()
Ответ на: комментарий от zgen

Спасибо за ответ.

1. Подскажите, как простым способом отключить SSL, чтобы он просто заработал для проверки?

2. А есть какой-то простой способ проверить работоспособность ldap на отдачу запрашиваемых у него данных?

manik207 ()
Ответ на: Спасибо за ответ. от manik207

Правильно ли я поняла, что сервер openfire нужно прописать в сервере ldap?

Нет.

Попробуй добавить ldap.sslEnabled = false и ldap.startTlsEnabled = false в конфигурацию openfire.

Исправила параметр, результат тот же - Неправильный логин/пароль.

Попробуй заменить basedn на ou=People,dc=local,dc=domen. Возможно он не ищет по вложенным контекстам.

Ivan_qrt ★★★★★ ()
Ответ на: комментарий от Ivan_qrt

Попробуй добавить ldap.sslEnabled = false и ldap.startTlsEnabled = false в конфигурацию openfire.

В моей конфигурации эти параметры были выключены. Вот полный список, уже не знаю куда смотреть, всё, что связано с ssl - отключила

ldap.adminDN	hidden
ldap.adminPassword	hidden
ldap.autoFollowAliasReferrals	true
ldap.autoFollowReferrals	false
ldap.baseDN	dc=local,dc=domen
ldap.connectionPoolEnabled	true
ldap.debugEnabled	false
ldap.emailField	mail
ldap.encloseDNs	true
ldap.groupDescriptionField	description
ldap.groupMemberField	member
ldap.groupNameField	cn
ldap.host	local.domen
ldap.ldapDebugEnabled	false
ldap.nameField	cn
ldap.override.avatar	false
ldap.port	389
ldap.posixMode	false
ldap.sslEnabled	false
ldap.startTlsEnabled	false
ldap.usernameField	uid
locale	ru_RU
provider.auth.className	org.jivesoftware.openfire.ldap.LdapAuthProvider
provider.group.className	org.jivesoftware.openfire.ldap.LdapGroupProvider
provider.user.className	org.jivesoftware.openfire.ldap.LdapUserProvider
provider.vcard.className	org.jivesoftware.openfire.ldap.LdapVCardProvider
sasl.scram-sha-1.iteration-count	4096
setup	true
stream.management.active	true
stream.management.requestFrequency	5
update.lastCheck	1482482294338
xmpp.auth.anonymous	true
xmpp.domain	conf157
xmpp.session.conflict-limit	0
xmpp.socket.ssl.active	false
xmpp.socket.ssl.client.certificate.accept-selfsigned	false
xmpp.socket.ssl.client.certificate.verify.validity	false
xmpp.socket.ssl.client.ciphersuites	 
xmpp.socket.ssl.client.protocols	 

В настройкаx смущает блок параметров provider.

В клиенте:

  • Имя пользователя - ldap1 (ldap1@conf157 и ldap1@local.domen тоже проверила)
  • Пароль - от пользователя ldap1
  • Сервер - conf157 (это имя сервера openfire, в hosts на клиенте прописано сопоставление conf157 и его IP)

Попробуй заменить basedn на ou=People,dc=local,dc=domen. Возможно он не ищет по вложенным контекстам.

Заменила, результат тот же, сменила на

ou=Group,dc=local,dc=domen
- тоже неверный пароль. Нашла логи redmine.

При авторизации ldap1, в логах /opt/redmine-3.1.7/log/production.log

Started POST "/login" for 192.168.1.XXX at 2016-12-25 11:03:45 +0300
Processing by AccountController#login as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"QgqnqS3GG7+sF2/cTvHTJw7VrXD4LT
VQZ7g/KHpjP3+SpA/kdLY5UAngQ6ustJCkiIEstjx4OcmaL8uI+ko31Q==", "back_url"=>"http://mydomen.ru/", 
"username"=>"ldap1", "password"=>"[FILTERED]", "login"=>"Вход »"}
  Current user: anonymous
Failed login for 'ldap1' from 192.168.1.XXX at 2016-12-25 08:03:46 UTC
manik207 ()
Ответ на: комментарий от Ivan_qrt

1. В redmine login attribute должен быть uid, а не samaccountname.

Расскажи это официальному мануалу на редмайне про подключение через лдап. Все работает с samaccountname

stave ★★★★★ ()

В редмайне стоит галка создавать пользователя или ты уже создала ручками?

stave ★★★★★ ()
Ответ на: комментарий от stave

И галка стоит, и пользователь ldap1 создан на сервере ldap. И пароль верный от ldap1.

manik207 ()
Ответ на: комментарий от manik207

Вывод - неверно настроенный сервер openLDAP

Подняла openLDAP на Ubuntu 15.10, в redmine создаются новые пользователи, подхватываемые с ldap'а,

Нашла, как в openfire отключить проверку SSL: Сервер - Настройки сервера - Client Connections - Plain-text (with STARTTLS) connections - Расширенные настройки - STARTTLS policy - Disable.

И spark авторизует пользователя ldap.

Всем спасибо, тему можно закрывать.

manik207 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.