You're using the VmPipeConnector and Acceptor ? Am not sure it makes sense to use an SSLFilter for the VmPipe transport ?
SSL is meant to be used on sockets. Maarten On Fri, Mar 7, 2008 at 4:22 PM, Mark Renouf <[EMAIL PROTECTED]> wrote: > Hmm. I saw this from some googling I did on that particular message. > We generally control both ends of the communication within our product > so I had assumed the handshake would negotiate this automatically. > From a wireshark trace of the same test over the wire, I saw a huge > list of cipher-suites proposed to the other end (in fact, if you > decode those 100 bytes, I beleive that's what you see in the > messageSent log from my test). > > > /** > * Sets the list of cipher suites to be enabled when [EMAIL PROTECTED] > SSLEngine} > * is initialized. > * > * @param cipherSuites <tt>null</tt> means 'use [EMAIL PROTECTED] > SSLEngine}'s default.' > */ > public void setEnabledCipherSuites(String[] cipherSuites) { > this.enabledCipherSuites = cipherSuites; > } > > Just for kicks, I tried "setEnabledCipherSuites(null);" but with no > change in behavior.... > > > On Fri, Mar 7, 2008 at 10:12 AM, Niklas Therning <[EMAIL PROTECTED]> > wrote: > > I think it is the "no cipher suites in common" error which causes the > > handshake problem. You can use SslFilter.setEnabledCipherSuites() to > > specify which suites should be enabled. > > > > HTH > > > > /Niklas > > > > Mark Renouf skrev: > > > > > > > I've been struggling with an SSL issue. I had it all working but I've > > > lost track of some changes and basically I'm stuck again. I've > > > dissolved it down to a unit test where I have a pair of VmPipe > > > (acceptor/connector) talking, each with an SslFilter. Each have a > > > seperate keystore, and a common truststore. Each's certificates are > > > signed by a CA cert in the trust store. These are known-good as they > > > were take from a production server. > > > > > > The server has a simple handler set which waits for "PING" and sends > > > back "PONG". The test passes without the SSL Filter in place. In the > > > tests I also placed a logging filter last on the filter chain of the > > > connector so I can see the raw data after processing. > > > > > > When I enable SSL on both ends, I get a failed handshake. I'm using > > > SSLContextFactory and KeyStoreFactory to load keystores. I've > > > independently verified the keystores are valid and being loaded > > > correctly (right passwords etc). > > > > > > The com.XXXXX.XXXXX lines below are just package names from an > > > unreleased product of my employer which I've anonymized for now :-) > > > > > > The handlers look like this: > > > IoHandler clientHandler = new IoHandlerAdapter() { > > > @Override > > > public void exceptionCaught(IoSession session, Throwable > > > cause) throws Exception { > > > LOGGER.fatal("CLIENT IoHandler: exceptionCaught", > cause); > > > } > > > }; > > > > > > IoHandler serverHandler = new IoHandlerAdapter() { > > > @Override > > > public void exceptionCaught(IoSession session, Throwable > > > cause) throws Exception { > > > LOGGER.fatal("SERVER IoHandler: exceptionCaught", > cause); > > > session.close(true); > > > } > > > > > > @Override > > > public void messageReceived(IoSession session, Object > > > message) throws Exception { > > > if (message instanceof IoBuffer) { > > > String msg = > > > ((IoBuffer)message).getString(CHARSET.newDecoder()); > > > if (msg.equals("PING")) { > > > IoBuffer buffer = IoBuffer.allocate(4); > > > buffer.putString("PONG", CHARSET.newEncoder > ()); > > > buffer.flip(); > > > session.write(buffer); > > > } > > > } > > > } > > > }; > > > > > > There's also a LoggingFilter attached with the messageSent and > > > messageReceived levels visible (attached to the client's filter > chain) > > > > > > Here is the relevant test code: > > > > > > Set up SSLContext ctx1 using SSLContextFactory.... > > > > > > 171 IoAcceptor acceptor = new VmPipeAcceptor(); > > > 172 acceptor.setHandler(serverHandler); > > > 173 SslFilter serverFilter = new SslFilter(ctx1); > > > 174 serverFilter.setNeedClientAuth(true); > > > 175 acceptor.getFilterChain().addLast("SSL", > serverFilter); > > > 176 acceptor.bind(new VmPipeAddress(1)); > > > > > > Set up SSLContext ctx2 using SSLContextFactory.... > > > > > > 189 IoConnector connector = new VmPipeConnector(); > > > 190 connector.setHandler(clientHandler); > > > 191 SslFilter clientFilter = new SslFilter(ctx2); > > > 192 clientFilter.setUseClientMode(true); > > > (Set up LoggingFilter) > > > 203 connector.getFilterChain().addLast("LOG", > loggingFilter); > > > 204 connector.getFilterChain().addLast("SSL", > clientFilter); > > > > > > Then: > > > > > > 206 ConnectFuture cf = connector.connect(new > VmPipeAddress(1)); > > > 207 cf.await(); > > > 208 assertTrue(cf.isConnected()); > > > 209 IoSession session = cf.getSession(); > > > 210 session.getConfig().setUseReadOperation(true); > > > 211 IoBuffer buffer = IoBuffer.allocate(4); > > > 212 buffer.putString("PING", CHARSET.newEncoder()); > > > 213 buffer.flip(); > > > 214 WriteFuture wf = session.write(buffer); > > > 215 wf.await(); > > > 216 assertTrue(wf.isWritten()); > > > 217 > > > 218 > > > 219 ReadFuture rf = session.read(); > > > 220 rf.await(); > > > 221 assertTrue(rf.isRead()); > > > 222 assertTrue(rf.getMessage() instanceof IoBuffer); > > > 223 IoBuffer buffer2 = (IoBuffer) rf.getMessage(); > > > 224 assertEquals("PONG", buffer2.getString( > CHARSET.newDecoder())); > > > 225 } > > > > > > > > > Here is the log output from the failing test case: > > > > > > 2008-03-07 09:21:47,597 INFO main SSLTestClient - SENT: > > > HeapBuffer[pos=0 lim=100 cap=130: 80 62 01 03 01 00 39 00 00 00 20 00 > > > 00 04 01 00...] > > > 2008-03-07 09:21:47,602 FATAL main SSLTest - SERVER IoHandler: > > > exceptionCaught > > > javax.net.ssl.SSLHandshakeException: SSL handshake failed. > > > at org.apache.mina.filter.ssl.SslFilter.messageReceived( > SslFilter.java:426) > > > at > org.apache.mina.common.DefaultIoFilterChain.callNextMessageReceived( > DefaultIoFilterChain.java:405) > > > at org.apache.mina.common.DefaultIoFilterChain.access$1200( > DefaultIoFilterChain.java:40) > > > at > org.apache.mina.common.DefaultIoFilterChain$EntryImpl$1.messageReceived( > DefaultIoFilterChain.java:823) > > > at > org.apache.mina.common.DefaultIoFilterChain$HeadFilter.messageReceived( > DefaultIoFilterChain.java:607) > > > at > org.apache.mina.common.DefaultIoFilterChain.callNextMessageReceived( > DefaultIoFilterChain.java:405) > > > at > org.apache.mina.common.DefaultIoFilterChain.fireMessageReceived( > DefaultIoFilterChain.java:399) > > > at org.apache.mina.transport.vmpipe.VmPipeFilterChain.fireEvent > (VmPipeFilterChain.java:91) > > > at > org.apache.mina.transport.vmpipe.VmPipeFilterChain.flushEvents( > VmPipeFilterChain.java:75) > > > at org.apache.mina.transport.vmpipe.VmPipeFilterChain.pushEvent > (VmPipeFilterChain.java:68) > > > at > org.apache.mina.transport.vmpipe.VmPipeFilterChain.fireMessageReceived( > VmPipeFilterChain.java:166) > > > at > org.apache.mina.transport.vmpipe.VmPipeFilterChain$VmPipeIoProcessor.updateTrafficMask > (VmPipeFilterChain.java:239) > > > at > org.apache.mina.transport.vmpipe.VmPipeFilterChain$VmPipeIoProcessor.updateTrafficMask > (VmPipeFilterChain.java:169) > > > at > org.apache.mina.transport.vmpipe.VmPipeFilterChain.flushPendingDataQueues( > VmPipeFilterChain.java:120) > > > at org.apache.mina.transport.vmpipe.VmPipeFilterChain.start( > VmPipeFilterChain.java:62) > > > at org.apache.mina.transport.vmpipe.VmPipeConnector.connect0( > VmPipeConnector.java:124) > > > at org.apache.mina.common.AbstractIoConnector.connect( > AbstractIoConnector.java:167) > > > at org.apache.mina.common.AbstractIoConnector.connect( > AbstractIoConnector.java:93) > > > at com.XXXXX.XXXXX.net.ssl.SSLTest.testSSLHandshake( > SSLTest.java:206) > > > (junit code) > > > Caused by: javax.net.ssl.SSLHandshakeException: no cipher suites in > common > > > at com.sun.net.ssl.internal.ssl.Handshaker.checkThrown( > Handshaker.java:997) > > > at com.sun.net.ssl.internal.ssl.SSLEngineImpl.checkTaskThrown( > SSLEngineImpl.java:459) > > > at com.sun.net.ssl.internal.ssl.SSLEngineImpl.writeAppRecord( > SSLEngineImpl.java:1058) > > > at com.sun.net.ssl.internal.ssl.SSLEngineImpl.wrap( > SSLEngineImpl.java:1030) > > > at javax.net.ssl.SSLEngine.wrap(SSLEngine.java:411) > > > at org.apache.mina.filter.ssl.SslHandler.handshake( > SslHandler.java:477) > > > at org.apache.mina.filter.ssl.SslHandler.messageReceived( > SslHandler.java:286) > > > at org.apache.mina.filter.ssl.SslFilter.messageReceived( > SslFilter.java:407) > > > ... 40 more > > > Caused by: javax.net.ssl.SSLHandshakeException: no cipher suites in > common > > > at com.sun.net.ssl.internal.ssl.Alerts.getSSLException( > Alerts.java:150) > > > at com.sun.net.ssl.internal.ssl.SSLEngineImpl.fatal( > SSLEngineImpl.java:1356) > > > at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE( > Handshaker.java:176) > > > at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE( > Handshaker.java:164) > > > at > com.sun.net.ssl.internal.ssl.ServerHandshaker.chooseCipherSuite( > ServerHandshaker.java:639) > > > at com.sun.net.ssl.internal.ssl.ServerHandshaker.clientHello( > ServerHandshaker.java:450) > > > at com.sun.net.ssl.internal.ssl.ServerHandshaker.processMessage > (ServerHandshaker.java:178) > > > at com.sun.net.ssl.internal.ssl.Handshaker.processLoop( > Handshaker.java:495) > > > at com.sun.net.ssl.internal.ssl.Handshaker$1.run( > Handshaker.java:437) > > > at java.security.AccessController.doPrivileged(Native Method) > > > at com.sun.net.ssl.internal.ssl.Handshaker$DelegatedTask.run( > Handshaker.java:935) > > > at org.apache.mina.filter.ssl.SslHandler.doTasks( > SslHandler.java:667) > > > at org.apache.mina.filter.ssl.SslHandler.handshake( > SslHandler.java:458) > > > ... 42 more > > > 2008-03-07 09:21:47,607 INFO main SSLTestClient - RECEIVED: > > > HeapBuffer[pos=0 lim=7 cap=7: 15 03 01 00 02 02 28] > > > 2008-03-07 09:21:47,607 FATAL main SSLTest - CLIENT IoHandler: > > > exceptionCaught > > > javax.net.ssl.SSLHandshakeException: SSL handshake failed. > > > at org.apache.mina.filter.ssl.SslFilter.messageReceived( > SslFilter.java:426) > > > at > org.apache.mina.common.DefaultIoFilterChain.callNextMessageReceived( > DefaultIoFilterChain.java:405) > > > at org.apache.mina.common.DefaultIoFilterChain.access$1200( > DefaultIoFilterChain.java:40) > > > at > org.apache.mina.common.DefaultIoFilterChain$EntryImpl$1.messageReceived( > DefaultIoFilterChain.java:823) > > > at org.apache.mina.filter.logging.LoggingFilter.messageReceived > (LoggingFilter.java:95) > > > at > org.apache.mina.common.DefaultIoFilterChain.callNextMessageReceived( > DefaultIoFilterChain.java:405) > > > at org.apache.mina.common.DefaultIoFilterChain.access$1200( > DefaultIoFilterChain.java:40) > > > at > org.apache.mina.common.DefaultIoFilterChain$EntryImpl$1.messageReceived( > DefaultIoFilterChain.java:823) > > > at > org.apache.mina.common.DefaultIoFilterChain$HeadFilter.messageReceived( > DefaultIoFilterChain.java:607) > > > at > org.apache.mina.common.DefaultIoFilterChain.callNextMessageReceived( > DefaultIoFilterChain.java:405) > > > at > org.apache.mina.common.DefaultIoFilterChain.fireMessageReceived( > DefaultIoFilterChain.java:399) > > > at org.apache.mina.transport.vmpipe.VmPipeFilterChain.fireEvent > (VmPipeFilterChain.java:91) > > > at > org.apache.mina.transport.vmpipe.VmPipeFilterChain.flushEvents( > VmPipeFilterChain.java:75) > > > at org.apache.mina.transport.vmpipe.VmPipeFilterChain.pushEvent > (VmPipeFilterChain.java:68) > > > at > org.apache.mina.transport.vmpipe.VmPipeFilterChain.fireMessageReceived( > VmPipeFilterChain.java:166) > > > at > org.apache.mina.transport.vmpipe.VmPipeFilterChain$VmPipeIoProcessor.flush > (VmPipeFilterChain.java:192) > > > at > org.apache.mina.transport.vmpipe.VmPipeFilterChain$VmPipeIoProcessor.flush > (VmPipeFilterChain.java:169) > > > at > org.apache.mina.common.DefaultIoFilterChain$HeadFilter.filterWrite( > DefaultIoFilterChain.java:644) > > > at > org.apache.mina.common.DefaultIoFilterChain.callPreviousFilterWrite( > DefaultIoFilterChain.java:467) > > > at org.apache.mina.common.DefaultIoFilterChain.access$1400( > DefaultIoFilterChain.java:40) > > > at > org.apache.mina.common.DefaultIoFilterChain$EntryImpl$1.filterWrite( > DefaultIoFilterChain.java:835) > > > at org.apache.mina.filter.ssl.SslHandler.flushScheduledEvents( > SslHandler.java:260) > > > at org.apache.mina.filter.ssl.SslFilter.filterClose( > SslFilter.java:581) > > > at > org.apache.mina.common.DefaultIoFilterChain.callPreviousFilterClose( > DefaultIoFilterChain.java:482) > > > at org.apache.mina.common.DefaultIoFilterChain.access$1500( > DefaultIoFilterChain.java:40) > > > at > org.apache.mina.common.DefaultIoFilterChain$EntryImpl$1.filterClose( > DefaultIoFilterChain.java:840) > > > at > org.apache.mina.common.DefaultIoFilterChain$TailFilter.filterClose( > DefaultIoFilterChain.java:767) > > > at > org.apache.mina.common.DefaultIoFilterChain.callPreviousFilterClose( > DefaultIoFilterChain.java:482) > > > at org.apache.mina.common.DefaultIoFilterChain.fireFilterClose( > DefaultIoFilterChain.java:477) > > > at org.apache.mina.transport.vmpipe.VmPipeFilterChain.fireEvent > (VmPipeFilterChain.java:115) > > > at > org.apache.mina.transport.vmpipe.VmPipeFilterChain.flushEvents( > VmPipeFilterChain.java:75) > > > at org.apache.mina.transport.vmpipe.VmPipeFilterChain.pushEvent > (VmPipeFilterChain.java:68) > > > at > org.apache.mina.transport.vmpipe.VmPipeFilterChain.fireFilterClose( > VmPipeFilterChain.java:126) > > > at org.apache.mina.common.AbstractIoSession.close( > AbstractIoSession.java:173) > > > at org.apache.mina.common.AbstractIoSession.close( > AbstractIoSession.java:158) > > > at com.XXXXX.XXXXX.net.ssl.SSLTest$2.exceptionCaught( > SSLTest.java:95) > > > (stacktrace continues back into client here) > > > > > > Caused by: javax.net.ssl.SSLException: Received fatal alert: > handshake_failure > > > at com.sun.net.ssl.internal.ssl.Alerts.getSSLException( > Alerts.java:166) > > > at com.sun.net.ssl.internal.ssl.SSLEngineImpl.fatal( > SSLEngineImpl.java:1356) > > > at com.sun.net.ssl.internal.ssl.SSLEngineImpl.fatal( > SSLEngineImpl.java:1324) > > > at com.sun.net.ssl.internal.ssl.SSLEngineImpl.recvAlert( > SSLEngineImpl.java:1486) > > > at com.sun.net.ssl.internal.ssl.SSLEngineImpl.readRecord( > SSLEngineImpl.java:961) > > > at com.sun.net.ssl.internal.ssl.SSLEngineImpl.readNetRecord( > SSLEngineImpl.java:787) > > > at com.sun.net.ssl.internal.ssl.SSLEngineImpl.unwrap( > SSLEngineImpl.java:663) > > > at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:566) > > > at org.apache.mina.filter.ssl.SslHandler.unwrap0( > SslHandler.java:644) > > > at org.apache.mina.filter.ssl.SslHandler.unwrapHandshake( > SslHandler.java:591) > > > at org.apache.mina.filter.ssl.SslHandler.handshake( > SslHandler.java:461) > > > at org.apache.mina.filter.ssl.SslHandler.messageReceived( > SslHandler.java:286) > > > at org.apache.mina.filter.ssl.SslFilter.messageReceived( > SslFilter.java:407) > > > ... 90 more > > > > > > > >