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

Reply via email to