转自:http://blog.sina.com.cn/s/blog_9f2dd2f3010165cq.html

MinaSocketApache.netSecurity 
功能: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(服务器响应不支持此命令)

服务器端代码:
Java代码  收藏代码
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 + "] 等待连接...");  
    }  
}

Java代码  收藏代码
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);  
    }  
  
}

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

Java代码  收藏代码
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 中也有,是官方的)

基于 MINA 的 TLS/SSL NIO Socket 实现(二)相关推荐

  1. [转]如何借助 TLS/SSL 确保套接字连接的安全(使用 C#/VB/C++ 和 XAML 的 Windows 应用商店应用)...

    本文转自:http://msdn.microsoft.com/zh-cn/library/windows/apps/jj150597.aspx 本主题将展示在使用 StreamSocket 功能时,如 ...

  2. ssl- 套接字对象的TLS / SSL包装器

    目录 ssl - 套接字对象的TLS / SSL包装器 函数,常量和异常 套接字创建 上下文创建 例外 随机生成 证书处理 常量 SSL套接字 SSL上下文 证书 证书链 CA证书 组合密钥和证书 自 ...

  3. TLS/SSL加解密详解(一)

    TLS/SSL加解密详解(一) 本章节主要介绍TLS/SSL的历史 TLS/SSL的来源 SSL(Secure Socket Layer)安全套接层协议 最初由网景公司(Netscape)研发,后被I ...

  4. 基于Mina实现的一个简单数据采集中间件

    一.前言 该数据据采集中间件需要实现与多个终端的长连接,并定时给所有终端发送指令,终端在接收到相关指令后,返回相关信息给中间件.中间件需要一直监测所有终端的在线状态,并一直监听.接收所有终端的消息,并 ...

  5. TLS/SSL 工作原理及握手过程详解

    目录 前言 TLS/SSL 基础概念 密钥协商过程中存在的问题及解决办法 TLS/SSL 握手过程 前言 本文是对 HTTPS 安全基础.TLS/SSL 工作原理及握手过程的总结.第一部分介绍为 HT ...

  6. TLS/SSL握手过程

    参考了:https://www.wosign.com/faq/faq2016-0309-04.htm 1.握手与密钥协商过程 基于RSA握手和密钥交换的客户端验证服务器为示例详解TLS/SSL握手过程 ...

  7. TLS/SSL协议工作原理

    1.TLS/SSL的功能实现原理简单介绍 HTTPS协议的主要功能基本都依赖于TLS/SSL协议,TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash.对称加密和非对称加密,其利用非对称 ...

  8. scheme http https 区别 tls_HTTPS、HTTP、TLS/SSL工作及握手原理、PKI/CA密钥体系

    一.HTTPS与HTTP介绍 二.TLS/SSL工作原理 三.TSL/SSL握手过程 四.HTTPS性能优化 五.PKI体系 一.HTTPS与HTTP介绍 1.Https(Secure Hypetex ...

  9. ssl双向认证_详解TLS/SSL运行机制

    TLS传输层安全性协议(Transport Layer Security)及其前身SSL安全套接层(Secure Sockets Layer)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障 ...

最新文章

  1. Python格式化字符串知多少
  2. USTC English Club Note20171021
  3. 设c语言中 一个int型数据库,最新真实全国二级C选择题真题第1套
  4. 百度地图手机和电脑不一致_手机能下载北斗星导航吗?比高德地图和百度地图好用吗?...
  5. oracle SQL查询
  6. Kudu:支持快速分析的新型Hadoop存储系统
  7. python用cartopy包画地图_利用Cartopy绘制带有地图投影的图形
  8. 中国象棋游戏设计与实现
  9. 分享一个十二色相环取色RGB颜色值与十六进制色码转换工具
  10. wap 第六章 svg 路径
  11. Unity 实现蓄力攻击
  12. jnlp文件服务器数据提取,jnlp 项目示例
  13. 配置Exchange Server 2010多种邮件客户端收发电子邮件
  14. 【数据库】(三)-- mysql 数据库操作应用
  15. 图像的基本运算——scale, rotation, translation
  16. obs-studio 二次封装 (四)obs 音视频采集到推流大体流程图
  17. licode的ios最新版本的接入
  18. 关于ftp操作中被动模式(Passive Mode)是什么意思?
  19. androidP Surface到SurfaceFlinger -->创建Surface (二)
  20. 什么是示波器?示波器的使用方法图解

热门文章

  1. matlab ikine 源码,RTB-9.10 matlab robotics toolbox 工具箱软件 可进行机器人运动学与动力学建模 275万源代码下载- www.pudn.com...
  2. 医疗器械的分类与查询
  3. 千峰培训_前端_day04_js与斗鱼机器人
  4. 如何去除uview中u-grid-item中的白色遮罩/点击效果?
  5. 云侧还是边侧?英码科技在边缘计算突围的“方法论”
  6. 笔记本装win10和ubuntu双系统
  7. EdgeX(6)摄像头配置 onvif之后使用,onvif device test tool(ONVIF测试工具) 进行测试,了解相关接口。
  8. 一些实用的APP分享
  9. 半导体内存设计(上)
  10. 自由泳打水——过三学游泳 2