1. 程式人生 > >ActiveMQ SSL應用之五 Spring+ActiveMQ開啟SSL連線

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">
            <!-- activeMQ url -->
            <property
name="brokerURL" value="tcp://127.0.0.1:61616?wireFormat.maxInactivityDurationInitalDelay=30000" />
</bean> </property> <property name="maxConnections" value="100"></property> </bean>

修改後配置資訊為:

<!-- 配置activeMq 連線池 -->
<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
destroy-method="stop">
<property name="connectionFactory"> <bean class="org.apache.activemq.ActiveMQSslConnectionFactory"> <!-- activeMQ url --> <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加上設定證書的路徑,如上所示。