Я настраиваю kerberos для сервера tomcat. Прежде чем позвонить в службу поддержки веб-приложений, я хотел бы знать, правильно ли я делаю шаги, поскольку это мой первый раз.
В домене 2 зоны: одна - .local, другая - .edu.
Люди будут получать доступ к серверу через server.domain.edu, потому что у него есть сертификат SSL для этого имени.
У меня есть пользователь Windows с зарегистрированным SPN HTTP / server.domain.edu. Учетная запись может работать как служба.
Я выполнил эту команду ktpass -princ HTTP/server.domain.edu@domain.edu -mapuser user@domain.local -pass "UserPass" -ptype KRB5_NT_PRINCIPAL -out keytabfile.kt
.
С помощью этой команды я получил успешно сопоставленный HTTP / server.domain.edu с user@domain.local и ключевым файлом.
Я скопировал файл на сервер tomcat и настроил следующее.
Файл jass.conf:
WebFDD
{
com.sun.security.auth.module.Krb5LoginModule
required
debug=true
useKeyTab=true
storeKey=true
keyTab="C:/keytab.kt"
principal="HTTP/server.domain.edu"
isInitiator=false;
};
И файл krb5.conf:
[libdefaults]
default_realm = domain
default_keytab_name = FILE:c:\keytab.kt
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]
domain = {
kdc = dc.domain.local
admin_server = dc.domain.local
}
[domain_realm]
domain.local = pupr.local
.domain.local= pupr.local
Затем в инструменте настройки tomcat:
Настроил учетную запись для запуска с user@domain.local.
Добавлены эти 2 варианта Java:
-Djava.security.auth.login.config=C:\jaas.conf
-Djava.security.krb5.conf=C:\krb5.conf
Служба запускается, и я вижу страницы, не требующие аутентификации.
Когда я активирую kerberos в веб-приложении, в файле xml я помещаю server.domain.edu, порт уже установлен на 1433 (это для SQL), поэтому я оставляю его таким.
Я пробовал смотреть журналы на сервере, но ничего не могу найти
C:\Program Files\Apache Software Foundation\Tomcat 8.0\logs
пусто.
При попытке зайти на сайт я получаю такую ошибку:
type Exception report
message Servlet.init() for servlet action threw exception
description The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Servlet.init() for servlet action threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:613)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659)
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Unknown Source)
root cause
java.lang.NullPointerException
com.feith.webfdd.action.FddActionServlet.init(FddActionServlet.java:371)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:613)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659)
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Unknown Source)
Спасибо за ваше время!