securing file download with standard web security and ssl

Hi,

I want to put some files for download in my webapp. At the same time, I want to protect these files using standard servlet security and ssl. So I added <security-constraint> in my web.xml and configured tomcat to allow SSL connection. Now I got the files protected as I expected. When I try to access the file directly from browser, tomcat shows me the login page. However, after correct login, I.E. pops up an error saying something like "Internet Explorer cannot download XXX from XXX. The file could not be written to the cache.". The log file showed the following exception:

javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLException: java.net.SocketException: Connection reset by peer: socket write error

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkEOF(SSLSocketImpl.java:1154)

at com.sun.net.ssl.internal.ssl.AppInputStream.available(AppInputStream.java:40)

at org.apache.tomcat.util.net.TcpConnection.shutdownInput(TcpConnection.java:90)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:752)

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

at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)

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

Caused by: javax.net.ssl.SSLException: java.net.SocketException: Connection reset by peer: socket write error

at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:166)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1476)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1443)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1407)

at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:64)

at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:747)

at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:403)

at org.apache.coyote.http11.InternalOutputBuffer.endRequest(InternalOutputBuffer.java:400)

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

at org.apache.coyote.Response.action(Response.java:182)

at org.apache.coyote.Response.finish(Response.java:304)

at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:281)

at org.apache.catalina.connector.Response.finishResponse(Response.java:473)

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

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

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:738)

... 4 more

Caused by: 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.writeBuffer(OutputRecord.java:283)

at com.sun.net.ssl.internal.ssl.OutputRecord.write(OutputRecord.java:272)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:663)

at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)

... 15 more

I've tried separating concerns, for example protect files but not require SSL, and enable SSL but do not protect files. Both works respectively but not together. I also tried using a download4j's DownloadServlet. Still doesn't work.

Have any of you encouter the same situation? If so, could you enlight me what I did wrong? It maybe just a simple SSL configuration or something. Thanks in advance!

Jack

[4045 byte] By [chenjie001a] at [2007-10-1 4:05:14]
# 1
My environment setup is:JDK 1.5.01Tomcat 5.5.7For downloading files, I just use plain old <a href> method. I simply right-click the link and choose "save target as...".Thanks,Jack
chenjie001a at 2007-7-9 0:28:45 > top of Java-index,Security,Java Secure Socket Extension (JSSE)...