Activemq 使用 SSL

 activeqm 使用ssl 除了配置服务端外客户端连接的时候也需要使用ssl,网上的和官方的资料都比较散,因此收集到一起做写例子,共两个部分。第一部分是配置服务端,第二部分是客户端测试连接。

  http://activemq.apache.org/download.html

 先到官方下载activemq 目前版本是5.2.0,

 

 第一部分 配置服务端

 按官方http://activemq.apache.org/how-do-i-use-ssl.html

的4步分生成ks,和ts文件。

Also see Tomcat's SSL instructions for more info. The following was provided by Colin Kilburn. Thanks Colin!

  1. Using keytool, create a certificate for the broker:
    keytool -genkey -alias broker -keyalg RSA -keystore broker.ks
  2. Export the broker's certificate so it can be shared with clients:
    keytool -export -alias broker -keystore broker.ks -file broker_cert
  3. Create a certificate/keystore for the client:
    keytool -genkey -alias client -keyalg RSA -keystore client.ks
  4. Create a truststore for the client, and import the broker's certificate. This establishes that the client "trusts" the broker:
    keytool -import -alias broker -keystore client.ts -file broker_cert

     配置activemq.xml sslContext配好生成文件的路径和密码

   <sslContext keyStore="file:${activemq.base}/conf/broker.ks" keyStorePassword="pwd"            trustStore="file:${activemq.base}/conf/client.ts" trustStorePassword="pwd"/>

    配置ssl端口

<transportConnectors>

  <transportConnector name="ssl" uri="ssl://192.168.1.8:61617"/>

</transportConnectors>

 

启动 activemq  服务端配置完毕。

 

 

    第二部分是客户端测试连接。

    需要服务端生成的client.ks和client.ts文件

 

import java.io.FileInputStream;
import java.security.KeyStore;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;

import org.apache.activemq.ActiveMQSslConnectionFactory;

/**
 * @author xiaoming
 *
 */
public class SslProducer {

    // keystore client path
    private String keyStore = "E://client.ks";

    // truststore client path
    private String trustStore = "E://client.ts";

    private String keyStorePassword = "pwd";
   
    private String url = "ssl://192.168.1.8:61617";

    public void sendMessage(){
       
        Connection conn = null;
        Session session = null;
        Destination dest = null;
        MessageProducer prd = null;
       
        try{
            //实例化 ActiveMQSslConnectionFactory
            ActiveMQSslConnectionFactory sslConnectionFactory = new ActiveMQSslConnectionFactory();
            //设置连接
            sslConnectionFactory.setBrokerURL(url);
            //设置keystore client path 和 truststore client
            sslConnectionFactory.setKeyAndTrustManagers(getKeyManagers(keyStore, keyStorePassword), getTrustManagers(trustStore),
                                                        new java.security.SecureRandom());
            conn = sslConnectionFactory.createConnection();
            conn.start();
            session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
            dest = session.createQueue("testSsl");
            prd = session.createProducer(dest);
            Message msg = session.createTextMessage("test ssl send....");
            prd.send(msg);
            System.out.println("send success.............");
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            try{
            if(prd !=null){
                prd.close();
            }
            if(session !=null ){
                session.close();
            }
            if(conn!=null){
                conn.close();
            }
            }catch(JMSException jex){
                jex.printStackTrace();
            }
        }
       
       

    }

    private TrustManager[] getTrustManagers(String trustStore)
            throws java.security.NoSuchAlgorithmException,
            java.security.KeyStoreException, java.io.IOException,
            java.security.GeneralSecurityException {
        System.out.println("Initiating TrustManagers");

        KeyStore ks = KeyStore.getInstance("JKS");
        ks.load(new FileInputStream(trustStore), null);
        TrustManagerFactory tmf = TrustManagerFactory
                .getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(ks);

        System.out.println("Initiated TrustManagers");

        return tmf.getTrustManagers();
    }

    private KeyManager[] getKeyManagers(String keyStore, String keyStorePassword)
            throws java.security.NoSuchAlgorithmException,
            java.security.KeyStoreException,
            java.security.GeneralSecurityException,
            java.security.cert.CertificateException, java.io.IOException,
            java.security.UnrecoverableKeyException {
        System.out.println("Initiating KeyManagers");

        KeyStore ks = KeyStore.getInstance("JKS");
        ks.load(new FileInputStream(keyStore), keyStorePassword.toCharArray());
        KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory
                .getDefaultAlgorithm());
        kmf.init(ks, keyStorePassword.toCharArray());

        System.out.println("Initiated KeyManagers");

        return kmf.getKeyManagers();

    }

    public static void main(String[] args) {
        SslProducer sslProducer = new SslProducer();
        sslProducer.sendMessage();
    }

}

 

测试发送Message。。。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
ActiveMQ可以通过使用SSL(Secure Sockets Layer)来进行加密。使用SSL可以确保在客户端和ActiveMQ之间的通信是安全的,并防止敏感数据被窃听或篡改。为了实现ActiveMQ的加密,以下是一些步骤和方法: 1. 使用keytool工具生成RSA密钥和证书文件。 keytool是Java中用于管理密钥和证书的工具。通过生成RSA密钥和证书文件,可以为ActiveMQ配置SSL连接器所需的安全凭据。 2. 修改ActiveMQ的配置文件,启用SSL连接器。在ActiveMQ的配置文件中,可以配置SSL连接器并指定所需的密钥库和密码等信息。这样,ActiveMQ使用SSL进行加密和身份验证。 3. 编写Java Demo类进行SSL连接验证。可以编写一个Java程序来验证使用SSL连接ActiveMQ的功能。这可以包括创建连接、发布和订阅消息等操作,以确保SSL连接正常工作。 以上是一些使用SSL连接器加密ActiveMQ通信的基本步骤。此外,还有其他方法和方案可以使用SSL连接ActiveMQ,如使用Spring ActiveMQ和Tomcat容器环境,或者在Jboss容器环境中使用SSL连接ActiveMQ。还可以使用网络抓包工具如wireshark来进行报文分析,以确保数据在传输过程中是加密的。 参考资料: 提供了一个关于密码加密的博客链接,其中可能包含更多关于ActiveMQ加密的信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [activemq的密码加密](https://blog.csdn.net/qq_36399629/article/details/105992090)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [ActiveMQ SSL应用之使用原因、思路、生成密钥和证书](https://blog.csdn.net/zhuhaoyu6666/article/details/103279712)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值