Author Topic: Сбой GSSAPI - <incorrect-encoding/>  (Read 12372 times)

0 Members and 1 Guest are viewing this topic.

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 62
Сбой GSSAPI - <incorrect-encoding/>
« on: 18 05 2015, 13:10:21 »
После обновления на новую версию OpenFire (3.10) столкнулся с мелкой неприятностью: отвалился Single Sign-On.
Заставил миранду генерировать нетстат-логи, в коих обнаружил строку:

<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><incorrect-encoding/></failure>

При прочих равных подключение с сервером 3.10 не выполняется.
Поскольку других клиентов с GSSAPI я не знаю, решил все-таки написать сюда.
В чейнджлоге OpenFire они пишут что исправили баг OF-736 (https://igniterealtime.org/issues/browse/OF-736) который напрямую связан как раз с SASL и неправильным формированием base64.
Может ли быть проблема в способе, которым запрос формирует миранда?
 

Offline Magic

Re: Сбой GSSAPI - <incorrect-encoding/>
« Reply #1 on: 19 05 2015, 08:10:45 »
проверял gssapi на 3.10, все работало ок, как у тебя SSO заведен? Не через плагин случайно?
Если ручки растут из попки - это ножки
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 62
Re: Сбой GSSAPI - <incorrect-encoding/>
« Reply #2 on: 19 05 2015, 10:20:56 »
В том-то вся и веселуха, что через SASL-плагин под виндой все отлично работает.
А через GSSAPI с серваком на линуксе - обновляюсь и все, хана.
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 62
Re: Сбой GSSAPI - <incorrect-encoding/>
« Reply #3 on: 20 05 2015, 11:40:37 »
Есть аналогичная тема в форумах Ignite Realtime. Буду вопрошать у них.

Magic, а что у тебя за конфигурё?
 

Offline Magic

Re: Сбой GSSAPI - <incorrect-encoding/>
« Reply #4 on: 20 05 2015, 12:10:04 »
Есть аналогичная тема в форумах Ignite Realtime. Буду вопрошать у них.

Magic, а что у тебя за конфигурё?
openfire на винде, SSO через керберос билеты, работает без проблем в 3.9.1 и в 3.10.0.
на линухе SSO к сожалению не поднимал :(
Если ручки растут из попки - это ножки
 

Offline Magic

Odp: Сбой GSSAPI - <incorrect-encoding/>
« Reply #5 on: 01 07 2015, 11:50:05 »
Не нашли в чем проблема? Тоже отломалось SSO на винде, после апдейта на 3.10.2:
<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><incorrect-encoding/></failure>
Откатываешь ту же инсталляцию на 3.9.1 - все работает.
Если ручки растут из попки - это ножки
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 62
Re: Сбой GSSAPI - <incorrect-encoding/>
« Reply #6 on: 01 07 2015, 12:13:08 »
Не нашел, и не только я...
Вот тема форума уже на igniterealtime - https://community.igniterealtime.org/thread/55544
До сих пор везде 3.9.3 стоит.
 

Offline Magic

Re: Сбой GSSAPI - <incorrect-encoding/>
« Reply #7 on: 01 07 2015, 13:05:59 »
нашел :)
Проблема в этом патче:
https://github.com/igniterealtime/Openfire/commit/3eadecb67daddbcaeb1dc76ec578ed0f70e96ad8
Там 2 проверки на корректность передаваемого response, но клиенты могут отдавать пустой response(что и делает миранда в первом ответе) ( The initiating entity responds to the challenge by sending a
   <response/> element qualified by the
   'urn:ietf:params:xml:ns:xmpp-sasl' namespace; this element MAY
   contain XML character data
.)
https://tools.ietf.org/html/rfc6120#section-6.4.2
Тут есть проверка на длину строки:
Quote
@@ -301,9 +305,14 @@ else if (mechanisms.contains(mechanism)) {
 
                             // evaluateResponse doesn't like null parameter
                             byte[] token = new byte[0];
-                            if (doc.getText().length() > 0) {
+                            String value = doc.getTextTrim();
+                            if (value.length() > 0) {
+                                if (!BASE64_ENCODED.matcher(value).matches()) {
+                                    authenticationFailed(session, Failure.INCORRECT_ENCODING);
+                                    return Status.failed;
+                                }
                                 // If auth request includes a value then validate it
-                                token = StringUtils.decodeBase64(doc.getText().trim());
+                                token = StringUtils.decodeBase64(value);
                                 if (token == null) {
                                     token = new byte[0];
                                 }
А тут нет:
Code: [Select]
@@ -354,6 +363,10 @@ else if (mechanisms.contains(mechanism)) {
                         if (ss != null) {
                             boolean ssComplete = ss.isComplete();
                             String response = doc.getTextTrim();
+                            if (!BASE64_ENCODED.matcher(response).matches()) {
+                                authenticationFailed(session, Failure.INCORRECT_ENCODING);
+                                return Status.failed;
+                            }
                             try {
                                 if (ssComplete) {
                                     authenticationSuccessful(session, ss.getAuthorizationID(),

Если во втором блоке написать так:
Code: [Select]
if (response.length() > 0) {
if (!BASE64_ENCODED.matcher(response).matches()) {
authenticationFailed(session, Failure.INCORRECT_ENCODING);
return Status.failed;
}
                            }
То все работает прекрасно.
К сожалению не программист, как корректно сделать им пулл реквест не знаю :(
Если ручки растут из попки - это ножки
 

Offline Magic

Re: Сбой GSSAPI - <incorrect-encoding/>
« Reply #8 on: 01 07 2015, 13:11:18 »
Патченный openfire.jar от версии 3.10.2 - http://ge.tt/api/1/files/3pBmYVJ2/0/blob?download
проверьте?
закинуть в lib, рестартнуть сервис.
Если ручки растут из попки - это ножки
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 62
Re: Сбой GSSAPI - <incorrect-encoding/>
« Reply #9 on: 01 07 2015, 14:00:30 »
О, это прекрасно. Завтра проверю.
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 62
Re: Сбой GSSAPI - <incorrect-encoding/>
« Reply #10 on: 02 07 2015, 09:31:37 »
Все работает, равно как на виндах, так и на линях.
 

Offline Magic

Re: Сбой GSSAPI - <incorrect-encoding/>
« Reply #11 on: 02 07 2015, 09:46:39 »
Все работает, равно как на виндах, так и на линях.
Пробую до разрабов это донести, поскольку отломалась не только миранда, Psi, JaJC тоже не работают. Другие не проверял.
На голом 3.10 работает походу только последняя версия Spark :)
Если ручки растут из попки - это ножки
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 62
Odp: Сбой GSSAPI - <incorrect-encoding/>
« Reply #12 on: 02 07 2015, 11:00:04 »
Да, я видел уже как резко оживилась ветка :)
 

Offline Magic

Re: Сбой GSSAPI - <incorrect-encoding/>
« Reply #13 on: 12 08 2015, 15:48:01 »
https://community.igniterealtime.org/message/251139#251139
исправили вроде, ждемс 3.10.3
Если ручки растут из попки - это ножки
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 62
Re: Сбой GSSAPI - <incorrect-encoding/>
« Reply #14 on: 12 08 2015, 15:54:56 »
Прекрасно! Интересно лишь, когда они ее выпустят :)