Kamal Rathod created DIRMINA-1082: ------------------------------------- Summary: SSLHandler calling wrap method after closeOutBound() on SSLEngine Key: DIRMINA-1082 URL: https://issues.apache.org/jira/browse/DIRMINA-1082 Project: MINA Issue Type: Bug Components: Core Affects Versions: 2.0.16 Reporter: Kamal Rathod
Hi, I am trying to connect through SSL and Proxy and getting below error. _ERROR quickfix.mina.initiator.InitiatorIoHandler - Socket : javax.net.ssl.SSLException: Improper close state: Status = OK HandshakeStatus = NEED_WRAP_ _bytesConsumed = 0 bytesProduced = 87_ _javax.net.ssl.SSLException: Improper close state: Status = OK HandshakeStatus = NEED_WRAP_ _bytesConsumed = 0 bytesProduced = 87_ _at org.apache.mina.filter.ssl.SslHandler.closeOutbound(SslHandler.java:500) ~[mina-core.jar:?]_ _at org.apache.mina.filter.ssl.SslFilter.initiateClosure(SslFilter.java:742) ~[mina-core.jar:?]_ _at org.apache.mina.filter.ssl.SslFilter.filterClose(SslFilter.java:677) ~[mina-core.jar:?]_ _at org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterClose(DefaultIoFilterChain.java:648) ~[mina-core.jar:?]_ I had a look at closeOutBound() method of SslHandler.java and suspect bug there. Line 484: sslEngine.closeOutBound() Line 490: sslEngine.wrap(emptyBuffer.buf(), outNetBuffer.buf()); In the scenario the sslEngine is closed first and then the wrap method is called. As per java docs: _In all cases, closure handshake messages are generated by the engine, and {{wrap()}} should be repeatedly called until the resulting {{SSLEngineResult}}'s status returns "CLOSED", or [{{isOutboundDone()}}|https://docs.oracle.com/javase/7/docs/api/javax/net/ssl/SSLEngine.html#isOutboundDone()] returns true. All data obtained from the {{wrap()}} method should be sent to the peer._ _[{{closeOutbound()}}|https://docs.oracle.com/javase/7/docs/api/javax/net/ssl/SSLEngine.html#closeOutbound()] is used to signal the engine that the application will not be sending any more data._ So as per docs, wrap should be called repeatedly and then closeOutbound() method, but in code its reverse, after closeOutbound wrap is called. Can someone please check and comment on this? -- This message was sent by Atlassian JIRA (v7.6.3#76005)