пятница, 13 февраля 2009 г.

Openfire - Часть 2. Openfire+Red5+Spark+SSO на Windows

При написании статьи я использовал материал с http://www.igniterealtime.org/community/docs/DOC-1362 (англ).


Оф.сайт Опенфаера, Спарка и плагинов к опенфаеру и спарку - http://www.igniterealtime.org/

Установка опенфаера, прикрученного к АД в первой части цикла статей про Openfire.

Моя площадка:

Сервер - Win2k3 SP2R2 rus, с последними обновлениями.
Клиенты - WinXP SP3, с последними обновлениями, IE6
Режим работы AD - смешанный.
Openfire 3.6.3
Spark 2.5.8
Red5-plugin for Openfire - 0.1.04
Red5-plugin for Spark - 0.0.6

И так, у нас в организации возникла необходимость внедрения видеоконференций. После продолжительного поиска опенсорс решений, я пришел к выводу, что не за чем изобретать велосипед, и все можно реализовать через джаббер-сервер Openfire c плагином Red5.
Ранее, у нас использовался клиент Pandion, но я не смог найти ред5-плагина к нему, хотя, в природе он вроде бы существует.

Т.к. у нас присутствует Актив Директори, то и джаббер-аккаунты привязаны к нему, ну и чтобы не заставлять бедных юзеров вводить пароли, нужна поддержка SSO

В общем, приступим. Первым делом понадобится пакет Support Tools, для вашей версии серверной винды, где, собственно и будет развернут опенфаер-сервер. Он есть на диске с виндой, то ли на первом, то ли на втором. Вроде на первом.

Настройка серера Windows для поддержки Single Sign-On в Openfire

1. Заходим на контроллер домена (далее КД) админом.

2. Создаем учетку в Active Directory (далее AD, АД), по умолчанию она должна быть в группе "Пользователи домена". Проверяем это. Кстати, у нас уже должа быть учетная запись, через которую Openfire (далее ОФ) коннектится к АД. Ее можно посмотреть в веб-админке ОФ, в разделе System Properties. Учетка должна быть с неограниченным сроком пароля и запретом его изменения.
В моем примере, учетка будет называться "xmpp-openfire" (осталось от англоязычного ХауТу. Если интересно, у меня она просто "of").

3.Идем в "програм файлс\саппорт тулс". Убеждаемся в наличии файла setspn.exe.

4. Теперь создаем "Kerberos XMPP SPN" (хрен иво знает че это, влом вкуривать %) ) для нашей опенфаеровской учетки (эта команда и последующие пишется в одну строку)

setspn -A xmpp/servername.domain.com@REALM.COM xmpp-openfire

servername.domain.com - полное доменное имя вашего КД (full quality doman name, FQDN), а после собаки, имя домена в верхнем регистре (это важно).
xmpp-openfire - имя вашей учетной записи для ОФ.

Результатом выполнения будет что-то типа

Registering ServicePrincipalNames for CN=xmpp-openfire,OU=OU_Users,DC=realm,DC=сщь
xmpp/servername.domain.com@REALM.COM
Updated object


5. Ищем в суппорт тулс файл ktpass.exe. Находим и радуемся. теперь мы должны привязать "Kerberos XMPP SPN" к нашей оф-учетке.

ktpass -princ xmpp/servername.domain.com@REALM.COM -mapuser xmpp-openfire@domain.com -pass **** -ptype KRB5_NT_PRINCIPAL

Тут о же самое.
servername.domain.com - полное доменное имя вашего КД (full quality doman name, FQDN), а после собаки, имя домена в верхнем регистре (это важно).
xmpp-openfire - имя вашей учетной записи для ОФ.
xmpp-openfire@domain.com - наша учетка@имя домена в нижнем регистре. Звездочтками отмечен пароль для этой учетки, соответственно, замените на свой.

на выходе получим что-то типа

Targeting domain controller: servername.domain.com
Successfully mapped xmpp/servername.domain.com to xmpp-openfire.
Key created.
Account of has been set for DES-only encryption.


6. Далее, мы должны создать keytab файл. он создается с помощью тулзы ktab, лежащей в каталоге Java/JRE. Я нашел этот каталог в папке опенфаер\jre\bin. В английском хауту написано, что версия java должна быть не ниже 1.6. В комплекте с ОФ 3.6.3 идет нужная версия. И так, выполняем

ktab -k xmpp.keytab -a xmpp/servername.domain.com@REALM.COM

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

на выходе а-ля

Password for xmpp/servername.domain.com@REALM.COM:****
Done!
Service key for xmpp/servername.domain.com@REALM.COM is saved in xmpp.keytab


оно создаст в этой же директории файл xmpp.keytab. Пущай там и лежит.

7. Идем снова в суппорт тулз, ищем и находим файло ktpass.exe. Выполняем

ktpass -princ xmpp/servername.domain.com@REALM.COM -mapuser xmpp-openfire@domain.com -pass **** -ptype KRB5_NT_PRINCIPAL -out xmpp.keytab

Заменяем, что нужно, как в пункте 5. На выходе имеем типа

Targeting domain controller: servername.domain.com
Failed to set property "servicePrincipalName" to "xmpp/servername.domain.com" on Dn
"CN=of,OU=OU_Users,DC=realm,DC=com": 0x14.
WARNING: Unable to set SPN mapping data.
If of already has an SPN mapping installed for xmpp/servername.domain.com, this i
s no cause for concern.
Key created.
Output keytab to xmpp.keytab:
Keytab version: 0x502
keysize 56 xmpp/servername.domain.com@REALM.COM ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype
0x3 (DES-CBC-MD5) keylength 8 (0xf185cb081f830e2f)
Account of has been set for DES-only encryption.


Как видите, оно заругалась на что-то, ну, и ф иг с ним. файлег создало и ладушки.

8. Копируем xmpp.keytab в каталог опенфаер\resourses. Я брал кейтаб изкаталога Java, а не саппорт тулс, несмотря на то, что второй мы создавали позже. За то первый весит больше =))

Настройка Openfire для SSO + Kerberos используя GSSAPI

1. Идем в каталог опенфаер\conf и создаем там файл gss.conf со следующим содержанием

com.sun.security.jgss.accept {
com.sun.security.auth.module.Krb5LoginModule
required
storeKey=true
keyTab="C:/Program Files/Openfire/resources/xmpp.keytab"
doNotPrompt=true
useKeyTab=true
realm="REALM.COM"
principal="xmpp/servername.domain.com@REALM.COM"
debug=true;
};


realm="REALM.COM"
и
principal="xmpp/servername.domain.com@REALM.COM"
меняете под себя.

2. На серваке идем в катлог винды и создаем там файл krb5.ini. вот егосодержание.

[libdefaults]
default_realm = REALM.COM
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.COM = {
kdc = kdc1.domain.com
admin_server = kdc1.domain.com
default_domain = domain.com
}

[domain_realms]
domain.com = REALM.COM
.domain.com = REALM.COM


REALM.COM везде меняем на имя домена в верхнем регистре. В секции [realms], в первых двух пунктах указываем КД, в третьем имя домена. Кстати, я взеде уазал имя домена, т.к. ресолв домена, по умолчанию ведет на первый попавшийся КД.

3. Включаем поддержку GSSAPI в Опенфаере. идем в каталог опенфаер\конф и видим там файл openfire.xml. Делаем копию этого файла, на всяк случай...

В конец файла, перед закрывающим тегом </jive> добавляем следующее


<!-- sasl configuration -->
<sasl> 
  <mechs>GSSAPI</mechs>  
  <!-- Set this to your Keberos realm name which is usually your AD domain name in all caps. -->
  <realm>REALM.COM</realm>  
  <gssapi> 
  <!-- You can set this to false once you have everything working. -->
  <debug>true</debug>  
  <!-- Set this to the location of your gss.conf file created earlier -->
  <!-- "/" is used in the path here not "\" even though this is on Windows. -->
  <config>C:/Program Files/Openfire/conf/gss.conf</config>  
  <usesubjectcredsonly>false</usesubjectcredsonly> 
  </gssapi> 
</sasl>  
<authorization> 
  <classlist>org.jivesoftware.openfire.auth.DefaultAuthorizationPolicy</classlist> 
  </authorization>



REALM.COM меняем под себя, остальное оставляем как есть.

4. Идем в опенфаер, если запущен, или запускаем, если нет.
На вкладке System Properties изменяем/добавляем параметр "xmpp.fqdn". В нашем примере это "servername.domain.com", т.е. FQDN КД.

Перезапускаем ОФ.

Настройка виндового клиента

Копируем файл krb5.ini с сервака в каталог винды на клиенте. Правим реестр.

Для Windows 2000 SP4, Windows 2003 Server или Windows Vista:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters
Value Name: AllowTGTSessionKey
Value Type: REG_DWORD
Value: 1


Для винды XP SP2, SP3

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos
Value Name: AllowTGTSessionKey
Value Type: REG_DWORD
Value: 1


Ребутимся клиентом. Для чистоты эксперимента, можно грохнуть каталог Spark в профиле юзера.

Запускаем Спарк и радуемся. Если не радуемся, проверяем все с начала. За одним сравниваем с английским вариантом. Хотя, я сам копипастил, опкосячиться не должон...

Установка red5-плагина

Тут все довольно тривиально. Качаем ред5 с сайта, указанного в начале этого топега. Ложим red5.war в каталог опенфаер\plugins. Через некоторое время опенфаер запалит новый плагин и автоматически его подключит. Перезапускаем Опенфаер.

В папке плагинс\ред5\Spark будет лежать red5-plugin.jar. Его копируем в папку плагинс у Спарка и перезапускаем спарк. Внимательно изучаем новые элементы меню в Спарке. Да, для корректной работы должен быть установлен flashplayer plugin для браузеров.