上回书说到...书接上回,现在介绍第二种实现方式:Server端和Client端各自拥有自签名的私有密钥证书,并且互相交换公钥,通过对方公钥互相信认对方证书。
1.创建Server端KeyStore文件serverKeys.jks,包含一个用于服务器的证书 :
引用
keytool -genkey -alias server -keysize 1024 -validity 3650 -keyalg RSA -dname "CN=sundoctor.com, OU=Developer,O=Techstar, L=Beijing, S=Beijing, C=CH" -keypass 123456 -storepass 123456 -keystore serverKeys.jks
2.导出服务端公钥证书
引用
keytool -export -alias server -keystore serverKeys.jks -file server.cer -storepass 123456
3.创建Client端KeyStore文件clientKeys.jks,分别包含用于虚构的通信者 Alice 和 Bob 的证书 :
引用
keytool -genkey -alias alice -keysize 1024 -validity 3650 -keyalg RSA -dname "CN=Aclie, OU=Developer,O=Techstar, L=Beijing, S=Beijing, C=CH" -keypass 123456 -storepass 123456 -keystore clientKeys.jks
keytool -genkey -alias bob -keysize 1024 -validity 3650 -keyalg RSA -dname "CN=Bob, OU=Developer,O=Techstar, L=Beijing, S=Beijing, C=CH" -keypass 123456 -storepass 123456 -keystore clientKeys.jks
4.导出客户端 Alice和 Bob公钥证书
引用
keytool -export -alias alice -keystore clientKeys.jks -file alice.cer -storepass 123456
keytool -export -alias bob -keystore clientKeys.jks -file bob.cer -storepass 123456
5.创建服务端KeyStore文件serverTrust.jks并导入客户端 Alice和 Bob公钥证书
引用
keytool -import -alias alice -keystore serverTrust.jks -file alice.cer -keypass 123456 -storepass 123456
keytool -import -alias bob -keystore serverTrust.jks -file bob.cer -keypass 123456 -storepass 123456
6.创建客户端KeyStore文件clientTurst.jks并导入服务端公钥证书
引用
keytool -import -alias server -keystore clientTrust.jks -file server.cer -keypass 123456 -storepass 123456
这样我们就得clientKeys.jks、clientTrust.jks、serverKeys.jks、serverTrust.jks四个KeyStore文件。
这里与第一种方式不同的地方就是不再需要BogusTrustManagerFactory类,初始化客户端和服务端的SSLContext时TrustManager分别采用 clientTrust.jks和serverTrust.jks,KeyManager和第一种方式一样。
protected static TrustManager[] getTrustManagers(String trustfile,String pasword) throws IOException, GeneralSecurityException {
// First, get the default TrustManagerFactory.
TrustManagerFactory tmFact = TrustManagerFactory.getInstance(TRUST_MANAGER_FACTORY_ALGORITHM);
// Next, set up the TrustStore to use. We need to load the file into
// a KeyStore instance.
InputStream in = BogusSslContextFactory.class.getResourceAsStream(trustfile);
KeyStore ks = KeyStore.getInstance("jks");
ks.load(in, pasword.toCharArray());
in.close();
// Now we initialise the TrustManagerFactory with this KeyStore
tmFact.init(ks);
// And now get the TrustManagers
TrustManager[] tms = tmFact.getTrustManagers();
return tms;
}
分享到:
相关推荐
在本篇博文中,我们将深入探讨如何利用Apache MINA库实现基于TLS/SSL的NIO(非阻塞I/O)Socket通信。MINA是一个高度可扩展的网络应用框架,广泛用于构建高性能、高并发的网络应用程序,如服务器端的TCP和UDP服务。...
在这个实例中,我们将探讨如何使用Mina实现长连接和短连接。 首先,理解长连接和短连接的概念至关重要。在TCP/IP通信中,短连接(Short Connection)是指一次数据传输完成后立即关闭连接,而长连接(Long ...
综上所述,MINA长连接框架在实现服务器与Android客户端通讯时,涉及到网络编程、数据传输协议、异常处理、过滤器机制、长连接维护等多个技术要点,开发者需要根据实际需求进行合理的架构设计和优化。通过MINA提供的...
在Mina中,`SslFilter`实现了SSL/TLS协议,它可以添加到I/O处理器的过滤链中,对进出的数据进行加密解密。`SslFilter`需要配置SSL上下文(SSLContext),该上下文包含了证书、密钥和信任管理器等信息。 **3. 创建...
本源码是《NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战》一文的服务端实现(MINA2版),详见:http://www.52im.net/thread-378-1-1.html
在本文档中,我们将通过具体实例,详细介绍如何使用Apache Mina 2.0实现TCP协议下的长连接与短连接。 #### 二、系统概述 ##### 2.1 系统架构 本系统主要由两个服务端程序与两个客户端程序构成,其中: - **长...
在本文中,我们将深入探讨Mina的核心概念,包括连接管理、心跳机制以及断线重连策略。 首先,让我们理解"Mina连接"。在Mina中,连接是指客户端与服务端之间建立的通信链路。它支持多种传输协议,如TCP/IP(Socket)...
在Mina中,服务端通常通过创建一个Acceptor来监听特定的端口,等待客户端的连接请求。Acceptor会处理连接建立、数据传输和连接关闭等网络事件。服务端的核心组件是IoHandler,它定义了对网络事件的处理方法,如...
**mina双向通信已测试** ...在实际项目中,开发者可以利用Mina实现更复杂的服务,如分布式系统中的通信、实时数据传输等。这个测试项目不仅可以帮助提升技能,还可以作为基础模块,为后续的开发工作提供便利。
在这个场景中,我们将讨论如何使用MINA来实现一个简单的登录功能。 首先,理解MINA的基本工作原理至关重要。MINA的核心是IoSession对象,它代表了服务器和客户端之间的持久连接。当客户端连接到服务器时,MINA会...
MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,专门设计用于构建高性能、高可用性的网络...无论是在游戏服务器、实时聊天应用还是其他需要持续连接的服务中,MINA都是一个强大的工具。
它利用Java NIO库,实现了异步、非阻塞的通信模式,可以在单一线程中处理多个并发连接,大大提升了服务器的并发能力。Minaclient和MinaHost工程正是展示了如何在实际项目中应用这些概念。 在Minaclient工程中,我们...
“服务端基于MINA2的UDP双向通信Demo演示(MINA2服务端)” 这个标题表明这是一个使用MINA2框架在服务端实现的UDP(User Datagram Protocol)双向通信的示例代码。MINA2是一个开源的Java网络应用程序框架,它简化了...
在实际项目中,将MINA库引入,结合业务逻辑编写相应的处理代码,即可实现长连接通信。 总结来说,Socket通信是网络编程的基础,而MINA长连接则是Socket通信的一种优化实现,尤其适合需要高效处理大量并发连接和实时...
使用方法见:https://blog.csdn.net/upset_ming/article/details/96491058 1. 修改了前一版本中证书验证的bug,支持JDK8的高版本 2. 支持国密SSL双向认证 3. 将过期的国密证书替换为新证书
2. **会话建立**:实现CMPP连接的认证机制,包括基于IP地址、端口号或特定的CMPP协议报文的认证过程。 3. **协议解析**:设计CMPP2.0协议的解码器(Decoder)和编码器(Encoder),将原始的字节流转换为业务对象,...
在实现双机通讯时,我们通常会使用TCP协议,因为其具有面向连接、可靠传输的特点,适合于需要稳定数据交换的场景。 要使用Mina实现双机通讯,我们首先要创建一个服务器端(Server)和一个或多个客户端(Client)。...
在Mina与Socket通信的实现中,服务端通常使用Mina来创建一个Acceptor,监听特定端口,等待客户端的连接请求。一旦有连接建立,Mina会自动触发相应的事件处理器,开发者可以在其中处理数据读写。以下是一个基本的...
在这个“mina 实现简单通讯”的项目中,我们看到了一个基于MINA的基本通信实现,涵盖了服务端和客户端的交互。 首先,MINA的核心组件包括`IoSession`,它是网络连接的抽象,包含了与特定连接相关的所有信息,如输入...