Tomcat - Página personalizada -Connector -SSLEnabled="true"

4 respostas
tomcat
C

Caros,
Por favor, preciso de ajuda.
Tenho um tomcat 8.5 com um conector configurado no server.xml para certificado, existe um servlet que realiza a leitura dos dados do token A3 (ok).

Connector SSLEnabled=“true” acceptCount=“100”
address=“0.0.0.0” clientAuth=“true” disableUploadTimeout=“true”
enableLookups=“false” keyAlias=“tomcat” keystoreFile="${user.home}/.keystore"
keystorePass=“xxxxxxx” maxHttpHeaderSize=“8192” maxSpareThreads=“75”
maxThreads=“150” minSpareThreads=“25” port=“8443”
protocol=“org.apache.coyote.http11.Http11NioProtocol”
scheme=“https” secure=“true” sslProtocol=“TLS”

Preciso colocar uma página de erro personalizada para a situação que o usuário tenta acessar o servlet sem o token. Quando o cerificado não é informado, ao que tudo indica a requisição não chega no servlet, há apenas a resposta do tomcat. Tentamos sem sucesso colocar error-page tanto no web.xml do tomcat como na aplicação.

O erro só aparece com o tomcat no modo debug:

13-Mar-2019 11:13:45.284 DETALHADO [https-openssl-nio-0.0.0.0-8443-exec-12] org.apache.tomcat.util.threads.LimitLatch.countDown Counting down[https-openssl-nio-0.0.0.0-8443-exec-12] latch=2

13-Mar-2019 11:13:45.284 DETALHADO [https-openssl-nio-0.0.0.0-8443-exec-14] org.apache.tomcat.util.net.SecureNioChannel.processSNI The SNI host name extracted for connection [java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8443 remote=/0:0:0:0:0:0:0:1:51730]] was [localhost]

13-Mar-2019 11:13:45.285 DETALHADO [https-openssl-nio-0.0.0.0-8443-exec-13] org.apache.tomcat.util.threads.LimitLatch.countDown Counting down[https-openssl-nio-0.0.0.0-8443-exec-13] latch=2

13-Mar-2019 11:13:45.285 DETALHADO [https-openssl-nio-0.0.0.0-8443-exec-12] org.apache.tomcat.util.net.NioEndpoint.close Socket: [org.apache.tomcat.util.net.SecureNioChannel@5fd4c22d:java.nio.channels.SocketChannel[closed]] closed

13-Mar-2019 11:13:45.285 DETALHADO [https-openssl-nio-0.0.0.0-8443-exec-13] org.apache.tomcat.util.net.NioEndpoint.close Socket: [org.apache.tomcat.util.net.SecureNioChannel@17860d50:java.nio.channels.SocketChannel[closed]] closed

13-Mar-2019 11:13:45.288 DETALHADO [https-openssl-nio-0.0.0.0-8443-exec-15] org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun Error during SSL handshake

java.io.IOException: EOF during handshake.

at org.apache.tomcat.util.net.SecureNioChannel.handshakeUnwrap(SecureNioChannel.java:465)

at org.apache.tomcat.util.net.SecureNioChannel.handshake(SecureNioChannel.java:238)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1475)

at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Thread.java:745)
13-Mar-2019 11:13:45.292 DETALHADO [https-openssl-nio-0.0.0.0-8443-Acceptor-0] org.apache.tomcat.util.threads.LimitLatch.countUpOrAwait Counting up[https-openssl-nio-0.0.0.0-8443-Acceptor-0] latch=2

13-Mar-2019 11:13:45.293 DETALHADO [https-openssl-nio-0.0.0.0-8443-exec-16] org.apache.tomcat.util.net.SecureNioChannel.processSNI The SNI host name extracted for connection [java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8443 remote=/0:0:0:0:0:0:0:1:51731]] was [localhost]

13-Mar-2019 11:13:45.295 DETALHADO [https-openssl-nio-0.0.0.0-8443-exec-15] org.apache.tomcat.util.threads.LimitLatch.countDown Counting down[https-openssl-nio-0.0.0.0-8443-exec-15] latch=1

13-Mar-2019 11:13:45.295 DETALHADO [https-openssl-nio-0.0.0.0-8443-exec-15] org.apache.tomcat.util.net.NioEndpoint.close Socket: [org.apache.tomcat.util.net.SecureNioChannel@39059388:java.nio.channels.SocketChannel[closed]] closed

13-Mar-2019 11:13:45.298 DETALHADO [https-openssl-nio-0.0.0.0-8443-exec-17] org.apache.tomcat.util.net.openssl.OpenSSLEngine.checkLastError OpenSSL error: [336105671] message: [error:140890C7:SSL routines:ssl3_get_client_certificate:peer did not return a certificate]

13-Mar-2019 11:13:45.299 DETALHADO [https-openssl-nio-0.0.0.0-8443-exec-18] org.apache.coyote.AbstractProtocol$ConnectionHandler.process Processing socket [org.apache.tomcat.util.net.SecureNioChannel@17860d50:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8443 remote=/0:0:0:0:0:0:0:1:51731]] with status [OPEN_READ]

13-Mar-2019 11:13:45.300 DETALHADO [https-openssl-nio-0.0.0.0-8443-exec-18] org.apache.coyote.AbstractProtocol$ConnectionHandler.process Found processor [null] for socket [org.apache.tomcat.util.net.SecureNioChannel@17860d50:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8443 remote=/0:0:0:0:0:0:0:1:51731]]

13-Mar-2019 11:13:45.300 DETALHADO [https-openssl-nio-0.0.0.0-8443-exec-18] org.apache.coyote.AbstractProtocol$ConnectionHandler.process Popped processor [org.apache.coyote.http11.Http11Processor@277aac18] from cache

13-Mar-2019 11:13:45.300 DETALHADO [https-openssl-nio-0.0.0.0-8443-exec-18] org.apache.tomcat.util.net.SocketWrapperBase.populateReadBuffer Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@662d73e3:org.apache.tomcat.util.net.SecureNioChannel@17860d50:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8443 remote=/0:0:0:0:0:0:0:1:51731]], Read from buffer: [0]

13-Mar-2019 11:13:45.301 DETALHADO [https-openssl-nio-0.0.0.0-8443-exec-18] org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header

java.io.EOFException

at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1289)

at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1223)

at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:729)

at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:368)

at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:684)

at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)

at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)

at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Thread.java:745)

Atualmente a resposta de erro do browser é :

Não foi possível estabelecer uma conexão segura com este site

O certificado de login não foi aceito por numero-do-IP ou não foi fornecido.

  • Tente entrar em contato com o administrador do sistema.

ERR_BAD_SSL_CLIENT_AUTH_CERT

4 Respostas

FearX

O que esse post tem a ver com a categoria Meta GUJ?

Por favor, atente-se onde posta. É extremamente importante para a organização do fórum.

Moverei para a categoria correta.

C

ok, me desculpe.

C

no arquivo web.xml do tomcat foram colocados os status de 400 a 417 e 500 a 505 e ainda não é apresentada a página personalizada.
Observação: O arquivo de erro personalizado encontra-se no root do tomcat.
exemplos:

417 /Exception.jsp 500 /Exception.jsp 501 /Exception.jsp
C

Resolvido:

Solução: no conector do tomcat arquivo server.xml colocar o parâmetro clientAuth com o valor “want” em vez de true dessa forma a requisição é processada pelo servlet , mesmo quando não informa o certificado, com o parâmetro true a requisição só é processada se existir certificado.
Não utilizamos erro-page e sim sendRedirect no caso de erros já que são apresentados em outro sistema.

Criado 14 de março de 2019
Ultima resposta 16 de abr. de 2019
Respostas 4
Participantes 2