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

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

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.

ok, me desculpe.

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

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.