Problema(Comportamento Estranho) com autenticação via certificado digital em aplicação web

5 respostas
K

Olá a todos,

Estou participando do desenvolvimento de uma aplicação web cujo modo de autenticação é via certificado digital.

Estamos usando o JBOSS 4.0.5 como servidor de aplicação.

Eis um trecho do meu web.xml:

<security-constraint>
	<web-resource-collection>
		<web-resource-name>SecurePages</web-resource-name>
		<url-pattern>/secure/*</url-pattern>
	</web-resource-collection>
	<auth-constraint>
		<role-name>*</role-name>
	</auth-constraint>
	<user-data-constraint>
		<transport-guarantee>CONFIDENTIAL</transport-guarantee>
	</user-data-constraint>
</security-constraint>

<login-config>
	<auth-method>CLIENT-CERT</auth-method>
</login-config>

Tudo está configurado e funcionando perfeitamente.

O único problema é que quando o usuário tenta acessar uma página protegida utilizando o internet explorer e clica em cancelar na caixa de diálogo que abre automáticamente(exigindo o pin de acesso) o internet explorer exibe uma pagina de erro com a mensagem: A página não pode ser exibida. Servidor não encontrado ou erro de DNS. No simples fato de abrir a caixa de diálogo no ie, o seguinte warning é exibido, sendo exibido novamente quando se clica no botão cancelar:

WARN  [Http11Processor] Exception getting SSL attributes

java.net.SocketException: Socket Closed

at java.net.PlainSocketImpl.setOption(PlainSocketImpl.java:201)

at java.net.Socket.setSoTimeout(Socket.java:979)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.setSoTimeout(SSLSocketImpl.java:1928)

at org.apache.tomcat.util.net.jsse.JSSE14Support.synchronousHandshake(JSSE14Support.java:98)

at org.apache.tomcat.util.net.jsse.JSSE14Support.handShake(JSSE14Support.java:66)

at org.apache.tomcat.util.net.jsse.JSSESupport.getPeerCertificateChain(JSSESupport.java:120)

at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:1126)

No firefox tal problema não acontece.

Em algumas pesquisas que eu fiz na net algumas pessoas disseram que se tratava de um problema com o IE.

Bem, eu gostaria que houvesse pelo menos alguma maneira de redirecionar o usuário para uma pagina amigável caso ele clicasse no botão cancelar da caixa de diálogo no internet explorer.

Espero ter sido claro quanto ao problema.

Qualquer ajuda ou idéia para contornar esse problema será bem vinda.

5 Respostas

T

Isso é um problema da interação da MS CryptoAPI com o Internet Explorer - e o problema é que, quando você clica em Cancelar, depois o browser fica doido varrido.
Acho que só fechando o browser e abrindo de novo para ele se comportar direito.
Na verdade eu não sei se você pode contornar esse problema; tente acessar o site da Receita Federal (que também usa CLIENT-CERT) para ver o que ocorre se você clicar em Cancelar. (Exige um e-CPF ou e-CNPJ). Acho que deve ficar doido.
Acho que você tem de pôr uma tela intermediária dizendo “Não clique em “Cancelar”” se você detectar que o usuário está usando o Internet Explorer -

K

Obrigado pela dica thingol. Mas não me conformo em nao haver uma maneira de contornar isso.

Continuarei dando uma pesquisada. Quaisquer dicas ou sugestões continuam bem vindas.

K

Detalhe. No site da receita acontece justamente um redirecionamento para uma nova página.

Tentei contornar o problema da seguinte forma. Incluí o seguinte trecho em meu web.xml


400
/login.jsp

Dois problemas acontecem. O primeiro é que esse novo warning aparece logo após o primeiro warning que exibi anteriormente.

16:37:10,312 WARN  [[localhost]] Exception Processing ErrorPage[errorCode=400, location=/index.jsp]

ClientAbortException:  javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLProtocolException: handshake alert: no_certificate

at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:327)

at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:293)

at org.apache.catalina.connector.Response.flushBuffer(Response.java:537)

at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:286)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)

at org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)

at org.jboss.web.tomcat.tc5.sso.ClusteredSingleSignOn.invoke(ClusteredSingleSignOn.java:637)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)

at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)

at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)

at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)

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

O segundo problema seria que mesmo se eu conseguisse resolver o primeiro problema, ele tenta redirecionar logo após a exibição da caixa de diálogo e não só após o clique em cancelar.

Em outras palavras o warning acima também aparece duas vezes, uma ao aparecer a caixa de diálogo e outra logo após o clique do botão cancelar.

K

up

K

up

Criado 31 de outubro de 2007
Ultima resposta 5 de nov. de 2007
Respostas 5
Participantes 2