2015-07-02 5 views
0

Я пытаюсь настроить SSO для Windows Active Directory для Tomcat (6), используя SPNEGO filter.Tomcat 6 с SPNEGO SSO по-прежнему запрашивает логин и пароль

У меня настройка, как в примере, но я все еще предлагаю ввести логин и пароль при попытке получить доступ к hello_spnego.jsp.

я, вероятно, что-то отсутствует, так вот мой конф:

web.xml (в отношении SPNEGO):

<filter> 
    <filter-name>SpnegoHttpFilter</filter-name> 
    <filter-class>net.sourceforge.spnego.SpnegoHttpFilter</filter-class> 
    <init-param> 
     <param-name>spnego.allow.basic</param-name> 
     <param-value>false</param-value> 
    </init-param> 
    <init-param> 
     <param-name>spnego.allow.localhost</param-name> 
     <param-value>false</param-value> 
    </init-param> 
    <init-param> 
     <param-name>spnego.allow.unsecure.basic</param-name> 
     <param-value>false</param-value> 
    </init-param> 
    <init-param> 
     <param-name>spnego.login.client.module</param-name> 
     <param-value>spnego-client</param-value> 
    </init-param> 
    <init-param> 
     <param-name>spnego.login.server.module</param-name> 
     <param-value>spnego-server</param-value> 
    </init-param> 
    <init-param> 
     <param-name>spnego.krb5.conf</param-name> 
     <param-value>${catalina.home}\conf\krb5.conf</param-value> 
    </init-param> 
    <init-param> 
     <param-name>spnego.login.conf</param-name> 
     <param-value>${catalina.home}\conf\login.conf</param-value> 
    </init-param> 
    <init-param> 
     <param-name>spnego.preauth.username</param-name> 
     <param-value>aqw</param-value> 
    </init-param> 
    <init-param> 
     <param-name>spnego.preauth.password</param-name> 
     <param-value>pass</param-value> 
    </init-param> 
    <init-param> 
     <param-name>spnego.prompt.ntlm</param-name> 
     <param-value>false</param-value> 
    </init-param> 
    <init-param> 
     <param-name>spnego.logger.level</param-name> 
     <param-value>1</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>SpnegoHttpFilter</filter-name> 
    <url-pattern>*.jsp</url-pattern> 
</filter-mapping> 

krb5.conf:

[libdefaults] 
default_realm = TEST.LOCAL 
default_tkt_enctypes = rc4-hmac,aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96 
default_tgs_enctypes = rc4-hmac,aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96 
forwardable=true 

[realms] 
TEST.LOCAL = { 
    kdc = SERVER_WITH_AD:88 
    default_realm = TEST.LOCAL 
} 

[domain_realm] 
dev.local = TEST.LOCAL 
.dev.local = TEST.LOCAL 

login.conf:

spnego-client { 
    com.sun.security.auth.module.Krb5LoginModule required; 
}; 

spnego-server { 
    com.sun.security.auth.module.Krb5LoginModule required 
    storeKey=true 
    isInitiator=false 
    useKeyTab=true 
    keyTab="C:\Osys\QuartisTools\Tomcat\conf\aqw.keytab" 
    ; 
}; 

EDIT: He ре, что я сделал:

  • Я создал пользователя (AQW) на моем сервере, SERVER_WITH_AD
  • Я установил его SPN с помощью следующей команды:

    Setspn -A HTTP/SERVER_WITH_AD.Test.local AQW

  • Я создал Keytab файл для него с помощью следующей команды:

    Ktpass/из C: \ aqw.keytab/mapuser [email protected]/Princ HTTP/[email protected]/PASS */KVNO 0

  • Я передал файл keytab в Tomcat/conf.

  • Я добавил login.conf и krb5.conf в Tomcat/conf.
  • Я отредактировал учетную запись моего пользователя (в пользовательском интерфейсе AD), чтобы принять шифрование AES 128 бит.
  • Я добавил JCE jars в свой jdk1.7.0_51/jre/lib/security от this page после поиска информации с другого вопроса на SO.

Дополнительная информация:
- SERVER_WITH_AD запускает Server 2012 (x64) Windows.
- TOMCAT_SERVER запускает Windows 7 Ultimate (x64).

EDIT 2: Как я уже сказал, я добавил адрес в список доверенных сайтов.

В какой-то момент я перестал видеть имя пользователя/приглашение входа в систему, но сейчас я получаю сообщение об ошибке в Tomcat (показывая как ошибка HTTP 500):
KrbException: недопустимый аргумент (400) - Не удается найти ключ соответствующих тип для расшифровки AP REP - AES256 Режим CTS с HMAC SHA1-96
Так что, вероятно, он не может найти мой keytab.

+0

Internet Explorer выдает запрос о том, что ваша установка не работает. –

+0

Да, я понимаю, что, следовательно, вопрос. но сломанный как? Поскольку я использую Tomcat и SPNEGO из коробки, это как-то связано с моим conf. Я отредактирую вопрос, чтобы добавить информацию. – Pascal

+1

Имя хоста указано в разделе «Настройки/Безопасность/Надежный список хостов»? У каждого браузера есть собственные настройки для этого, без этого IE отправляет токен HTTP-заголовка NTLM вместо билета Kerberos. https://ping.force.com/Support/PingIdentityArticle?id=kA3400000008RiECAU – Whome

ответ

0

После выполнения ошибки «не удается найти ключ», я обновил свои файлы conf, со всеми советами, чтобы поместить имена файлов в стиле Unix. Это, и я переместил их, чтобы быть рядом с файлами conf, чтобы иметь кратчайшие пути. Я также добавил принципала, as in the server keytab testing procedure described here:, чтобы мой логин.conf is:

spnego-client { 
    com.sun.security.auth.module.Krb5LoginModule required; 
}; 

spnego-server { 
    com.sun.security.auth.module.Krb5LoginModule required 
    useKeyTab=true 
    keyTab="appserver.keytab" 
    principal=aqw 
    storeKey=true; 
}; 

Это дало мне ошибку контрольной суммы, поэтому я повторно сгенерировал файл keytab.

Это, в свою очередь, показал другую ошибку:
javax.security.auth.login.LoginException: Нет CallbackHandler доступного собрать информацию аутентификации от пользователя

Так что я редактировал мой web.xml, чтобы незащищенный , базовый, приглашение NTLM и localhost. Как так:

<init-param> 
     <param-name>spnego.prompt.ntlm</param-name> 
     <param-value>true</param-value> 
    </init-param> 

    <init-param> 
     <param-name>spnego.allow.basic</param-name> 
     <param-value>true</param-value> 
    </init-param> 

    <init-param> 
     <param-name>spnego.allow.localhost</param-name> 
     <param-value>true</param-value> 
    </init-param> 

    <init-param> 
     <param-name>spnego.allow.unsecure.basic</param-name> 
     <param-value>true</param-value> 
    </init-param> 

Который, удачливый, показал еще одно исключение:
javax.security.auth.login.LoginException: Нет CallbackHandler доступного собрать информацию аутентификации от пользователя

я говорю потому, что удачливый мое понимание этого заключается в том, что, разрешив приглашение NTLM, я разрешаю другой метод аутентификации.

Самое странное, что сегодня утром оно работает. Я не знаю почему. Он по-прежнему работает после перезагрузки моего сервера. Я получаю «Привет, пользователь!». сообщение с нужным пользователем. Однако the HelloKeytab test class не работает.

EDIT: в конце концов он прекратил работать и не смог заставить его работать. Я продолжал получать контрольную сумму. Поэтому я закончил с использованием Waffle.