Mina的ssl加密
前面写的Mina的示例,都是可以通过telnet登录的,并且可以相互交互。
现在采用ssl加密的方式,对建立连接时,进行加密连接。这样,双方只有统一的加密,然后才可以连接。
密钥的生成之前有说过,里面有引用站内某个程序员的博文,这里用的代码也是出自他手。
package com.example.mina.ssl; import java.io.File;
import java.security.KeyStore; import javax.net.ssl.SSLContext; import org.apache.mina.filter.ssl.KeyStoreFactory;
import org.apache.mina.filter.ssl.SslContextFactory; public class SSLContextGenerator { /**
* 这个方法,通过keystore和truststore文件返回一个SSLContext对象
*
* @return
*/
public SSLContext getSslContext() {
SSLContext sslContext = null;
try {
/*
* 提供keystore的存放目录,读取keystore的文件内容
*/
File keyStoreFile = new File("G:/ssl/keystore.jks"); /*
* 提供truststore的存放目录,读取truststore的文件内容
*/
File trustStoreFile = new File(
"G:/ssl/truststore.jks"); if (keyStoreFile.exists() && trustStoreFile.exists()) {
final KeyStoreFactory keyStoreFactory = new KeyStoreFactory();
System.out.println("Url is: " + keyStoreFile.getAbsolutePath());
keyStoreFactory.setDataFile(keyStoreFile); /*
* 这个是当初我们使用keytool创建keystore和truststore文件的密码,也是上次让你们一定要记住密码的原因了
*/
keyStoreFactory.setPassword("123456"); final KeyStoreFactory trustStoreFactory = new KeyStoreFactory();
trustStoreFactory.setDataFile(trustStoreFile);
trustStoreFactory.setPassword("123456"); final SslContextFactory sslContextFactory = new SslContextFactory();
final KeyStore keyStore = keyStoreFactory.newInstance();
sslContextFactory.setKeyManagerFactoryKeyStore(keyStore); final KeyStore trustStore = trustStoreFactory.newInstance();
sslContextFactory.setTrustManagerFactoryKeyStore(trustStore);
sslContextFactory
.setKeyManagerFactoryKeyStorePassword("123456");
sslContext = sslContextFactory.newInstance();
System.out.println("SSL provider is: "
+ sslContext.getProvider());
} else {
System.out
.println("Keystore or Truststore file does not exist");
}
} catch (Exception ex) {
ex.printStackTrace();
}
return sslContext;
}
}
然后在客户端和服务端都注册一个占据在第一个位置的ssl过滤器,这样ssl就生效了。
/*
* 获取过滤器链,用于添加过滤器
*/
DefaultIoFilterChainBuilder chain = connector.getFilterChain(); /*
* 2.为连接添加过滤器,SSL、日志、编码过滤器
*/
// SSLContextGenerator是我们自己写的一个SSL上下文产生器,稍后会讲到
SslFilter sslFilter = new SslFilter(
new SSLContextGenerator().getSslContext());
// 设置为客户端模式
sslFilter.setUseClientMode(true);
// a.ssl过滤器,这个一定要第一个添加,否则数据不会进行加密
chain.addFirst("sslFilter", sslFilter); // b.添加日志过滤器
chain.addLast("logger", new LoggingFilter()); // c.添加字符的编码过滤器
chain.addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8")))); /*
Mina的ssl加密的更多相关文章
- MySQL的SSL加密连接与性能开销
本文转载自:http://www.innomysql.net/article/23959.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息) Contents [hide] 1 前言 ...
- Self Host WebApi服务传输层SSL加密(服务器端+客户端调用)
接上篇<WebApi服务URI加密及验证的两种方式>,在实际开发中,仅对URI进行加密是不够的,在传输层采用SSL加密也是必须的. 如果服务寄宿于IIS,那对传输层加密非常简单仅需要配置一 ...
- MySQL(MariaDB)的 SSL 加密复制
背景: 在默认的主从复制过程或远程连接到MySQL/MariaDB所有的链接通信中的数据都是明文的,在局域网内连接倒问题不大:要是在外网里访问数据或则复制,则安全隐患会被放大很多.由于项目要求需要直接 ...
- 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接
由于项目中必须得用JDK6来作为Java环境,于是连接SQLServer时出现了com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安 ...
- nginx配置ssl加密(单双向认证、部分https)
nginx配置ssl加密(单双向认证.部分https) nginx下配置ssl本来是很简单的,无论是去认证中心买SSL安全证书还是自签署证书,但最近公司OA的一个需求,得以有个机会实际折腾一番.一开始 ...
- Chapter 1 Securing Your Server and Network(5):使用SSL加密会话
原文:Chapter 1 Securing Your Server and Network(5):使用SSL加密会话 原文出处:http://blog.csdn.net/dba_huangzj/art ...
- 如何让服务端同时支持WebSocket和SSL加密的WebSocket(即同时支持ws和wss)?
自从HTML5出来以后,使用WebSocket通信就变得火热起来,基于WebSocket开发的手机APP和手机游戏也越来越多.我的一些开发APP的朋友,开始使用WebSocket通信,后来觉得通信不够 ...
- 项目实战1—LNMP的搭建、nginx的ssl加密、身份验证的实现
总项目流程图,详见 http://www.cnblogs.com/along21/p/8000812.html 实战一:搭建lnmp及类小米等商业网站的实现 环境:关闭防火墙,selinux 1.安装 ...
- [转帖]nginx配置ssl加密(单/双向认证、部分https)
nginx配置ssl加密(单/双向认证.部分https) https://segmentfault.com/a/1190000002866627 nginx下配置ssl本来是很简单的,无论是去认证 ...
随机推荐
- malloc、free、new、delete
一.C语言中不定大小多维数组的处理: 如果要给二维数组(m*n)分配空间,代码可以写成下面: char **a, i; // 先分配m个指针单元,注意是指针单元 // 所以每个单元的大小是sizeof ...
- A计划(BFS)
A计划 http://acm.hdu.edu.cn/showproblem.php?pid=2102 Time Limit: 3000/1000 MS (Java/Others) Memory ...
- day12:vcp考试
Q221. An administrator is creating a new Platform Service Controller Password Policy with the follow ...
- IIS 设置404页面 显示系统找不到指定的文件
1.原因就是IIS的普通用户没有访问404页面的权限,造成了自定义404页面无法显示.只需要将user用户组具有读的权限即可.
- C#中发送邮件,包含Html代码 CDO.Message
C#代码: /// <summary> /// 发送邮件 /// </summary> /// <param name="context">&l ...
- DNA甲基化研究概述
DNA甲基化研究概述 生信技能树 已关注 2018.01.23 11:43 字数 993 阅读 183评论 0喜欢 1 DNA甲基化(DNA methylation)是最早被研究的重要表观遗传修饰之一 ...
- CURL_SAFE_UPLOAD
1.版本差异 PHP5.4:支持通过在数组数据中,使用“@+文件全路径”的语法附加文件 curl_setopt(ch, CURLOPT_POSTFIELDS, array( 'file' => ...
- js点击添加
1.点击变色 <div id="dd" style="width:100px;height: 100px;background-color: #ccc"& ...
- window安装设置
https://jingyan.baidu.com/article/73c3ce28ed7d92e50243d96c.html
- OSGi 系列(七)之服务的监听、跟踪、声明等
OSGi 系列(七)之服务的监听.跟踪.声明等 1. OSGi 服务的事件监听 和 bundle 的事件监听类似,服务的事件监听是在服务注册.注销,属性被修改的时候,OSGi 框架会发出各种不同的事件 ...