首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在TLS1.2上创建ActiveMQ连接

在TLS1.2上创建ActiveMQ连接
EN

Stack Overflow用户
提问于 2016-04-26 16:13:42
回答 1查看 2.5K关注 0票数 1

我们必须删除SSLV3支持。所以我们改变了activemq的配置。我们添加了transportConnector并设置了enabledProtocol='TLS1.1,TLS1.2‘。所以它应该支持TLS1.1或TLS1.2,但我不知道在创建连接时应该如何指定协议。现在它给了我错误,SSLV2Hello是禁用的。因此,我的问题是,在创建连接时,应该如何给出协议列表。我试过了,SSLSocket,但没能通过。谁能给我个提示吗..。

代码语言:javascript
复制
String keyStorePath = "abc.ks";
String keyStorePassword = "XYZ";
String trustStore = "cks.ts";                     
java.lang.System.setProperty("javax.net.ssl.keyStore", keyStorePath);
java.lang.System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
java.lang.System.setProperty("javax.net.ssl.trustStore", trustStore);
String connectionURL = 'URL?initialReconnectDelay=10&maxReconnectDelay=10&maxReconnectAttempts=2&jms.watchTopicAdvisories=false&wireFormat.maxInactivityDuration=3600000';

ConnectionFactory factory = new ActiveMQSslConnectionFactory(connectionURL);
Connection connection = factory.createConnection(user, pwd);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-14 07:05:36

终于对我起作用了。

代码语言:javascript
复制
String keyStorePassword = "123456";   
String configPath = "C:\\ssl\\";  
String keyStorePath = configPath + "client.ks";  
KeyStore ks = KeyStore.getInstance("jks");  
String trustStore = configPath + "trust.ts";  
java.lang.System.setProperty("javax.net.ssl.trustStore", trustStore);
java.lang.System.setProperty("javax.net.ssl.trustStorePassword", keyStorePassword);

            InputStream ksIs = new FileInputStream(keyStorePath);
            try {
                ks.load(ksIs, keyStorePassword.toCharArray());
            } finally {
                if (ksIs != null) {
                    ksIs.close();
                }
            }
            KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
            kmf.init(ks, keyStorePassword.toCharArray());

            TrustManager[] trustAllCerts = new TrustManager[] {
                    new X509TrustManager() {
                        public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
                        }

                        public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
                        }

                        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                            return null;
                        }
                    }
            };

            final SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
            ConnectionFactory factory = new ActiveMQSslConnectionFactory(URL);
            sslContext.init(kmf.getKeyManagers(), trustAllCerts, new SecureRandom());       
            SslContext context = new SslContext();
            context.setSSLContext(sslContext);
            SslContext.setCurrentSslContext(context);
            Connection connection = factory.createConnection(loginName, pwd);
            connection.start();         
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            MessageProducer nonPersistentProducer = session.createProducer(null);
            session.close();
            connection.close();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36870380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档