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
> > >
> >
> >
>