javasslsyslogcloudbees

Configuring a Java syslog client to trust self-signed certificates


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?


Solution

  • 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");
            }
    }