首页 > 代码库 > Mina的ssl加密
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加密
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。