I am evaluating using the CloudBees Java syslog client to read a log file and send its contents off to a syslog receiver I've already built.
My understanding is that its TcpSyslogMessageSender
can be used to send messages over TLS using SSL certificates. However I don't see any "trust" configurations anywhere, which makes me wonder if self-signed (non-CA-signed) certificates are supported by this library at all?
If my syslog receiver on the other end presents this client with a self-signed certificate, how can I configure the TcpSyslogMessageSender
to trust it?
Create SSLcontext and set it in TcpSyslogMessageSender
For building ssl context I used org.apache.httpcomponents:httpcore because building ssl context with java tools is more difficult
Example
public class SyslogTestCloudBees {
public static void main(String[] args) throws IOException, CertificateException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
//Initialization
TcpSyslogMessageSender messageSender = new TcpSyslogMessageSender();
messageSender.setDefaultMessageHostname("myhostname");
messageSender.setDefaultAppName("myapp");
messageSender.setDefaultFacility(Facility.USER);
messageSender.setDefaultSeverity(Severity.INFORMATIONAL);
messageSender.setSyslogServerHostname("127.0.0.1");
messageSender.setSyslogServerPort(1234);
//SSL part
SSLContext sslContext = SSLContextBuilder.create()
.loadTrustMaterial(new File("path/to/truststore"),
"truststorepassword".toCharArray())
.build();
messageSender.setSSLContext(sslContext);
messageSender.setSsl(true);
// send a Syslog message
messageSender.sendMessage("This is a test message");
}
}