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 ответа
Есть несколько ошибок, которые приводят к "Невозможно получить пароль от пользователя":
- неверно указанная локализация файла keytab (как указано в @jasop); это должно быть что-то вроде
classpath:http-web.keytab
или жеfile:c:/http-web.keytabl
- неправильно заданное имя участника (т. е. имя участника, которое не соответствует фактическому имени, для которого был создан файл таблицы ключей)
- пробелы в пути к файлу 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);
}
}
}