简体   繁体   English

配置 Java 系统日志客户端以信任自签名证书

[英]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.我正在评估使用CloudBees Java 系统日志客户端读取日志文件并将其内容发送到我已经构建的系统日志接收器。

My understanding is that its TcpSyslogMessageSender can be used to send messages over TLS using SSL certificates.我的理解是,它的TcpSyslogMessageSender可用于使用 SSL 证书通过 TLS 发送消息。 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?但是我在任何地方都看不到任何“信任”配置,这让我想知道这个库是否完全支持自签名(非 CA 签名)证书?

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?如果另一端的 syslog 接收器向该客户端提供自签名证书,我如何配置TcpSyslogMessageSender以信任它?

Create SSLcontext and set it in TcpSyslogMessageSender创建 SSLcontext 并在 TcpSyslogMessageSender 中设置

For building ssl context I used org.apache.httpcomponents:httpcore because building ssl context with java tools is more difficult 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");
        }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM