配置 Java syslog 客户端以信任自签名证书

时间:2021-02-12 14:12:11

标签: java ssl syslog cloudbees

我正在评估使用 CloudBees Java syslog client 读取日志文件并将其内容发送到我已经构建的系统日志接收器。

我的理解是它的 TcpSyslogMessageSender 可用于使用 SSL 证书通过 TLS 发送消息。但是我在任何地方都没有看到任何“信任”配置,这让我想知道这个库是否支持自签名(非 CA 签名)证书?

如果我的 syslog 接收器在另一端向此客户端提供自签名证书,我该如何配置 TcpSyslogMessageSender 以信任它?

1 个答案:

答案 0 :(得分:2)

创建 SSLcontext 并在 TcpSyslogMessageSender 中设置

为了构建 ssl 上下文我使用了 org.apache.httpcomponents:httpcore 因为用 java 工具构建 ssl 上下文比较困难

示例

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