There are a number of ways to do it, but
you'll need something along the lines of
final SSLContext sslContext = getSslContext();
final SslFilter sslFilter = new SslFilter(sslContext);
// sslFilter.setUseClientMode(false);
sslFilter.setNeedClientAuth(getMutualAuth());
final String[] enabledProtocols = getEnabledProtocols();
if (ValidationUtil.notEmpty(enabledProtocols)) {
sslFilter.setEnabledProtocols(enabledProtocols);
}
final String[] enabledCipherSuites = getEnabledCipherSuites();
if (ValidationUtil.notEmpty(enabledCipherSuites)) {
sslFilter.setEnabledCipherSuites(enabledCipherSuites);
}
chain.addLast("sslFilter", sslFilter);
and
getSslContext() {
final URL keyStoreUrl = <url>;
final KeyStoreFactory keyStoreFactory = new KeyStoreFactory();
keyStoreFactory.setDataUrl(keyStoreUrl);
keyStoreFactory.setPassword(keyStorePassword);
final URL trustStoreUrl = <url>;
final KeyStoreFactory trustStoreFactory = new KeyStoreFactory();
trustStoreFactory.setDataUrl(trustStoreUrl);
trustStoreFactory.setPassword(trustStorePassword);
final SslContextFactory sslContextFactory = new
SslContextFactory();
final KeyStore keyStore = keyStoreFactory.newInstance();
sslContextFactory.setKeyManagerFactoryKeyStore(keyStore);
final KeyStore trustStore = trustStoreFactory.newInstance();
sslContextFactory.setTrustManagerFactoryKeyStore(trustStore);
sslContextFactory.setKeyManagerFactoryKeyStorePassword(keyManagerKeyStorePassword);
final SSLContext sslContext = sslContextFactory.newInstance();
Note you also have to set up the truststore on the client.
On 12/7/2010 10:00 PM, Gift Samuel wrote:
Hi ,
I am a new bee to Apache mina. I would like to write a client/server program
using Apache mina with SSL. With out SSL the below code works fine,
*MinaTimeClient.java*
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.RuntimeIoException;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
/**
* @Since
* @author giftsam
*/
public class MinaTimeClient
{
private static final int PORT = 9123;
public static void main(String[] args) throws IOException,
InterruptedException
{
IoConnector connector = new NioSocketConnector();
connector.getSessionConfig().setReadBufferSize(2048);
connector.getFilterChain().addLast("logger", new LoggingFilter());
connector.getFilterChain().addLast("codec", new
ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
connector.setHandler(new TimeClientHandler("Test"));
ConnectFuture future = connector.connect(new
InetSocketAddress("192.168.0.28", PORT));
future.awaitUninterruptibly();
if (!future.isConnected())
{
return;
}
IoSession session = future.getSession();
session.getConfig().setUseReadOperation(true);
session.getCloseFuture().awaitUninterruptibly();
System.out.println("After Writing");
connector.dispose();
}
}
*MinaTimeServer.java*
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public class MinaTimeServer
{
private static final int PORT = 9123;
public static void main(String[] args) throws IOException
{
IoAcceptor acceptor = new NioSocketAcceptor();
acceptor.getFilterChain().addLast("logger", new LoggingFilter());
acceptor.getFilterChain().addLast("codec", new
ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
acceptor.setHandler(new TimeServerHandler());
acceptor.getSessionConfig().setReadBufferSize(2048);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
acceptor.bind(new InetSocketAddress(PORT));
}
}
The preceding codes works file without SSL, But what I have to do if I want
made the transactions with SSL. I had investigated a lot. But I couldnt find
the answer. Please help me.
Thanks & Regards,
Gift Sam