1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
/**
* ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
* Copyright © 2018 AT&T Intellectual Property. All rights reserved.
* Copyright © 2018 European Software Marketing Ltd.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============LICENSE_END=========================================================
*/
package org.onap.aai.event.client;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.util.ArrayList;
import java.util.List;
import javax.naming.ConfigurationException;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;
import com.rabbitmq.client.Address;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DefaultSaslConfig;
public class RabbitMqUtils {
private static ConnectionFactory factory = new ConnectionFactory();
/**
* (intended for testing purpose only)
* @param connFactory
*/
static void setConnectionFactory(ConnectionFactory connFactory) {
factory = connFactory;
}
public static Connection createConnection(RabbitMqClientConfig config) throws Exception {
if (config.getHosts() == null) {
throw new ConfigurationException("Mandatory config param hosts not set");
}
List<Address> addresses = new ArrayList<Address>();
String[] hosts = config.getHosts().split(",");
for (String host : hosts) {
String[] parts = host.split(":");
if (parts.length != 2) {
throw new ConfigurationException("Hosts must be specified in 'host:port' format");
}
int port = Integer.parseInt(parts[1]);
Address add = new Address(parts[0], port);
addresses.add(add);
}
if (config.getUsername() == null && !config.getEnableSsl()) {
throw new ConfigurationException("Mandatory config param username not set");
}
factory.setUsername(config.getUsername());
if (config.getPassword() == null && !config.getEnableSsl()) {
throw new ConfigurationException("Mandatory config param password not set");
}
factory.setPassword(config.getPassword());
if (config.getVirtualHost() != null) {
factory.setVirtualHost(config.getVirtualHost());
}
checkSSL(factory,config);
factory.setConnectionTimeout(120000);
if (config.getConnectionTimeout() != null) {
try {
int timeout = Integer.parseInt(config.getConnectionTimeout());
factory.setConnectionTimeout(timeout);
} catch (NumberFormatException ex) {
}
}
return factory.newConnection(addresses);
}
private static void checkSSL(ConnectionFactory factory, RabbitMqClientConfig config) throws Exception {
// Check if any of SSL params is configured
if (config.getEnableSsl()) {
if (config.getSslKeyStoreFile() == null || config.getSslKeyStorePassword() == null
|| config.getSslTrustStoreFile() == null || config.getSslTrustStorePassword() == null) {
throw new ConfigurationException(
"Missing SSL configuration : sslKeyStoreFile , sslKeyStorePassword , sslTrustStorePassword or sslTrustStoreFile");
}
char[] keyPassphrase = config.getSslKeyStorePassword().toCharArray();
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(new FileInputStream(config.getSslKeyStoreFile()), keyPassphrase);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, keyPassphrase);
char[] trustPassphrase = config.getSslTrustStorePassword().toCharArray();
KeyStore tks = KeyStore.getInstance("JKS");
tks.load(new FileInputStream(config.getSslTrustStoreFile()), trustPassphrase);
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(tks);
SSLContext c = SSLContext.getInstance("TLSv1.2");
c.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
factory.setSaslConfig(DefaultSaslConfig.EXTERNAL);
factory.useSslProtocol(c);
}
}
}
|