[5]AMQP(高级消息队列协议) ----如何创建自己的SSLContext对象

原创 2016年07月03日 00:28:38

[4]AMQP(高级消息队列协议) ----改造QPID JMS-0.9 API 对 SSLContext的 支持(http://blog.csdn.net/chancein007/article/category/6294435)的一文中,提到了如何让QPID JMS 0.9 Java对自定义的SSLContext的支持,那么该如何测试呢?其实测试的核心就是如何创建SSLContext对象。

假设我们的KeyStore和TrustStore的相关证书都保存在了相应的JKS文件里面

String truststore_File_Path="D:/QpidSSL/clientts.jks";  
String truststore_password="123456";  
String keystore_File_Path="D:/QpidSSL/clientks.jks";  
String keystore_Password="123456";  
System.setProperty("javax.net.ssl.keyStore",keystore_File_Path);   
System.setProperty("javax.net.ssl.keyStorePassword",keystore_Password);   
System.setProperty("javax.net.ssl.trustStore",truststore_File_Path);   
System.setProperty("javax.net.ssl.trustStorePassword",truststore_password);  

那么该如何创建SSLContext的对象呢?

#1 首先大家来看一下客户端API的调用

                String truststore_File_Path="D:/QpidSSL/clientts.jks";
		String truststore_password="123456";
		String keystore_File_Path="D:/QpidSSL/clientks.jks";
		String keystore_Password="123456";
		String  aliasPassword="123456";
		SSLFactory sslFactory=new SSLFactory(keystore_File_Path,keystore_Password,truststore_File_Path,truststore_password,aliasPassword);
		try {
			SSLContext sslContext=sslFactory.buildSSLContext();
			CustomTransportSupport.mapSSLContext.put("amqps://stevenGu:5674", sslContext);
		} catch (UnrecoverableKeyException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (KeyManagementException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (KeyStoreException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (NoSuchAlgorithmException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (CertificateException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

#2 SSLFactory的代码如下

package com.test.amqp.ssl.sslcontext;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.util.Arrays;

import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;

public class SSLFactory {
	private String keystorePath;
	private String keystorePassword;
	private String trustStorePath;
	private String trustStorePassword;
	private String aliasPassword;
	public SSLFactory(String keystorePath,String keystorePassword,String trustStorePath,String trustStorePassword,String aliasPassword){
		this.keystorePath=keystorePath;
		this.keystorePassword=keystorePassword;
		this.trustStorePath=trustStorePath;
		this.trustStorePassword=trustStorePassword;
		this.aliasPassword=aliasPassword;
	}
	private SSLContext getSSLContext() throws NoSuchAlgorithmException {
        SSLContext c = null;

        // pick the first protocol available, preferring TLSv1.2, then TLSv1,
        // falling back to SSLv3 if running on an ancient/crippled JDK
        for(String proto : Arrays.asList("TLSv1.2", "TLSv1", "SSLv3")) {
            try {
                c = SSLContext.getInstance(proto);
                return c;
            } catch (NoSuchAlgorithmException x) {
                // keep trying
            }
        }
        throw new NoSuchAlgorithmException();
    }
	public SSLContext buildSSLContext() throws KeyStoreException, NoSuchAlgorithmException, CertificateException, FileNotFoundException, 
	IOException, UnrecoverableKeyException, KeyManagementException{
		
		 KeyStore ks = KeyStore.getInstance("JKS");
         ks.load(new FileInputStream(keystorePath), keystorePassword.toCharArray());
         KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
         kmf.init(ks, aliasPassword.toCharArray());
		
		 KeyStore tks = KeyStore.getInstance("JKS");
         tks.load(new FileInputStream(trustStorePath), trustStorePassword.toCharArray());
         TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
         tmf.init(tks);
         
         SSLContext c = getSSLContext();
         c.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
         
         return c;
	}
}

是不是瞬间感觉高大上了,原来我们自己也能获得SSLContext的对象了。


版权声明:本文为博主原创文章,未经博主允许不得转载。

java SSLContext

1. 什么是SSLSocket JDK文档指出,SSLSocket扩展Socket并提供使用SSL或TLS协议的安全套接字。 这种套接字是正常的流套接字,但是它们在基础网络传输协议(如TCP)上添...

php结合redis实现高并发下的抢购、秒杀功能

本文转自http://blog.csdn.net/nuli888/article/details/51865401 抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个: 1 高并发...

PHP数据结构之九 PHP储存二叉树,二叉树的创建与二叉树的基本操作 遍历二叉树算法

二叉树的创建及基本操作 PHP储存二叉树,二叉树的创建与二叉树的基本操作 遍历二叉树算法 /** *二叉树的创建及基本操作 * *1.构造方法,初始化建立二叉树 *2.按先序遍历方式建...
  • nuli888
  • nuli888
  • 2016年08月08日 16:31
  • 1150

[4]AMQP(高级消息队列协议) ----改造QPID JMS-0.9 API 对 SSLContext的 支持

默认情况下QPID JMS-0.9 API对SSLConext没有提供相应的接口. 但是在笔者项目中,又需要其对SSLContext对象的支持。这个问问深深的难住了笔者2~3天时间,笔者通过深入的研究...

[2]AMQP(高级消息队列协议) ----QPID不得不说的事

如果说到AMQP协议,则不得不提的就是QPID。QPID的论坛现在十分的活跃,基本上白天提的问题,晚上马上就能得到回复。由此可见QPID的活跃程度。 大家可以到http://qpid.2158936....

[1]AMQP(高级消息队列协议) ----入门

接触AMQP协议已经有一段时间了,这个协议比想象的中的要复杂一些,特别是针对AMQP-1-0以前的版本。具体的概念,网上可以搜索到很多的资料,本文借花献佛,让读者对AMQP协议有一个大概的了解。重点是...

[3]AMQP(高级消息队列协议) ----QPID JMS-0.9 API 对 SSL 的支持

QPID JMS-0.9 Java的API 版本只支持 AMQP-1-0的协议,那么如何用QPID JMS-0.9 Java的API 去调用QPID的基于SSL的端口的服务呢。一般来说有两种方式,后面...

消息队列基础 RabbitMQ与AMQP协议详解——超大规模高可用OpenStack核心技术深入解析系列(二)

编者按: OpenStack已经在很多大型企业里支撑起核心生产业务,这都源于OpenStack中的核心技术与架构,超大规模高可用OpenStack平台核心技术深入解析系列文章,主要介绍了Easy...

Python通过amqp消息队列协议中的Qpid实现数据通信

简介:     这两天看了消息队列通信,打算在配置平台上应用起来。以前用过zeromq但是这东西太快了,还有就是rabbitmq有点大,新浪的朋友推荐了qpid,简单轻便。自己总结了下文档,大家...
  • Raysen
  • Raysen
  • 2014年08月08日 02:05
  • 1002

php amqp消息队列教程1-代码实现实例

两年前曾发过一篇《用Python尝试RabbitMQ》,没想到两年后的今天,基于PHP的amqp资料还是少得可怜,原来的几个扩展也都一个个被废弃,只剩amqp还健在,且被PECL收录。虽说被收录,可官...
  • clh604
  • clh604
  • 2014年02月12日 14:46
  • 5276
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[5]AMQP(高级消息队列协议) ----如何创建自己的SSLContext对象
举报原因:
原因补充:

(最多只允许输入30个字)