Skip to content

Commit 7e7b865

Browse files
author
Ruslan Gainutdinov
committed
Initial implementation of SSL over TCP capability.
1 parent c985201 commit 7e7b865

File tree

1 file changed

+45
-7
lines changed

1 file changed

+45
-7
lines changed

src/main/java/com/wizecore/graylog2/plugin/SyslogOutput.java

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,29 @@
22

33

44
import java.util.List;
5-
import java.util.logging.Logger;
65
import java.util.Map;
6+
import java.util.logging.Logger;
77

88
import javax.inject.Inject;
99

1010
import org.graylog2.plugin.Message;
1111
import org.graylog2.plugin.configuration.Configuration;
1212
import org.graylog2.plugin.configuration.ConfigurationRequest;
1313
import org.graylog2.plugin.configuration.fields.ConfigurationField;
14-
import org.graylog2.plugin.configuration.fields.NumberField;
15-
import org.graylog2.plugin.configuration.fields.TextField;
1614
import org.graylog2.plugin.configuration.fields.DropdownField;
15+
import org.graylog2.plugin.configuration.fields.TextField;
1716
import org.graylog2.plugin.outputs.MessageOutput;
1817
import org.graylog2.plugin.streams.Stream;
1918
import org.graylog2.syslog4j.Syslog;
2019
import org.graylog2.syslog4j.SyslogConfigIF;
2120
import org.graylog2.syslog4j.SyslogIF;
2221
import org.graylog2.syslog4j.impl.net.tcp.TCPNetSyslogConfig;
22+
import org.graylog2.syslog4j.impl.net.tcp.ssl.SSLTCPNetSyslogConfig;
2323
import org.graylog2.syslog4j.impl.net.udp.UDPNetSyslogConfig;
24+
import org.graylog2.syslog4j.server.impl.net.tcp.ssl.SSLTCPNetSyslogServerConfig;
2425

25-
import com.google.inject.assistedinject.Assisted;
2626
import com.google.common.collect.ImmutableMap;
27+
import com.google.inject.assistedinject.Assisted;
2728

2829

2930
/**
@@ -88,6 +89,37 @@ public SyslogOutput(@Assisted Stream stream, @Assisted Configuration conf) {
8889
} else
8990
if (protocol.toLowerCase().equals("tcp")) {
9091
config = new TCPNetSyslogConfig();
92+
} else
93+
if (protocol.toLowerCase().equals("tcp-ssl")) {
94+
SSLTCPNetSyslogConfig sslConfig = new SSLTCPNetSyslogConfig();
95+
String ks = conf.getString("keystore");
96+
String ksp = conf.getString("keystorePassword");
97+
String ts = conf.getString("truststore");
98+
String tsp = conf.getString("truststorePassword");
99+
100+
if (ts == null || ts.trim().equals("")) {
101+
ts = ks;
102+
}
103+
104+
if (tsp == null || ts.trim().equals("")) {
105+
tsp = ksp;
106+
}
107+
108+
if (ksp == null) {
109+
ksp = "";
110+
}
111+
112+
if (ks == null) {
113+
throw new IllegalArgumentException("Keystore not defined!");
114+
}
115+
116+
config = sslConfig;
117+
sslConfig.setKeyStore(ks);
118+
sslConfig.setKeyStorePassword(ksp);
119+
sslConfig.setTrustStore(ts);
120+
sslConfig.setTrustStorePassword(tsp);
121+
} else {
122+
throw new IllegalArgumentException("Unknown protocol: " + protocol);
91123
}
92124
config.setHost(host);
93125
config.setPort(port);
@@ -205,7 +237,7 @@ public static class Config extends MessageOutput.Config {
205237
public ConfigurationRequest getRequestedConfiguration() {
206238
final ConfigurationRequest configurationRequest = new ConfigurationRequest();
207239

208-
final Map<String, String> protocols = ImmutableMap.of("tcp", "tcp", "udp", "udp");
240+
final Map<String, String> protocols = ImmutableMap.of("tcp", "TCP", "udp", "UDP", "tcp-ssl", "SSL over TCP");
209241
configurationRequest.addField(new DropdownField(
210242
"protocol", "Message dispatch protocol", "tcp", protocols,
211243
"The protocol that should be used to send messages to the remote syslog server",
@@ -218,12 +250,18 @@ public ConfigurationRequest getRequestedConfiguration() {
218250
final Map<String, String> formats = ImmutableMap.of("plain", "plain", "structured", "structured", "cef", "cef", "full", "full");
219251
configurationRequest.addField(new DropdownField(
220252
"format", "Message format", "plain", formats,
221-
"Message format: plain,structured,cef,full.",
253+
"Message format. For detailed explanation, see https://github.com/wizecore/graylog2-output-syslog",
222254
ConfigurationField.Optional.NOT_OPTIONAL)
223255
);
224256

225-
226257
configurationRequest.addField(new TextField("maxlen", "Maximum message length", "", "Maximum message (body) length. Longer messages will be truncated. If not specified defaults to 16384 bytes.", ConfigurationField.Optional.OPTIONAL));
258+
259+
configurationRequest.addField(new TextField("keystore", "Key store", "", "Path to Java keystore (required for SSL over TCP). Must contain private key and cert for this client.", ConfigurationField.Optional.OPTIONAL));
260+
configurationRequest.addField(new TextField("keystorePassword", "Key store password", "", "", ConfigurationField.Optional.OPTIONAL));
261+
262+
configurationRequest.addField(new TextField("truststore", "Trust store", "", "Path to Java keystore (required for SSL over TCP). Optional (if not set, equals to key store). Must contain peers we trust connecting to.", ConfigurationField.Optional.OPTIONAL));
263+
configurationRequest.addField(new TextField("truststorePassword", "Trust store password", "", "", ConfigurationField.Optional.OPTIONAL));
264+
227265
return configurationRequest;
228266
}
229267
}

0 commit comments

Comments
 (0)