ActiveMQ SSL应用之使用原因、思路、生成**和证书
为啥要使用SSL
ActiveMQ普通的TCP连接方式,报文在网络中是以明文方式传输的,出于安全的考虑,为了确保报文数据在网络传输过程中不会被截取及窃听,需要使用密文传输,MQ本身是支持SSL加密方式的,开启SSL配置即可满足这一需求,并且不需要修改任何业务代码,加密算法本篇以RSA为例。
SSL应用思路
1、使用keytool工具生成RSA**和证书文件。
2、ActiveMQ配置文件修改,开启SSL连接器。
3、编写Java Demo类对SSL连接方式进行验证。
4、使用wireshark对报文进行网络抓包分析。
5、Spring+ActiveMQ使用SSL的方案。
6、Tomcat容器环境中使用SSL连接ActiveMQ。
7、Jboss容器环境中使用SSL连接ActiveMQ。
8、ActiveMQ管理页面,进行报文发送(明文传输),验证是否能正常使用。
以上是ActiveMQ如何学习SSL应用的整体思路,涵盖了SSL服务端的修改和客户端的操作,包括项目中结合Spring框架的应用场景,以及常用Web容器环境下的应用场景,最后是实际生产环境运维中,开启SSL对ActiveMQ管理页面常用操作是否会产生影响的验证。
使用keytool工具生成**和证书文件
使用java自带的keytool工具生成RSA的**、证书文件;
1>、生成服务端私钥,并导入到服务端keyStore文件中,此操作生成broker1.ks文件,保存服务端私钥,供服务端使用。
在命令行输入:keytool -genkey -alias allen -keyalg RSA -keyStore broker1.ks
此时会生成:broker1.ks文件
2> 根据服务端私钥导出服务端证书,此操作生成broker_cert文件,该文件为服务端的证书。
在命令行输入:keytool -export -alias allen -keyStore broker1.ks -file broker_cert
要求输入刚刚创建的**文件的密码
3>导入服务端证书到客户端的Trust keyStore中。此操作生成client.ts文件,保存服务端证书,供客户端使用。即把第2步生成的broker_cert文件生成client.ts文件:因为mq的有client.ts文件因此生成client1.ts
在命令行输入:keytool -import -alias allen -keystore client1.ts -file broker_cert
4>生成客户端私钥,并且导入到客户端keyStore文件中,此操作生成client1.ks文件,保存客户端私钥,供客户端使用。
在命令行输入:keytool -genkey -alias client -keyalg RSA -keyStore client1.ks
5>根据客户端私钥导出客户端证书。
在命令行输入:keytool -export -alias client -keystore client1.ks -file client_cert
6>导入客户端证书到服务端的Trust keyStore中,此操作生成broker1.ts文件,保存客户端证书,供服务端使用。
在命令行输入:keytool -import -alias client -keystore broker1.ts -file client_cert
共生成6个文件,**和证书的存放位置
Server端需要:
1.keyStore 保存服务端的私钥:broker1.ks文件
2.Trust keyStore 保存客户端的授权证书: broker1.ts文件
Client端需要:
1.keyStore 保存客户端的私钥: client1.ks文件
2.Trust keyStore 保存服务端的授权证书: client1.ts文件
在本例子,Server端指的是ActiveMQ目录,Client端指的是Java Demo类、Tomcat容器、Jboss容器。
注意事项:
1、ActiveMQ自带了**和证书文件,在ACTIVE_HOME/conf目录下,命名为broker.ks,client.ks等,**密码为password,但这几个文件我在使用时发现会出现null certchain错误。
2、生成文件的命名问题,原则上可以随意命名,为了方便还是建议区分一个服务端和客户端文件,这里为了不与ActiveMQ自带文件冲突,命名成了broker1.ks,client1.ks。