Spring-Security-Kerberos не может прочитать keytab?

Я пытаюсь следовать этому руководству для spring-security-kerberos. У меня есть таблица ключей с одним участником:

ktutil:  rkt http-web.keytab
ktutil:  l
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
   1    3 HTTP/aulfeldt.hta.nightly@WAD.ENG.HYTRUST.COM

Эта таблица ключей была сгенерирована на контроллере домена win 2k8 с помощью этой команды:

ktpass /out http-web.keytab /mapuser aulfeldt-hta-nightly@WAD.ENG.HYTRUST.COM /princ HTTP/aulfeldt.hta.nightly@WAD.ENG.HYTRUST.COM /pass *

который был скопирован на тестовом веб-сервере, используемом в spnego.xml:

<bean class="org.springframework.security.extensions.kerberos.SunJaasKerberosTicketValidator">
  <property name="servicePrincipal" value="HTTP/aulfeldt.hta.nightly@WAD.ENG.HYTRUST.COM" />
  <property name="keyTabLocation" value="/WEB-INF/http-web.keytab" />
  <property name="debug" value="true" />
</bean>

но не может найти принципала:

Key for the principal HTTP/aulfeldt.hta.nightly@WAD.ENG.HYTRUST.COM not available in 
jndi:/localhost/spring-security-kerberos-sample-1.0.0.CI-SNAPSHOT/WEB-INF/http-web.keytab
            [Krb5LoginModule] authentication failed 
Unable to obtain password from user

Я попытался присоединить веб-сервер (Centos 5.5, tomcat6) к AD WAD.ENG.HYTRUST.COM и могу войти в систему с использованием учетных данных AD, а затем с использованием принципала из /etc/krb5.keytab, чтобы посмотреть, можно ли его прочитать... тот же ответ. Я также попробовал много вариантов в верхнем и нижнем регистре имен.

PS проверил это из мерзавца этим утром.

3 ответа

Есть несколько ошибок, которые приводят к "Невозможно получить пароль от пользователя":

  1. неверно указанная локализация файла keytab (как указано в @jasop); это должно быть что-то вродеclasspath:http-web.keytab или же file:c:/http-web.keytabl
  2. неправильно заданное имя участника (т. е. имя участника, которое не соответствует фактическому имени, для которого был создан файл таблицы ключей)
  3. пробелы в пути к файлу keytab (обратите внимание, обязательно, если это когда-либо было исправлено),- видел жалобы в комментариях к записи блога SPRING SECURITY KERBEROS / SPNEGO EXTENSION SpringSource и получил свидетельство о моей среде разработки - Windows 7 / Java 6,- абсолютный путь должен учитываться всегда (даже если на keytab ссылается classpath без пробелов)

У меня была точно такая же проблема.

Проблема в настройке "keyTabLocation". Вы не можете установить его в /WEB-INF/http-web.keytab

Вам нужно установить его на путь к файлу или путь к классу.

Например, я поместил свой файл в путь к классам и сделал следующие настройки:

    <property name="keyTabLocation" value="classpath:http-web.keytab" />

Ключ для основного HTTP/ [email protected] недоступен в

Мы только что наткнулись на эту ошибку при попытке работать с клиентом SASL+Kerberos, пытающимся пройти аутентификацию у брокеров Kafka. Проблема заключалась в том, что их JVM не поддерживала расширенные шифровальные шифры, поэтому ключ не мог быть прочитан из keytab и молча игнорировался.

Решение состояло в том, чтобы обновить их версию Java, поскольку современные >= версии Java8 поддерживают AES256 и другие более продвинутые шифры.

Мы использовали следующий код Java для тестирования AES:

      /* Test to see if the current JVM supports AES > 128 */
public class UnlimitedSupportJCE {
    public static void main(final String[] args) {
        int strength = 0;
        try {
            strength = javax.crypto.Cipher.getMaxAllowedKeyLength("AES");
        } catch (java.security.NoSuchAlgorithmException e) {
            System.out.println("isUnlimitedSupported=FALSE");
        }
        if (strength > 128) {
            System.out.println("AES cipher strength is " + strength);
        } else {
            // probably not good enough for many kerberos keys
            System.out.println("Warning: AES cipher strength is only "+strength);
        }
    }
}
Другие вопросы по тегам