配置 ActiveMQ 使用 SSL 连接

一、技术背景

SSL(Secure Sockets Layer 安全套接层)及其继任者TLS(TransportLayer Security传输层安全)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。

 

JSSE(Java Security Socket Extension)解决方案由SUN推出,实现了SSL和TLS协议。在JSSE中包含了数据加密,服务器验证,消息完整性和客户端验证等技术。通过使用JSSE,开发人员可以在客户机和服务器之间通过TCP/IP协议安全地传输数据。

 

SSL消息认证方式有两种:单向认证、双向认证。

此配置文档使用双向认证的方式。

 

为了实现消息认证,使用Java自带的 keytool 命令可以生成以上密钥及证书文件,首先生成密钥及证书信任文件。

Server需要:

1)KeyStore:保存服务端的私钥;

2)Trust KeyStore:保存客户端的授权证书

Client需要:

1)KeyStore:保存客户端的私钥;

2)Trust KeyStore:保存服务端的授权证书

 

二、生成证书文件

1、生成服务端私钥,并导入服务端KeyStore文件中

此操作生成broker.ks文件,保存服务端私钥,服务端使用。

命令:keytool-genkey -alias broker -keyalg RSA -keystore broker.ks

【以下内容根据实际情况填写,方括号中内容为默认值】

输入密钥库口令:   (…口令1…)

再次输入新口令:   (…口令1…)

您的名字与姓氏是什么?

 [Unknown]:

您的组织单位名称是什么?

 [Unknown]:

您的组织名称是什么?

 [Unknown]:

您所在的城市或区域名称是什么?

 [Unknown]:  Beijing

您所在的省/市/自治区名称是什么?

 [Unknown]:

该单位的双字母国家/地区代码是什么?

 [Unknown]:  CN

CN=Unknown, OU=Unknown, O=Unknown,L=Beijing, ST=Unknown, C=CN是否正确?

 [否]:  是

 

输入 <broker>的密钥口令

        (如果和密钥库口令相同, 按回车):

 

2、根据服务端私钥导出服务端证书

此操作生成 broker_cert文件,该文件为服务端的证书。

命令:keytool -export -alias broker-keystore broker.ks -file broker_cert

【此处需要输入服务端密钥库口令】(…口令1…)

 

3、导入服务端证书到客户端的Trust KeyStore

此操作生成 client.ts文件,保存服务端证书,供客户端使用

命令:keytool -import -alias broker-keystore client.ts -file broker_cert

【此处需要输入密钥库口令】(…口令2…)

 

4、生成客户端私钥,并且导入到客户端KeyStore文件中

此操作生成 client.ks文件,保存客户端私钥,供客户端使用。

命令:keytool -genkey -alias client-keyalg RSA -keystore client.ks

【以下内容根据实际情况填写,方括号中内容为默认值】

输入密钥库口令:   (…口令3…)

再次输入新口令:   (…口令3…)

您的名字与姓氏是什么?

  [Unknown]:

您的组织单位名称是什么?

  [Unknown]:

您的组织名称是什么?

  [Unknown]:

您所在的城市或区域名称是什么?

  [Unknown]:

您所在的省//自治区名称是什么?

  [Unknown]:

该单位的双字母国家/地区代码是什么?

  [Unknown]: CN

CN=Unknown,OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN是否正确?

  []: 

 

输入<client>的密钥口令

        (如果和密钥库口令相同,按回车):

 

5、根据客户端私钥导出客户端证书

此操作生成 client_cert文件,该文件为客户端的证书。

命令:keytool -export -alias client-keystore client.ks -file client_cert

【此处需要输入客户端密钥库口令】(…口令3…)

 

6、导入客户端证书到服务端的Trust KeyStore

此操作生成 broker.ts文件,保存客户端证书,供服务端使用

命令:keytool -import -alias client -keystore broker.ts -file client_cert

【此处需要输入密钥库口令】(…口令4…)

 

三、服务端(ActiveMQ)配置

1、  将生成的文件 broker.ks、broker.ts复制到 ${activemq.base}/conf 目录下。

2、  打开 activemq.xml 文件,修改 transportConnectors节点内容为 SSL 连接

修改前:

<transportConnectors>

   <transportConnector

name="openwire"

uri="tcp://0.0.0.0:3002"/>

</transportConnectors>

修改为:

<sslContext>

<sslContext

keyStore="file:${activemq.base}/conf/broker.ks"

keyStorePassword="【口令1"

trustStore="file:${activemq.base}/conf/broker.ts"

trustStorePassword="【口令4"/>

</sslContext>

<transportConnectors>

<transportConnector

name="ssl"

uri="ssl://0.0.0.0:3002?needClientAuth=true" />

</transportConnectors>

 

四、客户端(Tomcat)配置

1、  将生成的文件client.ts 、client.ks 复制到客户端主机

2、  增加Tomcat启动选项

Windows下打开 %TOMCAT_HOME%\bin目录下的catalina.bat 文件,

Linux下打开 %TOMCAT_HOME%\bin目录下的catalina.sh 文件

echo Using CATALINA_BASE: "%CATALINA_BASE%" 一行前加上

set JAVA_OPTS=%JAVA_OPTS% -Djavax.net.ssl.keyStore="client.ks的路径】" -Djavax.net.ssl.keyStorePassword="【口令3"-Djavax.net.ssl.trustStore="client.ts的路径】" -Djavax.net.ssl.trustStorePassword="【口令2"

 

3、  打开 context.xml 文件,修改 ActiveMQ 对应的Resource 节点配置

修改前:

<Resourceauth="Container" brokerName="localhostISUCONSOLE" 

brokerURL="failover://(tcp://localhost:3002)"

description="JMSConnection Factory"

factory="org.apache.activemq.jndi.JNDIReferenceFactory"

name="jms/consoleConnectionFactory"

type="org.apache.activemq.ActiveMQConnectionFactory"

useEmbeddedBroker="false"/>

修改后:

<Resourceauth="Container" brokerName="localhostISU"

brokerURL="failover://(ssl://localhost:3002)"

description="JMSConnection Factory"

factory="org.apache.activemq.jndi.JNDIReferenceFactory"

name="jms/ConnectionFactory"

type="org.apache.activemq.ActiveMQSslConnectionFactory"

useEmbeddedBroker="false"/>

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值