[color=blue]功能: 服务器启动后只支持 TLS/SSL 方式连接[/color][color=darkred](不接受普通连接)[/color]
[color=blue]备注: TLS/SSL 实现是基于 MINA 的官方例子
地址: http://mina.apache.org/[/color]
[color=darkred]客户端和服务器端通信内容:[/color]
[color=violet]客户端:我是安全的吗?[/color]
[color=green]服务器:安全链接已建立![/color]
[color=darkred]服务器端代码:[/color]
[color=darkred]客户端代码:[/color]
源文件下载地址:[url]http://sariel.iteye.com/blog/470383[/url]
或直接下载地址:[url]http://dl.iteye.com/topics/download/432bf891-ec7c-31be-a7a4-ec1f67a4dd9d[/url]
[color=blue]备注: TLS/SSL 实现是基于 MINA 的官方例子
地址: http://mina.apache.org/[/color]
[color=darkred]客户端和服务器端通信内容:[/color]
[color=violet]客户端:我是安全的吗?[/color]
[color=green]服务器:安全链接已建立![/color]
[color=darkred]服务器端代码:[/color]
package com.sariel.tls.server;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.ssl.SslFilter;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import com.sariel.tls.BogusSslContextFactory;
public class TLSServer {
private static final int PORT = 50003;
public static void main(String[] args) throws Exception {
/** 创建服务器端连接器 **/
SocketAcceptor acceptor = new NioSocketAcceptor();
acceptor.setReuseAddress(true);
/** 获取默认过滤器 **/
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
SslFilter sslFilter = new SslFilter(BogusSslContextFactory.getInstance(true));
/** 设置加密过滤器 **/
chain.addLast("sslFilter", sslFilter);
/** 设置编码过滤器和按行读取数据模式 **/
chain.addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
/** 设置事件处理器 **/
acceptor.setHandler(new TLSServerHandler());
/** 服务绑定到此端口号 **/
acceptor.bind(new InetSocketAddress(PORT));
System.out.println("服务器在 [" + PORT + "] 等待连接...");
}
}
package com.sariel.tls.server;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class TLSServerHandler extends IoHandlerAdapter {
public void sessionCreated(IoSession session) throws Exception {
System.out.println("[NIO Server]>> sessionCreated");
}
public void sessionOpened(IoSession session) throws Exception {
System.out.println("[NIO Server]>> sessionOpened");
}
public void sessionClosed(IoSession session) throws Exception {
System.out.println("[NIO Server]>> sessionClosed");
}
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
System.out.println("[NIO Server]>> sessionIdle");
}
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
System.out.println("[NIO Server]>> exceptionCaught :");
cause.printStackTrace();
}
public void messageReceived(IoSession session, Object message) throws Exception {
System.out.println("[NIO Server]>> messageReceived");
System.out.println("[NIO Server Received]>> : "+(String) message);
session.write("安全链接已建立!");
}
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("[NIO Server]>> messageSent");
System.out.println("[NIO Server messageSent]>> : " + (String) message);
}
}
[color=darkred]客户端代码:[/color]
package com.sariel.tls.client;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import java.security.GeneralSecurityException;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
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.ssl.SslFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import com.sariel.tls.BogusSslContextFactory;
public class TLSClient {
private static final int PORT = 50003;
private static final String TARGET_IP = "192.168.12.41";
public static void main(String[] args) throws GeneralSecurityException {
/** 创建客户端连接器 **/
IoConnector connector = new NioSocketConnector();
SslFilter connectorTLSFilter = new SslFilter(BogusSslContextFactory.getInstance(false));
/** 设置为客户端模式 **/
connectorTLSFilter.setUseClientMode(true);
/** 设置加密过滤器 **/
connector.getFilterChain().addLast("SSL", connectorTLSFilter);
/** 设置事件处理器 **/
connector.setHandler(new TLSClientHandler());
/** 设置编码过滤器和按行读取数据模式 **/
connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
/** 创建连接 **/
ConnectFuture future = connector.connect(new InetSocketAddress(TARGET_IP, PORT));
/** 等待连接创建完成 **/
future.awaitUninterruptibly();
/** 获取连接会话 **/
IoSession session = future.getSession();
/** 发送信息 **/
session.write("我是安全的吗?");
/** 等待连接断开 **/
session.getCloseFuture().awaitUninterruptibly();
connector.dispose();
}
}
package com.sariel.tls.client;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class TLSClientHandler extends IoHandlerAdapter {
public void sessionCreated(IoSession session) throws Exception {
System.out.println("[NIO Client]>> sessionCreated");
}
public void sessionOpened(IoSession session) throws Exception {
System.out.println("[NIO Client]>> sessionOpened");
}
public void sessionClosed(IoSession session) throws Exception {
System.out.println("[NIO Client]>> sessionClosed");
}
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
System.out.println("[NIO Client]>> sessionIdle");
}
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
System.out.println("[NIO Client]>> exceptionCaught :");
cause.printStackTrace();
}
public void messageReceived(IoSession session, Object message) throws Exception {
System.out.println("[NIO Client]>> messageReceived");
System.out.println("[NIO Client Received]>>" + (String) message);
}
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("[NIO Client]>> messageSent");
System.out.println("[NIO Client messageSent]>> : " + (String) message);
}
}
源文件下载地址:[url]http://sariel.iteye.com/blog/470383[/url]
或直接下载地址:[url]http://dl.iteye.com/topics/download/432bf891-ec7c-31be-a7a4-ec1f67a4dd9d[/url]