Apache Commons FTPSClient upload cannot be completed

Viewed 305

I'm using commons-net 3.7 and OpenJDK 11. FTP server is TLSv1.2 implicit. I can retrieve files but when I try to storeFile it hangs. As I checked the socket.close(); method call at storeFile waits input.

I tried copying InputStream to OutputStream way. Same thing happens when I try to close the OutputStream. It waits and same error occurs.

Why it cannot close socket and end storing file? Thank you.

        FTPSClient ftpsClient = new FTPSClient(true);
        ftpsClient.connect("host", 990);
        ftpsClient.enterLocalPassiveMode();
        ftpsClient.setFileType(FTP.BINARY_FILE_TYPE);
        ftpsClient.setControlKeepAliveTimeout(300);
        ftpsClient.setBufferSize(1024000);
        ftpsClient.login("user", "password");
        // login is successful, everything seems fine
    
        InputStream inputstream = new FileInputStream("test.pdf");
        ftpsClient.storeFile("/upload", inputstream); 
        // waits 4-5 minutes and gets connection reset
        // I can retrieve and delete files, only uploading is problem.
  09B0: 62 6A 47 BA 9F F4 9B 74   BE E0 07 0B F5 63 92 C0  bjG....t.....c..
  09C0: 2C 26 B6 36 98 3C 83 D4   A4 3F 3C 99 72 6B 24 45  ,&.6.<...?<.rk$E
  09D0: FE 9F 3E F4 DA 3B CB B2   18 12 F0 FB 85           ..>..;.......
)
javax.net.ssl|ALL|01|main|2020-09-01 01:31:25.414 CEST|SSLSocketImpl.java:1002|Closing output stream
javax.net.ssl|DEBUG|01|main|2020-09-01 01:31:25.415 CEST|SSLSocketImpl.java:670|close outbound of SSLSocket
javax.net.ssl|DEBUG|01|main|2020-09-01 01:31:25.417 CEST|SSLSocketOutputRecord.java:71|WRITE: TLS12 alert(close_notify), length = 10
javax.net.ssl|DEBUG|01|main|2020-09-01 01:31:25.418 CEST|SSLCipher.java:1727|Plaintext before ENCRYPTION (
  0000: 01 00                                              ..
)
javax.net.ssl|DEBUG|01|main|2020-09-01 01:31:25.418 CEST|SSLSocketOutputRecord.java:85|Raw write (
  0000: 15 03 03 00 1A 00 00 00   00 00 00 00 11 1B EB DE  ................
  0010: 1F A8 2E 8B DE 84 26 1F   FD E6 23 C4 81 E7 BC     ......&...#....
)
javax.net.ssl|DEBUG|01|main|2020-09-01 01:31:25.418 CEST|SSLSocketImpl.java:473|duplex close of SSLSocket
javax.net.ssl|DEBUG|01|main|2020-09-01 01:31:25.418 CEST|SSLSocketImpl.java:1361|close the underlying socket
javax.net.ssl|DEBUG|01|main|2020-09-01 01:31:25.419 CEST|SSLSocketImpl.java:1380|close the SSL connection (initiative)
javax.net.ssl|DEBUG|01|main|2020-09-01 01:31:25.419 CEST|SSLSocketImpl.java:1408|wait for close_notify or alert
javax.net.ssl|ERROR|01|main|2020-09-01 01:38:14.945 CEST|TransportContext.java:313|Fatal javax.net.ssl|WARNING|01|main|2020-09-01 01:38:14.947 CEST|SSLSocketImpl.java:494|SSLSocket duplex close failed (
"throwable" : {
  javax.net.ssl.SSLProtocolException: Connection reset
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:126)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:321)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:259)
    at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:137)
    at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1152)
    at java.base/sun.security.ssl.SSLSocketImpl.waitForClose(SSLSocketImpl.java:1413)
    at java.base/sun.security.ssl.SSLSocketImpl.closeSocket(SSLSocketImpl.java:1389)
    at java.base/sun.security.ssl.SSLSocketImpl.shutdown(SSLSocketImpl.java:1370)
    at java.base/sun.security.ssl.SSLSocketImpl.bruteForceCloseInput(SSLSocketImpl.java:603)
    at java.base/sun.security.ssl.SSLSocketImpl.duplexCloseInput(SSLSocketImpl.java:583)
    at java.base/sun.security.ssl.SSLSocketImpl.close(SSLSocketImpl.java:484)
    at org.apache.commons.net.ftp.FTPClient._storeFile(FTPClient.java:686)
    at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:645)
    at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:2037)
    at my.project.package.util.FTPUtil.main(FTPUtil.java:51)
  Caused by: java.net.SocketException: Connection reset
    at java.base/java.net.SocketInputStream.read(SocketInputStream.java:186)
    at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140)
    at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:448)
    at java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:165)
    at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:108)
    ... 11 more}


425 Data channel timed out due to not meeting the minimum bandwidth requirement.
SERVER: 425 Data channel timed out due to not meeting the minimum bandwidth requirement.
0 Answers
Related