[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的对象了。


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

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

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

java SSLContext

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

RabbitMQ C AMQP client library

Introduction This is a C-language AMQP client library for use with AMQP serversspeaking protocol ve...
  • cssiqi
  • cssiqi
  • 2013年08月05日 15:22
  • 1041

RabbitMQ之Publish/Subscribe

在这部分我们将做一些完全不一样的事情—我们将分发消息到多个消费者。这种模式被称作”publish/subscribe”。为了阐明这种模式,我们打算创建一个简单的日志系统。它将由两部分程序组成—第一部分...
  • quan20111992
  • quan20111992
  • 2017年10月13日 15:52
  • 143

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

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

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

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

AMQP介绍

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。 AMQP的主要特征是面向消息、队列、路由(包括点...
  • zhangxinrun
  • zhangxinrun
  • 2011年06月14日 00:09
  • 3208

AmqpTemplate-简介

文章来源:http://blog.csdn.net/sn_gis/article/details/41207373 目录(?)[+]     就像Spring Framewor...
  • aosica321
  • aosica321
  • 2016年12月15日 17:22
  • 1511

消息队列之JMS和AMQP对比

AMQP & JMS对比 初次接触消息队列时,在网上搜索,总是会提到如JMS、AMQP等一些术语。查看了一些文档,对JMS和AMQP的一些理解记录如下。 JMS          通常而言提到J...
  • hpttlook
  • hpttlook
  • 2014年04月10日 23:00
  • 6431

AMQP协议简介(源自官网的翻译)

RabbitMQ是基于AMQP协议的消息中间件,在官网的扩展以及中文的资料中,也有相应的介绍,因为翻译的实在是过于细节,本人继续在整理也没有更好的作用了,所以直接给转载过来了,感谢翻译者。...
  • mx472756841
  • mx472756841
  • 2016年03月06日 22:27
  • 1013
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[5]AMQP(高级消息队列协议) ----如何创建自己的SSLContext对象
举报原因:
原因补充:

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