ActiveMQ SSL应用之五 Spring+ActiveMQ开启SSL连接

一、主要内容
实际项目经常使用到Spring框架,本篇主要介绍在Spring框架背景下,如何开启SSL连接ActiveMQ。

二、准备工作
1、client.ks,client.ts文件已经生成。
2、项目原有的spring+activemq已经能正常使用,并且使用的ConnectionFactory为ActiveMQConnectionFactory。
3、ActiveMQ端SSL已经正常开启。
此准备工作的详细操作可见上篇内容。

二、操作步骤
目的:将ActiveMQConnectionFactory替换为ActiveMQSslConnectionFactory,并将相应的配置参数加上,只需要更改Spring的相关配置文件即可。
1、将client.ks,client.ts拷贝到项目工程目录里,建议与Spring-ActiveMQ的配置文件放在同一目录下。
2、修改application.xml文件,ConnectionFactory改为org.apache.activemq.ActiveMQSslConnectionFactory,同时参数增加为:brokerURL、keyStore、trustStore、keyStorePassword、trustStorePassword,少一个都不行,以上5个参数,配置上相应的属性值(注意两个文件的访问路径)。
原有配置信息为:

<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
    destroy-method="stop">
    <property name="connectionFactory">
        <bean class="org.apache.activemq.ActiveMQConnectionFactory">
            
            <property name="brokerURL" value="tcp://127.0.0.1:61616?wireFormat.maxInactivityDurationInitalDelay=30000" />
        bean>
    property>
    <property name="maxConnections" value="100">property>
bean>

修改后配置信息为:


<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
    destroy-method="stop">
    <property name="connectionFactory">
        <bean class="org.apache.activemq.ActiveMQSslConnectionFactory">
            
            <property name="brokerURL" value="ssl://127.0.0.1:61617?wireFormat.maxInactivityDurationInitalDelay=30000" />
            <property name="keyStore" value="client1.ks " />
            <property name="trustStore" value="client1.ts" />
            <property name="keyStorePassword" value="asdfgh" />
            <property name="trustStorePassword" value="qwerty" />
        bean>
    property>
    <property name="maxConnections" value="100">property>
bean>

3、启动参数VM arguments加上:

-Djavax.net.ssl.KeyStore="E:/ssl/client1.ks" -Djavax.net.ssl.KeyStorePassword="asdfgh"  -Djavax.net.ssl.trustStore="E:/ssl/ client1.ts" -Djavax.net.ssl.trustStorePassword="qwerty"

启动完成后,打开ActiveMQ的管理控制台,正常情况下能看到SSL Connector有连接信息。

三、注意事项:
1、Eclipse项目中Spring框架配置ActiveMQ读取密钥和证书文件调用的是getResourceAsStream方法,所以项目中必须保存密钥和证书文件,程序才能正常读取到,放在项目以外的目录,程序启动时文件会读取失败,这点跟自己编写的Java Demo类有一点点的区别。
2、Eclipse设置jvm启动参数时,可以使用项目中保存的密钥、证书文件的路径 ,这里为了使命令更简短,另外引入了路径较短的文件。
3、抓报文操作略。

四、常见错误
错误信息:

PKIX path building failed:sun.security.provider.certpath.SunCertPathBuilderException:unable to find valid certification path to requested target

简单点说就是找不到证书文件。
问题原因:启动时不指定密钥和证书文件路径,加载文件错误,eclipse(maven+tomcat7)会报此错。
解决办法,启动参数VM arguments加上设置证书的路径,如上所示。

你可能感兴趣的:(应用框架,activemq,ssl,spring)