Hi Param,
On 10/31/07, param singh <[EMAIL PROTECTED]> wrote:
>
> Hi,
>
> I am trying to implement a simple Java NIO server client socket connection
> with SSL support (apparently using MINA...).
> Consider me as a novice in network and SSL programming.
>
> In short, I am trying to extend the image server to use SSL on both ends
> (server and client...) and it did not work.
>
> So I took the image server/client codec adapter example and got it working.
> The example satisfies my first target since I want to be able to send
> objects over the wire in some sort of protocol-documented way (reusable with
> other languages). Now, I needed to add SSL support, so searched this forum,
> found one post directing to Koders MinaNetworkClient.java. Which in short
> involves taking the BogusSSLContextFactory, creating the bogus.cert and
> making the following changes into the image example...
>
> For ImageServer.java
> ImageServerIoHandler handler = new ImageServerIoHandler();
> SocketAcceptor acceptor = new SocketAcceptor();
> acceptor.getFilterChain().addLast("protocol", new
> ProtocolCodecFilter(new ImageCodecFactory(false)));
>
> // These are the lines added...
> SSLFilter sslFilter = new SSLFilter(BogusSSLContextFactory
> .getInstance(true));
> sslFilter.setUseClientMode(false);
> acceptor.getFilterChain().addLast("sslFilter", sslFilter);
> System.out.println("SSL ON");
> // Till here...
>
> acceptor.bind(new InetSocketAddress(PORT), handler);
>
> For ImageClient.java
> this.host = host;
> this.port = port;
> this.imageListener = imageListener;
> connector = new SocketConnector();
> connector.getFilterChain().addLast("codec", new
> ProtocolCodecFilter(new ImageCodecFactory(true)));
>
> // Lines added...
> SSLFilter sslFilter;
> try { // Instead of adding throws to constructor, to the
> method calling
> constructor ...
> sslFilter = new SSLFilter(BogusSSLContextFactory
> .getInstance(false));
> sslFilter.setUseClientMode(true);
> connector.getFilterChain().addLast("sslFilter", sslFilter);
> } catch (GeneralSecurityException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> }
>
> After this I tried the above example and got an exception from the GUI. The
> exception says something like cannot cast ImageRequest cannot be cast to
> ByteBuffer (both belonging to org.apache.mina.*). This happens when calling
> session.write(imageRequest) in the ImageClient.sendRequest method.
>
> Also I tried to switch the order in which client's SSLFilter was added. Then
> clicking on SendRequest seems to work, but no message is received by the
> server. And on quiting I get the exception ByteBuffer cannot be casted into
> ImageResponse. This happens on ImageClient.messageReceived method when
> object is casted to ImageResponse.
>
> I have no idea why this is happening, or how to make SSL work with
> ProtocolCodec?
You have to insert the SSLFilter *before* the ProtocolCodecFilter.
It's because ProtocolCodecFilter transforms incoming ByteBuffers into
Java objects. SSLFilter, therefore, can't decrypt it.
HTH,
Trustin
--
what we call human nature is actually human habit
--
http://gleamynode.net/
--
PGP Key ID: 0x0255ECA6