Estou configurando o kerberos para um servidor de tomcat. Antes de ligar para a empresa de suporte de aplicativos da web, gostaria de saber se estou executando as etapas corretas, já que é a primeira vez.
O domínio tem 2 zonas, uma é .local e a outra é .edu.
As pessoas acessarão o servidor por meio de server.domain.edu porque ele possui um certificado SSL para esse nome.
Eu tenho um usuário do Windows que possui um SPN HTTP / server.domain.edu registrado. A conta pode ser executada como um serviço.
Eu executei este comando ktpass -princ HTTP/[email protected] -mapuser [email protected] -pass "UserPass" -ptype KRB5_NT_PRINCIPAL -out keytabfile.kt
.
A partir desse comando, obtive um HTTP / server.domain.edu mapeado com sucesso para [email protected] e o arquivo de chave.
Copiei o arquivo para o servidor do tomcat e configurei o seguinte.
Um arquivo 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;
};
E um arquivo 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
Em seguida, na ferramenta de configuração do tomcat:
Configure a conta para começar com [email protected].
Adicionadas estas 2 opções de java:
-Djava.security.auth.login.config=C:\jaas.conf
-Djava.security.krb5.conf=C:\krb5.conf
O serviço é iniciado e posso ver páginas que não exigem autenticação.
Quando eu ativo o kerberos na aplicação web no arquivo xml eu coloquei server.domain.edu, a porta já está configurada para 1433 (é para SQL) então eu deixo assim.
Eu tentei olhar para os logs no servidor, mas não consigo encontrar nada
C:\Program Files\Apache Software Foundation\Tomcat 8.0\logs
está vazio.
Ao tentar acessar o site, recebo este erro:
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)
Obrigado pelo seu tempo!