`
sariel
  • 浏览: 53207 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

基于 MINA 的 TLS/SSL NIO Socket 实现(一)

    博客分类:
  • Java
阅读更多
功能: 服务器启动后只支持 TLS/SSL 方式连接(不接受普通连接)
备注: TLS/SSL 实现是基于 MINA 的官方例子
地址: http://mina.apache.org/


客户端和服务器端通信内容:
客户端:我是安全的吗?
服务器:安全链接已建立!

服务器端代码:
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);
	}
}

客户端代码:
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);
	}
}

源文件下载地址:http://sariel.iteye.com/blog/470383
或直接下载地址:http://dl.iteye.com/topics/download/432bf891-ec7c-31be-a7a4-ec1f67a4dd9d
分享到:
评论
1 楼 allenny 2011-07-18  
证书呢,证书在哪里?

相关推荐

    基于 MINA 的 TLS/SSL NIO Socket 实现(二)

    在本篇博文中,我们将深入探讨如何利用Apache MINA库实现基于TLS/SSL的NIO(非阻塞I/O)Socket通信。MINA是一个高度可扩展的网络应用框架,广泛用于构建高性能、高并发的网络应用程序,如服务器端的TCP和UDP服务。...

    Mina NIO Socket

    在Java世界中,网络编程是一个不可或缺的部分,而Mina NIO(Non-blocking I/O)Socket库则是Java开发者实现高性能、高并发网络服务的重要工具。本文将深入探讨Mina NIO Socket的核心概念、工作原理以及在实际项目中...

    网络编程(socket、NIO、mina)---demo

    在服务端,无论是Socket、NIO还是Mina,都需要创建监听套接字来接收客户端连接,并为每个连接创建一个新的套接字或通道。而在客户端,需要建立到服务器的连接,发送和接收数据。 总结来说,这个"网络编程(socket、...

    Mina+Socket通信

    在Mina与Socket通信的实现中,服务端通常使用Mina来创建一个Acceptor,监听特定端口,等待客户端的连接请求。一旦有连接建立,Mina会自动触发相应的事件处理器,开发者可以在其中处理数据读写。以下是一个基本的...

    mina框架中socket使用,有服务端和客户端。

    mina框架是Apache组织开发的一个网络通信框架,它基于Java NIO(非阻塞I/O)构建,用于简化网络编程,尤其是TCP和UDP协议的应用开发。本项目提供了服务端和客户端的示例,使得开发者能够更好地理解和应用MINA框架。 ...

    socket mina测试框架

    Socket Mina测试框架是一个强大的网络通信应用框架,主要用于简化Java应用程序与远程服务器之间的通信。它提供了高度可扩展和高性能的I/O处理模型,使得开发者能够更专注于业务逻辑,而不是底层的网络实现细节。Mina...

    mina 包 socket 框架

    除了基本的网络通信功能,Mina还提供了许多附加特性,如心跳检测、会话管理、身份验证、SSL/TLS加密等。这些功能使得Mina成为一个全面的网络服务开发框架,能够满足不同应用场景的需求。 在实际项目中,使用Mina...

    Android Java Socket框架 Mina2.0

    1. **事件驱动模型**:Mina采用了非阻塞I/O(NIO)模式,基于Java的Selector API,使得单线程可以高效处理大量并发连接。 2. **协议无关性**:Mina支持多种网络协议,如TCP/IP、UDP、SSL/TLS等,并且可以通过插件化...

    mina及时推送客户端服务端实现

    8. **安全性**:MINA支持SSL/TLS加密,可以保护传输数据的安全。在实际应用中,确保数据传输安全是必不可少的,尤其是在涉及敏感信息的实时推送服务中。 9. **扩展性**:MINA框架的模块化设计使得它易于扩展,可以...

    MINA NIO 高性能异步并发网络通讯框架

    利用 Mina 可以高效地完成以下任务: <br>TCP/IP 和 UDP/IP 通讯 串口通讯 VM 间的管道通讯 SSL/TLS JXM 集成 IoC 容器集成( Spring 、 Pico 等) 状态机 <br>据官方评测, APR 的...

    mina服务端例子

    在这个“Mina服务端例子”中,我们主要探讨的是如何使用Mina框架来实现一个基于Socket的非阻塞I/O(NIO)服务端。 1. **Mina框架介绍**: Mina提供了事件驱动和异步处理模型,使得开发者可以专注于业务逻辑,而...

    mina socket 代码

    MinA Socket是Apache软件基金会下的一个开源项目,全称为“MINA (Multi-purpose Infrastructure for Network Applications)”,它提供了一个高性能、可伸缩的网络应用程序框架,用于开发基于TCP/IP和UDP/IP协议的...

    mina-2.0.4 source code

    MINA的核心理念是提供一套统一的API,让开发者能够处理各种类型的网络协议,如TCP/IP、UDP/IP以及SSL/TLS等,而无需关心底层的I/O实现。在MINA中,所有的网络通信操作都通过事件驱动和异步回调的方式来完成,这使得...

    mina传文件案例,客户端加服务端

    《minafileserver:基于Socket与Mina的文件传输实践》 在IT行业中,网络通信是不可或缺的一部分,尤其是在分布式系统和互联网应用中。Apache Mina是一个轻量级、高性能的网络应用框架,它简化了网络编程,尤其是TCP...

    Apache MINA基于JAVA的网络服务器框架 教程.zip

    5. **丰富的API**:MINA提供了丰富的API,包括Socket和Datagram API,以及用于处理SSL/TLS安全通信的API。 6. **易于扩展**:MINA的设计使得添加新协议或扩展现有功能变得简单。 教程中的文件可能包含以下内容: ...

    一个应用mina的实例(源码)

    Mina支持多种协议,如TCP/IP、UDP、SSL/TLS等,并且提供了事件驱动、非阻塞I/O模型,这使得它在处理大量并发连接时表现出色。 1. **事件驱动模型**:Mina采用基于事件的I/O模型,当网络事件(如数据接收、连接建立...

    mina框架的demo 入门,开发

    Mina框架的强大之处在于它的灵活性和扩展性,你可以根据需求添加更多的过滤器,实现更复杂的功能,比如心跳检测、SSL/TLS加密、性能监控等。 在深入学习Mina时,建议查阅官方文档,参与社区讨论,以及参考已有的...

    mina源代码学习提供下载

    7. **丰富的API**:MINA提供了丰富的API,包括对SSL/TLS的支持,方便开发者构建安全的网络应用。 在“mina-2.0.0-RC1”这个版本中,你可以期待看到以下内容: - **源代码组织**:MINA的源代码通常按照模块进行组织...

    apache-mina-2.0.4-bin

    在TCP方面,MINA提供了基于NIO(Non-blocking I/O)的API,可以用于构建高性能的TCP服务器。而在UDP方面,MINA同样支持非阻塞的UDP通信,适用于需要广播或多播的场景。 在"apache-mina-2.0.4-bin"压缩包中,主要...

    mina多线程

    4. **支持多种协议**:除了TCP/IP和UDP/IP之外,Mina还支持SSL/TLS等安全协议。 ### Mina的开发环境搭建 1. **下载并配置依赖库**: - 下载Mina库:访问官方下载页面http://mina.apache.org/downloads.html获取...

Global site tag (gtag.js) - Google Analytics