功能:1) 客户端首先必须以普通连接方式连接连接服务器
2) 服务器接收到连接后,通知客户端启用TLS/SSL方式连接
3) 双方都启用成功后,通过数据加密方式完成信息的通信
备注: TLS/SSL 实现是基于 MINA 的官方例子
地址: http://mina.apache.org/
客户端和服务器端通信内容:
客户端:HELLO
服务器:Hello SSL
客户端:Client SSL Finished
服务器:Server SSL Finished
客户端:信息安全吗?
服务器:信息安全!
客户端:lawless command(非法的命令)
服务器:No Support Command(服务器响应不支持此命令)
服务器端代码:
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.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public class TempTLSServer {
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();
/** 设置编码过滤器和按行读取数据模式 **/
chain.addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
/** 设置事件处理器 **/
acceptor.setHandler(new TempTLSServerHandler());
/** 服务绑定到此端口号 **/
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;
import org.apache.mina.filter.ssl.SslFilter;
import org.apache.mina.filter.ssl.SslFilter.SslFilterMessage;
import com.sariel.tls.BogusSslContextFactory;
public class TempTLSServerHandler extends IoHandlerAdapter {
public void sessionCreated(IoSession session) throws Exception {
System.out.println("[NIO Server]>> sessionCreated");
/** 启用加密过滤通知 **/
session.setAttribute(SslFilter.USE_NOTIFICATION);
}
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");
String msg = "";
if (message instanceof SslFilterMessage) {
msg = ((SslFilterMessage) message).toString();
} else {
msg = (String) message;
}
System.out.println("[NIO Server Received]>> : " + msg);
if ("Hello".equalsIgnoreCase(msg)) {
session.write("Hello SSL");
} else if ("Client SSL Finished".equalsIgnoreCase(msg)) {
session.getFilterChain().addFirst("SSL", new SslFilter(BogusSslContextFactory.getInstance(true)));
// ((SslFilter)session.getFilterChain().get("SSL")).startSsl(session);
session.write("Server SSL Finished");
} else if ("信息安全吗?".equals(msg)) {
session.write("信息安全!");
} else {
session.write("No Support Command");
}
}
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("[NIO Server]>> messageSent");
System.out.println("[NIO Server messageSent]>> : " + (String) message);
}
}
客户端代码:
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.transport.socket.nio.NioSocketConnector;
public class TempTLSClient {
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();
/** 设置事件处理器 **/
connector.setHandler(new TempTLSClientHandler());
/** 设置编码过滤器和按行读取数据模式 **/
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("HELLO");
/** 等待连接断开 **/
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;
import org.apache.mina.filter.ssl.SslFilter;
import com.sariel.tls.BogusSslContextFactory;
public class TempTLSClientHandler 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);
if ("Hello SSL".equals((String) message)) {
session.write("Client SSL Finished");
} else if ("Server SSL Finished".equals((String) message)) {
session.write("信息安全吗?");
} else if ("信息安全!".equals((String) message)) {
session.write("lawless command");
}
}
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("[NIO Client]>> messageSent");
System.out.println("[NIO Client messageSent]>> : " + (String) message);
if ("Client SSL Finished".equals((String) message)) {
SslFilter connectorTLSFilter = new SslFilter(BogusSslContextFactory.getInstance(false));
connectorTLSFilter.setUseClientMode(true);
session.getFilterChain().addFirst("SSL", connectorTLSFilter);
// ((SslFilter)session.getFilterChain().get("SSL")).startSsl(session);
}
}
}
创建 KEY 文件指令:keytool -genkey -alias bogus -keysize 512 -validity 3650 -keyalg RSA -dname "CN=bogus.com, OU=XXX CA,O=Bogus Inc, L=Stockholm, S=Stockholm, C=SE" -keypass boguspw -storepass boguspw -keystore bogus.cert
(在 Java 源文件 BogusSslContextFactory.java 中也有,是官方的)
分享到:
相关推荐
在Java世界中,网络编程是一个不可或缺的部分,而Mina NIO(Non-blocking I/O)Socket库则是Java开发者实现高性能、高并发网络服务的重要工具。本文将深入探讨Mina NIO Socket的核心概念、工作原理以及在实际项目中...
import org.apache.mina.transport.socket.nio.NioSocketAcceptor; public class MinaServer { public static void main(String[] args) throws Exception { IoAcceptor acceptor = new NioSocketAcceptor(); ...
在这个"网络编程(socket、NIO、mina)---demo"的主题中,我们将深入探讨三个关键概念:Socket编程、非阻塞I/O(Non-blocking I/O,简称NIO)以及Apache Mina框架。这些技术广泛应用于构建高性能、高并发的网络应用...
mina框架是Apache组织开发的一个网络通信框架,它基于Java NIO(非阻塞I/O)构建,用于简化网络编程,尤其是TCP和UDP协议的应用开发。本项目提供了服务端和客户端的示例,使得开发者能够更好地理解和应用MINA框架。 ...
- Mina框架支持多种网络协议,如TCP/IP、UDP/IP、SSL/TLS、HTTP、FTP等,使得开发跨协议的应用变得简单。 4. **测试**: - 对于mina测试框架,其目的是验证基于Mina构建的应用程序的正确性和性能。测试包括对通道...
除了基本的网络通信功能,Mina还提供了许多附加特性,如心跳检测、会话管理、身份验证、SSL/TLS加密等。这些功能使得Mina成为一个全面的网络服务开发框架,能够满足不同应用场景的需求。 在实际项目中,使用Mina...
1. **事件驱动模型**:Mina采用了非阻塞I/O(NIO)模式,基于Java的Selector API,使得单线程可以高效处理大量并发连接。 2. **协议无关性**:Mina支持多种网络协议,如TCP/IP、UDP、SSL/TLS等,并且可以通过插件化...
8. **安全性**:MINA支持SSL/TLS加密,可以保护传输数据的安全。在实际应用中,确保数据传输安全是必不可少的,尤其是在涉及敏感信息的实时推送服务中。 9. **扩展性**:MINA框架的模块化设计使得它易于扩展,可以...
利用 Mina 可以高效地完成以下任务: <br>TCP/IP 和 UDP/IP 通讯 串口通讯 VM 间的管道通讯 SSL/TLS JXM 集成 IoC 容器集成( Spring 、 Pico 等) 状态机 <br>据官方评测, APR 的...
MinA Socket是Apache软件基金会下的一个开源项目,全称为“MINA (Multi-purpose Infrastructure for Network Applications)”,它提供了一个高性能、可伸缩的网络应用程序框架,用于开发基于TCP/IP和UDP/IP协议的...
在这个“Mina服务端例子”中,我们主要探讨的是如何使用Mina框架来实现一个基于Socket的非阻塞I/O(NIO)服务端。 1. **Mina框架介绍**: Mina提供了事件驱动和异步处理模型,使得开发者可以专注于业务逻辑,而...
《minafileserver:基于Socket与Mina的文件传输实践》 在IT行业中,网络通信是不可或缺的一部分,尤其是在分布式系统和互联网应用中。Apache Mina是一个轻量级、高性能的网络应用框架,它简化了网络编程,尤其是TCP...
MINA的核心理念是提供一套统一的API,让开发者能够处理各种类型的网络协议,如TCP/IP、UDP/IP以及SSL/TLS等,而无需关心底层的I/O实现。在MINA中,所有的网络通信操作都通过事件驱动和异步回调的方式来完成,这使得...
5. **丰富的API**:MINA提供了丰富的API,包括Socket和Datagram API,以及用于处理SSL/TLS安全通信的API。 6. **易于扩展**:MINA的设计使得添加新协议或扩展现有功能变得简单。 教程中的文件可能包含以下内容: ...
Mina框架的强大之处在于它的灵活性和扩展性,你可以根据需求添加更多的过滤器,实现更复杂的功能,比如心跳检测、SSL/TLS加密、性能监控等。 在深入学习Mina时,建议查阅官方文档,参与社区讨论,以及参考已有的...
在TCP方面,MINA提供了基于NIO(Non-blocking I/O)的API,可以用于构建高性能的TCP服务器。而在UDP方面,MINA同样支持非阻塞的UDP通信,适用于需要广播或多播的场景。 在"apache-mina-2.0.4-bin"压缩包中,主要...
7. **丰富的API**:MINA提供了丰富的API,包括对SSL/TLS的支持,方便开发者构建安全的网络应用。 在“mina-2.0.0-RC1”这个版本中,你可以期待看到以下内容: - **源代码组织**:MINA的源代码通常按照模块进行组织...
开发者可以根据需求进一步探索MINA的高级功能,如使用SSL/TLS进行加密通信,或者实现自定义的协议处理器。 总的来说,Mina通信框架提供了一个强大的平台,帮助开发者快速构建网络应用,同时具备高度的灵活性和可...
4. **支持多种协议**:除了TCP/IP和UDP/IP之外,Mina还支持SSL/TLS等安全协议。 ### Mina的开发环境搭建 1. **下载并配置依赖库**: - 下载Mina库:访问官方下载页面http://mina.apache.org/downloads.html获取...