现在介绍第三种实现方式:Server端和Client端各自拥有可信认的第三方认证机构(CA)签名私有密钥证书,通过CA互相信认对方证书。
在第二种实现方式中,使用keytool生成的数字证书只能是自签名的。谓自签名就是指证书只能保证自己是完整的,没有经过非法修改的。但是无法保证这个证书是属于谁的。这种验证有一个缺点:对于每一个要链接的服务器,都要保存一个证书的验证副本。而且一旦服务器更换证书,所有客户端就需要重新部署这些副本。对于比较大型 的应用来说,这一点是不可接受的。所以就需要证书链进行双向认证。证书链是指对证书的签名又一个预先部署的,众所周知的签名方签名完成,这样每次需要验证证书时只要用这个公用的签名方的公钥进行验证就可以了。比如我们使用的浏览器就保存了几个常用的CA_ROOT。每次连接到网站时只要这个网站的证书是经过这些CA_ROOT签名过的。就可以通过验证了。但是这些共用的CA_ROOT的服务不是免费的。而且价格不菲。所以我们有必要自己生成一个CA_ROOT的密钥对,然后部署应用时,只要把这个CA_ROOT的私钥部署在所有节点就可以完成验证了。要进行CA_ROOT的生成,需要OpenSSL(http://www.openssl.org/)。
安装好OpenSSL后就可以生成证书链。
1.在当前目录下建立几个文件和文件夹,有./demoCA/ ./demoCA/newcerts/ ./demoCA/index.txt ./demoCA/serial,在serial文件中写入第一个序列号“01”
2.生成CA证书
引用
openssl req -new -x509 -keyout ca.key -out ca.crt -days 3650
3.生成server端证书:
1)生成KeyPair生成密钥对
引用
keytool -genkey -alias server -keysize 1024 -validity 3650 -keyalg RSA -dname "CN=ZengWenfeng, OU=Development,O=Techstar.com, L=BeiJing, S=BeiJing, C=CN" -keypass 123456 -storepass 123456 -keystore server.jks
2)生成证书签名请求
引用
keytool -certreq -alias server -sigalg MD5withRSA -file server.csr -keypass 123456 -storepass 123456 -keystore server.jks
3)用CA私钥进行签名,也可以到权威机构申请CA签名
引用
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -notext
4)导入信任的CA根证书到keystore
引用
keytool -import -v -trustcacerts -alias ca_root -file ca.crt -storepass 123456 -keystore server.jks
5)把CA签名后的server端证书导入keystore
引用
keytool -import -v -alias server -file server.crt -keypass 123456 -storepass 123456 -keystore server.jks
4.生成Client证书
1)生成KeyPair生成密钥对
引用
keytool -genkey -alias client -keysize 1024 -validity 3650 -keyalg RSA -dname "CN=ZengWenfeng, OU=Development,O=Techstar.com, L=BeiJing, S=BeiJing, C=CN" -keypass 123456 -storepass 123456 -keystore client.jks
2)生成证书签名请求
引用
keytool -certreq -alias client -sigalg MD5withRSA -file client.csr -keypass 123456 -storepass 123456 -keystore client.jks
3)用CA私钥进行签名,也可以到权威机构申请CA签名
引用
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -notext
4)导入信任的CA根证书到keystore
引用
keytool -import -v -trustcacerts -alias ca_root -file ca.crt -storepass 123456 -keystore client.jks
5)把CA签名后的server端证书导入keystore
引用
keytool -import -v -alias client -file client.crt -keypass 123456 -storepass 123456 -keystore client.jks
这里与第二种方式不同的地方是初始化客户端和服务端的SSLContext时KeyManager、TrustManager分别采用相同的client.jks和server.jks,除了采用证书方式不同,基本与第二种方式一样,具体参见源码。
分享到:
相关推荐
NULL 博文链接:https://sariel.iteye.com/blog/470383
MINA入门实例,实现长连接,短连接通讯。
mina server开发服务端/客户端代码,供大家一起共同分享学习。
mina 通讯 实现server端与基于Android系统的client端通讯
本源码是《NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战》一文的服务端实现(MINA2版),详见:http://www.52im.net/thread-378-1-1.html
基于Apache Mina实现的TCP长连接和短连接实例.doc
使用方法见:https://blog.csdn.net/upset_ming/article/details/96491058 1. 修改了前一版本中证书验证的bug,支持JDK8的高版本 2. 支持国密SSL双向认证 3. 将过期的国密证书替换为新证书
3.mina空闲连接超过保活时间25分钟后,自动删除; 4.mina发送指令后,接收指定时长内收到的消息; <groupId>org.apache.mina</groupId> <artifactId>mina-core</artifactId> <version>2.0.9</version> </...
使用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现在比较稳定。
mina实现简单的登录功能,详细见博客:http://blog.csdn.net/guozeming122/article/details/18605937
Mina长连接短连接实例包含Minaclient工程和MinaHost工程,另外还有几个文档,相信对理解这两个工程有很大的帮助
mina 长连接 客户端+服务端 实现长连接可以收发消息正确部署可以使用需要的朋友可以下载看看
实现了mina 的简单通信通信,内部配置了累积协议编解码器、工具类和客户端与服务端的端口配置。能够实现基本功能,下载完成需要四个基本jar包才能实现功能。我的博客上有相应资源支持下载。
本库是对我在项目中使用的Mina和长连接的一个封装,亲测有效,在网络良好的情况下,几乎能够保证100%的连接和通讯;