You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2003/02/23 22:40:33 UTC

DO NOT REPLY [Bug 17323] New: - Cancelled SSL connections cause Tomcat to stumble

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17323>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17323

Cancelled SSL connections cause Tomcat to stumble

           Summary: Cancelled SSL connections cause Tomcat to stumble
           Product: Tomcat 4
           Version: 4.1.18
          Platform: All
        OS/Version: Other
            Status: NEW
          Severity: Critical
          Priority: Other
         Component: Connector:Coyote HTTP/1.1
        AssignedTo: tomcat-dev@jakarta.apache.org
        ReportedBy: ceki@apache.org


To reproduce the bug:

1) Configure an SSL connector: 

  In server.xml, uncomment the SSL connector element and set its
  minProcessors and maxProcessors attributes to small values, say 2.

2) Create any trivial web-application. This web-app should contain a
large file, for example a zipped archive file.

3) Using IE or Netscape, attempt to download the zipped file with
SSL. When prompted to open or save the file, cancel the request. This
will cause the following exception:

2003-02-23 17:44:50 StandardWrapperValve[default]: Servlet.service() for 
servlet default threw exception
java.net.SocketException: Connection reset by peer: socket write error
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
        at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
        at com.sun.net.ssl.internal.ssl.OutputRecord.a(DashoA6275)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA6275)
        at com.sun.net.ssl.internal.ssl.AppOutputStream.write(DashoA6275)
        at 
org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite
(InternalOutputBuffer.java:668)
        at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite
(IdentityOutputFilter.java:160)
        at org.apache.coyote.http11.InternalOutputBuffer.doWrite
(InternalOutputBuffer.java:523)
        at org.apache.coyote.Response.doWrite(Response.java:524)
        at org.apache.coyote.tomcat4.OutputBuffer.realWriteBytes
(OutputBuffer.java:384)
        at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:360)
        at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:338)
        at org.apache.coyote.tomcat4.OutputBuffer.writeBytes
(OutputBuffer.java:411)
        at org.apache.coyote.tomcat4.OutputBuffer.write(OutputBuffer.java:398)
        at org.apache.coyote.tomcat4.CoyoteOutputStream.write
(CoyoteOutputStream.java:110)
        at org.apache.catalina.servlets.DefaultServlet.copyRange
(DefaultServlet.java:1996)
        at org.apache.catalina.servlets.DefaultServlet.copy
(DefaultServlet.java:1745)
        at org.apache.catalina.servlets.DefaultServlet.serveResource
(DefaultServlet.java:1073)
        at org.apache.catalina.servlets.DefaultServlet.doGet
(DefaultServlet.java:506)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:247)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:193)
        at qos.user.IdFilter.doFilter(IdFilter.java:60)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:213)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.StandardWrapperValve.invoke
(StandardWrapperValve.java:260)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:643)
        at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at org.apache.catalina.core.StandardContextValve.invoke
(StandardContextValve.java:191)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:643)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke
(AuthenticatorBase.java:493)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:641)
        at org.apache.catalina.valves.CertificatesValve.invoke
(CertificatesValve.java:246)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:641)
        at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at org.apache.catalina.core.StandardContext.invoke
(StandardContext.java:2415)
        at org.apache.catalina.core.StandardHostValve.invoke
(StandardHostValve.java:180)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:643)
        at org.apache.catalina.valves.ErrorDispatcherValve.invoke
(ErrorDispatcherValve.java:170)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:641)
        at org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:172)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:641)
        at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at org.apache.catalina.core.StandardEngineValve.invoke
(StandardEngineValve.java:174)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:643)
        at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at org.apache.coyote.tomcat4.CoyoteAdapter.service
(CoyoteAdapter.java:223)
        at org.apache.coyote.http11.Http11Processor.process
(Http11Processor.java:432)
        at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnectio
n(Http11Protocol.java:386)
        at org.apache.tomcat.util.net.TcpWorkerThread.runIt
(PoolTcpEndpoint.java:534)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run
(ThreadPool.java:530)
        at java.lang.Thread.run(Thread.java:536)

If you repeat step 3 several times, all connectors will become
disfunctional and Tomcat will eventually stop responding to HTTPS
requests.

The following bug can be reproduced on XP or Linux with JDK 1.4.1 and
Tomcat 4.1.18.

In addition, if your web-app uses log4j and struts 1.1x, and if you
place commons-logging and log4j.jar in WEB-INF/lib, then you will get
the following error in catalina.out (on top of the previous
java.net.SocketException):

Feb 23, 2003 5:44:46 PM org.apache.tomcat.util.log.CommonLogHandler log
SEVERE: Caught exception executing 
org.apache.tomcat.util.net.TcpWorkerThread@1e4eb5b, terminating thread
org.apache.commons.logging.LogConfigurationException: 
org.apache.commons.logging.LogConfigurationException: 
org.apache.commons.logging.LogCo
nfigurationException: Class org.apache.commons.logging.impl.Log4JCategoryLog 
does not implement Log
        at org.apache.commons.logging.impl.LogFactoryImpl.newInstance
(LogFactoryImpl.java:555)
        at org.apache.commons.logging.impl.LogFactoryImpl.getInstance
(LogFactoryImpl.java:289)
        at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:409)
        at org.apache.tomcat.util.log.CommonLogHandler.log
(CommonLogHandler.java:97)
        at org.apache.tomcat.util.log.Log.log(Log.java:198)
        at org.apache.tomcat.util.log.Log.log(Log.java:192)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.log
(PoolTcpEndpoint.java:427)
        at org.apache.tomcat.util.net.TcpWorkerThread.runIt
(PoolTcpEndpoint.java:510)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run
(ThreadPool.java:530)
        at java.lang.Thread.run(Thread.java:536)
Caused by: org.apache.commons.logging.LogConfigurationException: 
org.apache.commons.logging.LogConfigurationException: Class org.apache.comm
ons.logging.impl.Log4JCategoryLog does not implement Log
        at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor
(LogFactoryImpl.java:420)
        at org.apache.commons.logging.impl.LogFactoryImpl.newInstance
(LogFactoryImpl.java:548)
        ... 9 more
Caused by: org.apache.commons.logging.LogConfigurationException: Class 
org.apache.commons.logging.impl.Log4JCategoryLog does not implement L
og
        at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor
(LogFactoryImpl.java:416)
        ... 10 more
  

This makes the bug quite hard to identify, because the user who was
using log4j and commons-logging in lead to believe that the bug was in
"logging" where as the bug is in the connector *and* in the deployment
of commons-logging jar files:
TOMCAT_HOME/server/lib/commons-logging.ar
TOMCAT_HOME/commons/lib/commons-logging-api.jar
WEB-INF/lib/commons-logging.jar
WEB-INF/lib/log4j.jar.

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org