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"))));

        /*
时间: 2024-10-22 19:48:59

Mina的ssl加密的相关文章

Vsftpd支持SSL加密传输

ftp传输数据是明文,弄个抓包软件就可以通过数据包来分析到账号和密码,为了搭建一个安全性比较高ftp,可以结合SSL来解决问题 SSL(Secure Socket Layer)工作于传输层和应用程序之间.作为一个中间层,应用程序只要采用SSL提供的一套SSL套接字API来替换标准的Socket套接字,就可以把程序转换为SSL化的安全网络程序,在传输过程中将由SSL协议实现数据机密性和完整性的保证.SSL取得大规模成功后,IETF将SSL作了标准化,并将其称为TLS(Transport Layer

SSL加密编程(1) 概述

SSL是TCP/IP环境上的标准的安全加密传输协议.SSL的全称是安全的Socket层,它具有与Socket类似的客户端/服务器体制.常见的https即http+ssl,从安全的角度看,https的安全技术就是SSL加密.从建立服务的角度,配置一个web服务器提供https服务,其关键就是获取和设置所需的SSL服务器证书.SSL基本的安全约束是对服务器的验证,这一安全约束被用来防止钓鱼网站仿冒合法的网站,从而防止客户端向假的服务器,如仿冒电子邮件或者网银外观的网站,提供登录口令等敏感数据.注册一

weblogic-配置SSl加密

写在前面:weblogic配置ssl加密,使用JDK提供的命令工具生成公钥和私钥,关于一些密钥知识,我也没弄清楚,后续学习了之后将补充完善这些知识信息. 1.weblogic的ssl配置准备 1)生成identity.jks密钥库 [email protected]:~/domains/mcpinterf_domain>keytool -genkey -aliaspicckey -keyalgRSA -keysize1024 -keypass111111 -keystoreidentity.jk

驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

由于项目中必须得用JDK6来作为Java环境,于是连接SQLServer时出现了com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接.错误:"Java.lang.RuntimeException: Could not generate DH keypair".这样的错误. 这个在JDK7中是修复了的,所以如果项目允许的话就换成JDK7吧,但有些只能用JDK6

nginx配置ssl加密(单双向认证、部分https)

默认nginx是没有安装ssl模块的,需要编译安装nginx时加入--with-http_ssl_module选项. 关于SSL/TLS原理请参考这里,如果你只是想测试或者自签发ssl证书,参考 这里 . 提示:nignx到后端服务器由于一般是内网,所以不加密. 1. 全站SSL 全站做ssl是最常见的一个使用场景,默认端口443,而且一般是单向认证. server { listen 443; server_name example.com; root /apps/www; index inde

利用Fiddler和Wireshark解密SSL加密流量

原文地址:http://kelvinh.github.io/blog/2014/01/12/decrypt-ssl-using-fiddler-and-wireshark/ Fiddler是一个著名的调试代理工具,它不仅能解析HTTP,而且还能解析加密的HTTPS流量.Wireshark则是一个非常强大的网络包监控以及协议分析工具. 在本文中,只考虑使用SSL来加密HTTP,所以并不严格区分SSL和HTTPS,虽然从广义上来讲,将二者混为一谈是非常不合理的 . 看到这里,大多数人都会很困惑:Fi

SSL加密

SSL利用数据加密.身份验证和消息完整性验证机制,为基于TCP等可靠连接的应用层协议提供安全性保证 SSL协议实现的安全机制包括: l              数据传输的机密性:利用对称密钥算法对传输的数据进行加密. l              身份验证机制:基于证书利用数字签名方法对服务器和客户端进行身份验证,其中客户端的身份验证是可选的. l              消息完整性验证:消息传输过程中使用MAC算法来检验消息的完整性 加密通道,是指发送方在发送数据前,使用加密算法和加密密钥

SSL加密基本身份验证

SSL加密基本身份验证 u 案例需求 如何通过SSL方式加密基本身份验证? u 知识提示 在IIS 7.0中提供了多种用户身份验证方式,如果启用基本身份验证方式,在网络上传输的是弱加密的密码,很容易被窃取.所以可以使用SSL方式进行加密,这样用户密码的安全性就得到了保障. 具体实现步骤入戏所述. (1)在IIS中更改Web站点的用户身份验证方式为"基本身份验证",如图5.1所示. 图5.1 更改身份验证方式 (2)为Web服务器申请证书,如图5.2所示. 图5.2 完成证书申请 (3)

密码学——网间数据加密传输全流程(SSL加密原理)

0.导言 昨天写了一篇关于<秘钥与公钥>的文章,写的比较简单好理解,有点儿像过家家,如果详细探究起来会有不少出入,今天就来详细的说明一下数据加密的原理和过程.这个原理就是大名鼎鼎SSL的加密原理,哦,对了,有人说上个月SSL刚爆出本年度最轰动的漏洞"心脏滴血",可能危及全球好多互联网企业,那这个东西靠谱吗?其实,爆出漏洞的是SSL的一款产品openssl,是程序员编码时候的失误,是程序上的漏洞,而非SSL原理上出现了问题,所以SSL还是靠谱的,HTTP协议还是需要它来保护,