上回书说到...书接上回,现在介绍第二种实现方式: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;
}
分享到:
相关推荐
NULL 博文链接:https://sariel.iteye.com/blog/470383
本源码是《NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战》一文的服务端实现(MINA2版),详见:http://www.52im.net/thread-378-1-1.html
MINA入门实例,实现长连接,短连接通讯。
mina server开发服务端/客户端代码,供大家一起共同分享学习。
mina 通讯 实现server端与基于Android系统的client端通讯
使用方法见:https://blog.csdn.net/upset_ming/article/details/96491058 1. 修改了前一版本中证书验证的bug,支持JDK8的高版本 2. 支持国密SSL双向认证 3. 将过期的国密证书替换为新证书
基于Apache Mina实现的TCP长连接和短连接实例.doc
2.mina若有空闲连接则使用已有连接,若无则新建mina连接; 3.mina空闲连接超过保活时间25分钟后,自动删除; 4.mina发送指令后,接收指定时长内收到的消息; <groupId>org.apache.mina</groupId> <artifactId>...
使用MINA实现长连接
这是我学习apache mina框架中研究ssl过滤器u做的一个测试的例子。希望对于刚刚学习mina框架的朋友有所帮助。如果有什么疑问可以发送到我的emai:pengli.bj@163.com与我联系
mina连接,mina心跳连接,mina断线重连。其中客户端可直接用在android上。根据各方参考资料,经过自己的理解弄出来的。CSDN的资源分太难得了。
完整的mina双向通信demo,实现了客户端与服务端之间相互发送消息。目前只支持发送输入的字符串。demo中有详细的注释,可以直接运行。运行环境(myeclipse+tomcat7.0)
自己写的demo,完成了mina的双向通信功能,比较简单的一个demo,扩展性强
我自己写的使用mina框架实现cmpp2.0服务端,经过一段使用解决了几个bug现在比较稳定。
本源码是《NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示》一文的MINA2服务端源码实现,详见:http://www.52im.net/thread-373-1-1.html
mina实现简单的登录功能,详细见博客:http://blog.csdn.net/guozeming122/article/details/18605937
Mina长连接短连接实例包含Minaclient工程和MinaHost工程,另外还有几个文档,相信对理解这两个工程有很大的帮助
mina 长连接 客户端+服务端 实现长连接可以收发消息正确部署可以使用需要的朋友可以下载看看
实现了mina 的简单通信通信,内部配置了累积协议编解码器、工具类和客户端与服务端的端口配置。能够实现基本功能,下载完成需要四个基本jar包才能实现功能。我的博客上有相应资源支持下载。