BellaLugoshi
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору прошу соображающих и сочувствующих помочь выявить проблему. поставил связку: Win2003 Server SP2 -> dc.domain.com Win2012 R2 Datacenter Preview -> srv.domain.com (Openfire) (виртуалка vmware, возможно не лучший выбор системы) Win7 Pro -> app.domain.com (Spark) Нужна реализация SSO Kerberos. Делал по разным инструкциям на русском (которые часто противоречивы), переделал из первоисточника на английском. Посмотрим позднее как всё запустится в работу и напишу свое руководство, потому что подводных камней и лишних телодвижений по ходу установки было много, инструкции всё не охватывают. Итак, мои настройки и установки: 1) на DC создан юзер xmpp-openfire с паролем qwerty с опциями "Unable to change password", "Password never expires" и "Does not require Kerberos Preauthentication" 2) для xmpp-openfire создана Kerberos XMPP SPN на DC Код: setspn -A xmpp/srv.domain.com@DOMAIN.COM xmpp-openfire | 3) для юзера xmpp-openfire создаем мапу Kerberos XMPP SPN на DC на запрос пароля указал qwerty Код: ktpass -princ xmpp/srv.domain.com@DOMAIN.COM -mapuser xmpp-openfire@domain.com -pass * -ptype KRB5_NT_PRINCIPAL | 4) создал файл xmpp.keytab на DC тоже с паролем qwerty Код: ktpass -princ xmpp/srv.domain.com@DOMAIN.COM -mapuser xmpp-openfire@domain.com -pass * -ptype KRB5_NT_PRINCIPAL -out xmpp.keytab | 5) xmpp.keytab положил на srv.domain.com в папку resources сервера Openfire 6) на диске сервера Openfire создал папку \of_conf 7) создал там файл gss.conf следующего содержания Код: com.sun.security.jgss.accept { com.sun.security.auth.module.Krb5LoginModule required storeKey=true keyTab="C:/of_conf/xmpp.keytab" doNotPrompt=true useKeyTab=true realm="DOMAIN.COM" principal="xmpp/srv.domain.com@DOMAIN.COM" debug=true; }; | 8. создал файл krb5.ini и положил его на клиентскую машину со Spark'ом, но не в c:\windows как написано в инструкции, а в c:\, так как иначе он не видится Код: [libdefaults] default_realm = DOMAIN.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] DOMAIN.COM = { kdc = dc.domain.com admin_server = dc.domain.com default_domain = domain.com } [domain_realms] domain.com = DOMAIN.COM .domain.com = DOMAIN.COM | 9) настраиваем openfire.xml на сервере Openfire, между тегами <jive></jive> вбиваем Код: <!-- sasl configuration --> <sasl> <mechs>GSSAPI</mechs> <realm>DOMAIN.COM</realm> <gssapi> <debug>true</debug> <config>C:/of_conf/gss.conf</config> <useSubjectCredsOnly>false</useSubjectCredsOnly> </gssapi> </sasl> <authorization> <classList>org.jivesoftware.openfire.auth.DefaultAuthorizationPolicy</classList> </authorization> | 10) заходим в админку Openfire через вэб htpp://srv.domain.com:9090 - я выбрал язык English - выбираем встроенную базу - затем AD (LDAP) - тип сервера Active Directory, host = dc.domain.com, BaseDN = dc=domain, dc=com, AdminDN (а вот тут интересно) не вида dc=adm, dc=domain, dc=com, а в моем случае dc=Ваня Иванов, dc=domain, dc=com, то есть не логин админа а именно представление в DC - а вот на следующей странице добавляем администратора домена как adm, то есть пишем логин на учетку в домене, если пишет ошибку, то на предыдущей странице вы ошиблись с записями DN - после окончания настройки первого запуска Openfire вы должны без проблем залогиниться под юзером и учеткой админа домена, которую указали в настройках (для моей версии Openfire 3.8.2 есть пара глюков: при настройке не работали кнопки тестирования и при логине нельзя жать ENTER, а нужно именно мышкой нажать кнопку Login) - жмем кнопку User/Groups и должны получить список юзеров домена - Заходим по кнопкам Server -> Server Manager -> System Properties мотаем список вниз и добавляем property с названием xmpp.fqdn и содержимым полного пути к Openfire серверу, то есть srv.domain.com, сохраняем, сервер Openfire перезапускаем 11) Заходим в настройки Брэндмауэра Wondows на Openfire сервере srv.domain.com (2 часа убитого времени пока это осознал) и добавляем два правила для TPC и UDP с разрешением на порты 5222, 5223, 5229, 7070, 7443, 9090, 9091 12) На машине с клиентом Spark в реестре меняем параметр Код: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters Value Name: AllowTGTSessionKey Value Type: REG_DWORD Value: 1 | и перезагружаем 13) Запускаем клиент Spark, переходим в дополнительные настройки и включаем Use Single Sign-On (SSO) GSSAPI, сохраняем, в ответ на главном окне должны увидеть запрос логина и ниже надпись вида This will use the Desktop Account for “***” to login to the server, где вместо *** указано имя логина вашей доменной учетки, под который вы сейчас сидите и через @ указан Realm, который вы указали в настройках, в моем случае DOMAIN.COM 14) вбиваем логин, затем сервер Openfire, например для меня adm и srv и пытаемся войти. Здесь у меня и не работает SSO. В логах Spark вот такая информация: Код: java.lang.IllegalStateException: Not connected to server. at org.jivesoftware.smack.XMPPConnection.sendPacket(XMPPConnection.java:445) at org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:69) at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:352) at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:203) at org.jivesoftware.LoginDialog$LoginPanel.login(LoginDialog.java:1014) at org.jivesoftware.LoginDialog$LoginPanel.access$1200(LoginDialog.java:219) at org.jivesoftware.LoginDialog$LoginPanel$4.construct(LoginDialog.java:730) at org.jivesoftware.spark.util.SwingWorker$2.run(SwingWorker.java:141) at java.lang.Thread.run(Unknown Source) 18.10.2013 9:07:35 org.jivesoftware.spark.util.log.Log warning WARNING: Exception in Login: java.lang.IllegalStateException: Not connected to server. at org.jivesoftware.smack.XMPPConnection.sendPacket(XMPPConnection.java:445) at org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:69) at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:362) at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:203) at org.jivesoftware.LoginDialog$LoginPanel.login(LoginDialog.java:1014) at org.jivesoftware.LoginDialog$LoginPanel.access$1200(LoginDialog.java:219) at org.jivesoftware.LoginDialog$LoginPanel$4.construct(LoginDialog.java:730) at org.jivesoftware.spark.util.SwingWorker$2.run(SwingWorker.java:141) at java.lang.Thread.run(Unknown Source) | с машины со Spark делаю Код: telnet srv.domain.com 5222 | и получаю ответ. это встроенная java в клиент, банальные замены папок от 1.7 версии не работают, просто где-то прочитал что могут быть проблемы с 1.6 версией Код: C:\Program Files (x86)\Spark\jre\bin>java -version java version "1.6.0_18" Java(TM) SE Runtime Environment (build 1.6.0_18-b07) Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing) | DNS стоит на dc.domain.com, прямые и обратные зоны проверил, починил и теперь всё пучком. Код: C:\Program Files\Windows Resource Kits\Tools>klist.exe tgt Cached TGT: ServiceName: krbtgt TargetName: krbtgt FullServiceName: adm DomainName: DOMAIN.LOCAL TargetDomainName: DOMAIN.LOCAL AltTargetDomainName: DOMAIN.LOCAL TicketFlags: 0x40e00000 KeyExpirationTime: 1/1/1601 7:00:00 StartTime: 10/18/2013 9:22:58 EndTime: 10/18/2013 19:22:58 RenewUntil: 10/25/2013 9:22:58 TimeSkew: 1/1/1601 7:00:00 | готов добавить информацию по запросу, если что-то еще требуется. Добавление 1: Если в Spark включить дебаг информэйшн, то появляется консоль java с информацией по подключению, а именно Код: srv.dimain.com 5222 2013.10.18 12:39:15 PM Active | Код: <stream:stream to="srv" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0"> <iq id="UCx4u-0" type="get"><query xmlns="jabber:iq:auth"><username>adm</username></query></iq> <presence id="UCx4u-1" type="unavailable"></presence> <stream:stream to="srv" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0"> <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/> <stream:stream to="srv" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0"> |
|