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

Posted

技术标签:

【中文标题】将 Java syslog 客户端配置为信任自签名证书【英文标题】:Configuring a Java syslog client to trust self-signed certificates 【发布时间】:2021-02-12 14:12:11 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

创建 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");
        

【讨论】:

您也可以尝试使用 vm 参数设置信任库 -Djavax.net.ssl.trustStore=/path/to/truststore -Djavax.net.ssl.trustStorePassword=password 或者您可以将证书添加到默认信任库 - /jre_home/lib/security/cacerts(默认密码 changeme),但它为整个应用程序设置证书,而且我认为使用代码的方式是最好的,因为它是明确的 Nit:默认的 cacerts 密码是 changeit(不是我)

以上是关于将 Java syslog 客户端配置为信任自签名证书的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自签名证书创建密钥库和信任库?

如何信任 Android 上的自签名证书?

WCF 自签名证书在客户端上不受信任

如何使用 node-opcua 客户端信任自签名服务器证书

在调用 Web 服务时信任过期的自签名证书

在 Windows 7 上信任 Java 7 的自签名证书