centos 7 + openfire 4.0.2 + SSO

27 июля 2016
Рубрика: CentOS, vanoc.ru
Теги: ,

vanoc

Заметка на память как заставить openfire работать с SSO

Качаем openfire и устанавливаем

wget http://download.igniterealtime.org/openfire/openfire-4.0.2-1.i386.rpm
yum install ~/openfire-4.0.2-1.i386.rpm

Ставим mysql
yum install mariadb mariadb-server libldb.i686 krb5-workstation

Добавляем в автозагрузку и запускаем mysql и openfire

systemctl enable mariadb.service
systemctl start mariadb.service
systemctl enable openfire.service
systemctl start openfire.service

Создаем базу данных

mysql
> CREATE DАТАBASE openfire;
> GRANT ALL on openfire.* to 'openfire'@localhost IDENTIFIED BY 'your password';
> FLUSH PRIVILEGES;

# полезная заметка с http://achlab.ru/ach/2011/08/24/openfire-знаки-вопроса-в-именах-контактов-и-г/

меняем кодировку на utf8

> use openfire;
> alter database character set utf8;
> alter database collate utf8_general_ci;

Во время установки, когда будете выбирать драйвер MySQL укажите URL к базе вида:
jdbc:mysql://localhost:3306/openfire?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8

Если openfire уже установлен, то переконвертируйте базу в utf8, затем файле конфигурации openfire.xml допишите после jdbc:mysql://localhost:3306/openfire

?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8

Здесь нужно ОБЯЗАТЕЛЬНО! заменить & на & иначе вместо входа в админку увидите страницу установки openfire.

# конец заметки

Открываем в браузере http://my_ip:9090/
my_ip меняем на ip адрес сервера

В процессе указываем использовать mysql базу, LDAP и прочее.

 	DC="realm",DC="local" 

С настройкой openfire почти закончено.

Настраиваем SSO

mv /etc/krb5.conf /etc/krb5.conf.bac
vim /etc/krb5.conf

Приводим файл к виду

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
        default_realm = REALM.LOCAL
        kdc_timesync = 1
        forwardable = true
        proxiable = true
        default_tkt_enctypes = rc4-hmac des3-cbc-sha1 des-cbc-crc des-cbc-md5
        default_tgs_enctypes = rc4-hmac des3-cbc-sha1 des-cbc-crc des-cbc-md5
        permitted_enctypes = rc4-hmac des3-cbc-sha1 des-cbc-crc des-cbc-md5
[realms]
        REALM.LOCAL = {
                kdc = realm.local
                admin_server = realm.local
                default_domain = REALM.LOCAL
        }
[domain_realm]
        .realm.local = REALM.LOCAL
        realm.local = REALM.LOCAL

Создадим gss.conf файл

vim /opt/openfire/conf/gss.conf

com.sun.security.jgss.accept {
    com.sun.security.auth.module.Krb5LoginModule
    required
    storeKey=true
    keyTab="/opt/openfire/xmpp.keytab"
    doNotPrompt=true
    useKeyTab=true
    realm="REALM.LOCAL"
    principal="xmpp/openfireserver.realm.local@REALM.LOCAL"
    isInitiator=false
    debug=true;
};

Создадим xmpp.keytab файл. Для этого заходим на контроллер домена.
Создаем учетку с любым именем, допустим xmpp-openfire, с вечным паролем и включенной опцией «Do not require Kerberos preauthentication» (Без предварительной проверки подлинности Kerberos)

Создаем SPN и связываем ее с учеткой xmpp-openfire

> setspn -A xmpp/openfireserver.realm.local@REALM.LOCAL xmpp-openfire
> ktpass -princ xmpp/openfireserver.realm.local@REALM.LOCAL -mapuser xmpp-openfire@realm.local -pass your_password -ptype KRB5_NT_PRINCIPAL

меняем your_password на пароль ранее созданной учетки.

Пришло время создать keytab файл.

> ktpass -princ xmpp/openfireserver.realm.local@REALM.LOCAL -mapuser xmpp-openfire@realm.local -pass your_password -ptype KRB5_NT_PRINCIPAL -out xmpp.keytab

xmpp.keytab будет лежать в C:\Documents and Settings\Administrator

забираем его и переносим на настраиваемый openfire сервер в /opt/openfire/
Путь должен совпадать с тем, что мы указали в gss.conf файле

Выставляем права на ключ
chown daemon:daemon /opt/openfire/conf/gss.conf
chown daemon:daemon /opt/openfire/xmpp.keytab
chmod 440 /opt/openfire/xmpp.keytab

Проверим ключ.

kinit -V -k -t /opt/openfire/xmpp.keytab xmpp/openfireserver.realm.local@REALM.LOCAL

ответ должен быть
Authenticated to Kerberos v5

Если все хорошо, то осталось совсем немного. Заходим браузером в консоль администратора Openfire и в разделе System properties и по одному добавляем параметры:

sasl.gssapi.config = /opt/openfire/conf/gss.conf
sasl.gssapi.debug = false
sasl.gssapi.useSubjectCredsOnly = false
sasl.mechs = GSSAPI
sasl.realm = REALM.LOCAL
xmpp.fqdn = openfireserver.realm.local

Перезапускаем openfire

systemctl restart openfire.service

На пользовательском компьютере правим реестр
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters
(For XP: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos)
добавляем параметр типа DWORD
AllowTGTSessionKey со значением 1.

Пеперезапускаем рабочую станцию.

Я использовал Spark, в нем выбираем опцию «Use Single Sign-On (SSO) via GSSAPI»

Собственно все.

Ошибки с которыми мне пришлось столкнуться в основном связаны с ключом и дублированием записей на контроллере домена.

Первая ошибка.

При попытке проверить ключ получал ответ

kinit -V -k -t /opt/openfire/xmpp.keytab xmpp/openfireserver.realm.local@REALM.LOCAL
Using default cache: /tmp/krb5cc_0
Using principal: xmpp/openfireserver.realm.local@REALM.LOCAL
Using keytab: /opt/openfire/xmpp.keytab
kinit: Client 'xmpp/openfireserver.realm.local@REALM.LOCAL' not found in Kerberos database while getting initial credentials

При этом с ключом все в порядке

klist -ek /opt/openfire/xmpp.keytab 
Keytab name: FILE:/opt/openfire/xmpp.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   4 xmpp/openfireserver.realm.local@REALM.LOCAL (arcfour-hmac)

В логах контроллера домена
Существует несколько учетных записей с именем xmpp/openfireserver.realm.local типа DS_SERVICE_PRINCIPAL_NAME.

Здесь следует проверить нет ли дублей. По всей видимости есть еще одна учетка привязанная к xmpp/openfireserver.realm.local

На win2008 можно выполнить
> setspn -x

На win2003 придется искать эту учетку вручную и проверять

> setspn -L xmpp-openfire
Registered ServicePrincipalNames for CN=xmpp-openfire,CN=Users,DC=realm,DC=local:
    xmpp/openfireserver.realm.local
    xmpp/openfireserver.realm.local@REALM.LOCAL
> setspn -L xmpp-openfire2
Registered ServicePrincipalNames for CN=xmpp-openfire2,CN=Users,DC=realm,DC=local:
    xmpp/openfireserver.realm.local
    xmpp/openfireserver.realm.local@REALM.LOCAL

При совпадении достаточно удалить лишнюю привязку

>setspn -D xmpp/openfireserver.realm.local xmpp-openfire2
Unregistering ServicePrincipalNames for CN=xmpp-openfire2,CN=Users,DC=realm,DC=local
        xmpp/openfireserver.realm.local
Updated object
>setspn -D xmpp/openfireserver.realm.local@REALM.LOCAL xmpp-openfire2
Unregistering ServicePrincipalNames for CN=xmpp-openfire2,CN=Users,DC=realm,DC=local
        xmpp/openfireserver.realm.local@REALM.LOCAL
Updated object

Вторая ошибка исходила из первой, а именно из-за имени учетки xmpp-openfire2

kinit -V -k -t /opt/openfire/xmpp.keytab xmpp/openfireserver.realm.local@REALM.LOCAL
Using default cache: /tmp/krb5cc_0
Using principal: xmpp/openfireserver.realm.local@REALM.LOCAL
Using keytab: /opt/openfire/xmpp.keytab
kinit: Unsupported key table format version number while getting initial credentials

В логах контроллера домена
Существует несколько учетных записей с именем xmpp/openfireserver.realm.local@REALM.LOCAL типа DS_USER_PRINCIPAL_NAME.

Дело в имени входа учетки xmpp-openfire2, оно выглядело как xmpp/openfireserver.realm.local, правим его на xmpp-openfire2.

Теперь при попытке проверить ключ я получал долгожданное
Authenticated to Kerberos v5

Один комментарий для “centos 7 + openfire 4.0.2 + SSO”

  1. VaVa24 сентября 2016 ~ 20:13

    Спасибо, чувак, я уёся c этой хернёй, и только эта инфа помогла.

Ваш комментарий

*