Quantcast
Viewing latest article 30
Browse Latest Browse All 87

Connect with RabbitMq queue with ssl from java 6

I have a problem connecting with connecting to a Rabbit queue...Unfortunately this is a very old project and it has to be run on Java 1.6.

this is my class:

import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.QueueingConsumer;import org.apache.log4j.Logger;import org.bouncycastle.jce.provider.BouncyCastleProvider;import org.bouncycastle.jsse.provider.BouncyCastleJsseProvider;import javax.net.ssl.KeyManagerFactory;import javax.net.ssl.SSLContext;import javax.net.ssl.TrustManagerFactory;import java.io.FileInputStream;import java.io.IOException;import java.security.KeyStore;import java.security.SecureRandom;import java.security.Security;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class RabbitMqListenerTest {    private static Logger log = Logger.getLogger(RabbitMqListenerTest.class);;    private final Consumer<String> consumer;    private final RabbitMqConnectionConfig rabbitMqConnectionConfig;    static {        Security.addProvider(new BouncyCastleProvider());        Security.addProvider(new BouncyCastleJsseProvider());    }    public RabbitMqListenerTest(Consumer<String> consumer, RabbitMqConnectionConfig rabbitMqConnectionConfig) {        this.consumer = consumer;        this.rabbitMqConnectionConfig = rabbitMqConnectionConfig;    }    public void startConnection() throws IOException, InterruptedException {        ExecutorService executor = Executors.newSingleThreadExecutor();        executor.execute(new Runnable() {            public void run() {                connect();            }        });        executor.shutdown();    }    private void connect() {        ConnectionFactory factory = new ConnectionFactory();        factory.setHost(rabbitMqConnectionConfig.getHost());        factory.setPort(rabbitMqConnectionConfig.getPort());        factory.setUsername(rabbitMqConnectionConfig.getUsername());        factory.setPassword(rabbitMqConnectionConfig.getPassword());        factory.setVirtualHost(rabbitMqConnectionConfig.getVirtualHost());        if (rabbitMqConnectionConfig.getSslCertPath() != null) {            try {                configureSSLSocketFactory(rabbitMqConnectionConfig.getSslCertPath(), factory);            } catch (Exception e) {                throw new RuntimeException(e);            }        }        String queueName = rabbitMqConnectionConfig.getQueueName();        log.info("Starting connection attempt to queue:" + queueName);        Connection connection;        QueueingConsumer consumer = null;        try {            log.info("Setting connection...");            connection = factory.newConnection();            Channel channel;            channel = connection.createChannel();            channel.queueDeclare(queueName, true, false, false, null);            consumer = new QueueingConsumer(channel);            channel.basicConsume(queueName, true, consumer);        } catch (Exception e) {            log.error("Error when connecting to queue: " + queueName);            e.printStackTrace();            return;        }        while (true) {            try {                QueueingConsumer.Delivery delivery = consumer.nextDelivery();                String message = new String(delivery.getBody(), "UTF-8");                this.consumer.accept(message);            } catch (Exception e) {                log.error("Error when consuming a message from " + queueName);            }        }    }    private void configureSSLSocketFactory(String keystorePath, ConnectionFactory factory) throws Exception {        KeyStore keyStore = KeyStore.getInstance("JKS");        FileInputStream keystoreFile = new FileInputStream(keystorePath);        keyStore.load(keystoreFile, rabbitMqConnectionConfig.getKeystorePassword().toCharArray());        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());        keyManagerFactory.init(keyStore, rabbitMqConnectionConfig.getKeystorePassword().toCharArray());        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("PKIX", "BCJSSE");        trustManagerFactory.init(keyStore);        SSLContext sslContext = SSLContext.getInstance("TLS", "BCJSSE");        sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom());        factory.useSslProtocol(sslContext);    }}

I have stucked.I receive an error:

15:08:27,683 ERROR [STDERR]org.bouncycastle.tls.TlsFatalAlertReceived: insufficient_security(71)15:30:21,555 ERROR [STDERR] atorg.bouncycastle.tls.TlsProtocol.handleAlertMessage(Unknown Source)15:30:21,555 ERROR [STDERR] atorg.bouncycastle.tls.TlsProtocol.processAlertQueue(Unknown Source)15:30:21,555 ERROR [STDERR] atorg.bouncycastle.tls.TlsProtocol.processRecord(Unknown Source)15:30:21,556 ERROR [STDERR] atorg.bouncycastle.tls.RecordStream.readRecord(Unknown Source)15:30:21,556 ERROR [STDERR] atorg.bouncycastle.tls.TlsProtocol.safeReadRecord(Unknown Source)15:30:21,556 ERROR [STDERR] atorg.bouncycastle.tls.TlsProtocol.blockForHandshake(Unknown Source)15:30:21,557 ERROR [STDERR] atorg.bouncycastle.tls.TlsClientProtocol.connect(Unknown Source)15:30:21,557 ERROR [STDERR] atorg.bouncycastle.jsse.provider.ProvSSLSocketDirect.startHandshake(UnknownSource) 15:30:21,557 ERROR [STDERR] atorg.bouncycastle.jsse.provider.ProvSSLSocketDirect.handshakeIfNecessary(UnknownSource) 15:30:21,558 ERROR [STDERR] atorg.bouncycastle.jsse.provider.ProvSSLSocketDirect$AppDataOutput.write(UnknownSource) 15:30:21,558 ERROR [STDERR] atjava.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)15:30:21,558 ERROR [STDERR] atjava.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)15:30:21,559 ERROR [STDERR] atjava.io.DataOutputStream.flush(DataOutputStream.java:106) 15:30:21,559ERROR [STDERR] atcom.rabbitmq.client.impl.SocketFrameHandler.sendHeader(SocketFrameHandler.java:121)15:30:21,559 ERROR [STDERR] atcom.rabbitmq.client.impl.SocketFrameHandler.sendHeader(SocketFrameHandler.java:126)15:30:21,559 ERROR [STDERR] atcom.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:293)15:30:21,560 ERROR [STDERR] atcom.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:516)15:30:21,560 ERROR [STDERR] atcom.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:533)15:30:21,560 ERROR [STDERR] atpl.sygnity.rabbit.utils.RabbitMqListener.connect(RabbitMqListener.java:72)15:30:21,560 ERROR [STDERR] atpl.sygnity.rabbit.utils.RabbitMqListener.access$000(RabbitMqListener.java:22)15:30:21,561 ERROR [STDERR] atpl.sygnity.rabbit.utils.RabbitMqListener$1.run(RabbitMqListener.java:43)15:30:21,561 ERROR [STDERR] atjava.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)15:30:21,561 ERROR [STDERR] atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)15:30:21,562 ERROR [STDERR] atjava.lang.Thread.run(Thread.java:662)

I use BouncyCastle:

<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.68</version></dependency><dependency><groupId>org.bouncycastle</groupId><artifactId>bcpkix-jdk15on</artifactId><version>1.68</version></dependency>

Do I miss something?keyStore looks ok:Its type is jks

mykey, 2025-04-01, trustedCertEntry,(SHA1): 25:C6:61:E6:6A:02:39:91:4F:29:11:2A:5E:F9:7B:A6:F8:71:24:A4

when I go to mq rabbit, and print status,Interface: 0.0.0.0, port: 5671, protocol: amqp/ssl, purpose: AMQP 0-9-1 and AMQP 1.0 over TLS

when I inspect rabbit with openssl s_client -connect :

I receive:

Can't use SSL_get_servernamedepth=0 C = AU, ST = ASP, L = VIT, O = Comp, OU = DCL, CN = localhost, emailAddress = maili@comp.comverify error:num=18:self signed certificateverify return:1...6/HQmL3DK7Rwp0mhkTmv44zm3akVYYnNpvwVU7OLHw7svyeVgDAG51WXdM3a/6a7eRclcQaixi6oXfHDcejTmvTNulYzddj/8m8hjgKPinz/rMskihy1zOU=-----END CERTIFICATE-----subject=C = AU, ST = ASP, L = VIT, O = Comp, OU = DCL, CN = localhost, emailAddress = maili@comp.com

issuer=C = C = AU, ST = ASP, L = VIT, O = Comp, OU = DCL, CN = localhost, emailAddress = maili@comp.com

No client certificate CA names sentPeer signing digest: SHA256Peer signature type: RSA-PSSServer Temp Key: X25519, 253 bits

SSL handshake has read 1557 bytes and written 373 bytesVerification error: self signed certificate

New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384Server public key is 2048 bitSecure Renegotiation IS NOT supportedCompression: NONEExpansion: NONENo ALPN negotiatedEarly data was not sentVerify return code: 18 (self signed certificate)

closed

Is it a problem with certificate? Or the Java6 in the application? maybe both?I would appreciate if someone could help.

PS. Upgrading java is not an option.


Viewing latest article 30
Browse Latest Browse All 87

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>