待整理

ActiveMQ使用SSL连接——单向认证

2017-04-29  本文已影响971人  MisterCH

网络上很多有关ActiveMQ使用SSL连接的文章,基本都是参考官网的配置,而后自己写出一个demo发现发送成功了就算实现了SSL。但是根据redhat关于ActiveMQ安全性的资料:
https://access.redhat.com/documentation/en-US/Fuse_ESB/4.3.1/html-single/Apache_ActiveMQ_Security_Guide/index.html
其实SSL协议是有单向和双向之分的。

单向SSL协议 双向SSL协议

单向和双向的主要区别是:

在ActiveMQ.xml中的配置项NeedClientAuth就是单向还是双向通信的开关。

附上单向通信时的java发送端demo

package com.icbc.dmqs;

import javax.jms.Connection;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQSession;
import org.apache.activemq.ActiveMQSslConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;

public class SSLexample {
    
    public static void main(String[] args) throws Exception {
        String trustStore = "client1.ts";
        String pass = "password";
        String url = "failover:(ssl://localhost:61617)";

        
        ActiveMQSslConnectionFactory connectionFactory = new ActiveMQSslConnectionFactory(url);
        connectionFactory.setTrustStore(trustStore);
        connectionFactory.setTrustStorePassword(pass);
        
        Connection connection = connectionFactory.createConnection();
        connection.start();
        
        ActiveMQSession session = (ActiveMQSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        ActiveMQQueue q = new ActiveMQQueue("test");
        MessageProducer producer = session.createProducer(q);
        
        TextMessage msg = session.createTextMessage();
        msg.setText("test");
        
        producer.send(msg);
        producer.close();
        session.close();
        connection.close();
    }
}

而此时我的broker端的activemq.xml中的配置为:

<sslContext>
    <sslContext keyStore="file:${activemq.base}/conf/broker1.ks"
                keyStorePassword="password"
                />
</sslContext>
<transportConnectors>
     <transportConnector name="ssl" uri="ssl://0.0.0.0:61617?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
</transportConnectors>

如果使用单向认证,那么客户端建议仍然使用密码+client.ts的方式来登录MQ,这样可以减少每个client上线时都需要配置broker.ts的工作量。

上一篇 下一篇

猜你喜欢

热点阅读