2016-12-16 4 views
0

私はソケットアペンダを安全にしようとしています。 現在の構成は次のとおりです。log4j2セキュアなTCPソケットアペンダのプロパティファイル形式の設定

appender.socket.type = Socket 

appender.socket.name = SOCKET_APPENDER 

appender.socket.host = localhost 

appender.socket.port = 4712 

appender.socket.reconnectionDelayMillis = 10000 

私はそれにSSLコンフィグ(キーストアconfigおよびトラストストアの設定)を追加するにはどうすればよいですか?

+0

で「ソケット」のアペンダタイプとして「最新のSSLSocket」を使用しますが、ローカルホストと通信するときにSSLを使用する必要があるいくつかの理由がありますか? – pvg

+0

@pvg - ちょうどcomapnyのシステムのIPアドレスをここに入れたい気がしませんでした。そこで、localhostに置き換えました。 –

+0

最も単純なことはおそらくそれを外部化することです - 広範なセキュリティと管理パラメータを持つたくさんのオプション - ssh、stunnel、spipedなど – pvg

答えて

0

を追加することにより、作業それを持っていた:

appender.smswebstart.protocol = TCP 
appender.smswebstart.ssl.type = SSL 
appender.smswebstart.ssl.protocol = SSL 
appender.smswebstart.ssl.keystore.type=KeyStore 
appender.smswebstart.ssl.keystore.location=${ctx:location} 
appender.smswebstart.ssl.keystore.password=${ctx:password} 
appender.smswebstart.ssl.truststore.type=TrustStore 
appender.smswebstart.ssl.truststore.location=${ctx:location} 
appender.smswebstart.ssl.truststore.password=${ctx:password} 

これに伴う問題は、それが店の鍵はここにプレーンテキストでもできることがあります。 別の方法は、カスタムアペンダーを用意することです。

カスタムアペンダーの入手方法は次のとおりです。

@Plugin(
    name = "SSLSocket", 
    category = "Core", 
    elementType = "appender", 
    printObject = true 
) 
public class SSLSocketAppender extends SocketAppender { 

private static StatusLogger statusLogger = StatusLogger.getLogger(); 

protected SSLSocketAppender(String name, Layout<? extends Serializable> layout, Filter filter, AbstractSocketManager manager, boolean ignoreExceptions, boolean immediateFlush, Advertiser advertiser) { 
    super(name, layout, filter, manager, ignoreExceptions, immediateFlush, advertiser); 
} 

    @PluginFactory 
    public static SSLSocketAppender createAppender(@PluginAttribute("host") String host, @PluginAttribute(value = "port", defaultInt = 0) int port, @PluginAttribute("protocol") Protocol protocol, @PluginAttribute("name") String name, @PluginElement("Layout") Layout<? extends Serializable> layout, @PluginElement("Filter") Filter filter, @PluginAttribute(value = "connectTimeoutMillis",defaultInt = 0) int connectTimeoutMillis, @PluginAliases({"reconnectionDelay"}) @PluginAttribute(value = "reconnectionDelayMillis",defaultInt = 0) int reconnectDelayMillis, @PluginAttribute(value = "immediateFail",defaultBoolean = true) boolean immediateFail) { 

    AbstractSocketManager manager = SslSocketManager.getSocketManager(getSSLConfig(), host, port, connectTimeoutMillis, reconnectDelayMillis, immediateFail, layout); 
    return new SSLSocketAppender(name, layout, filter, manager, true, true, null); 
} 

    private static SslConfiguration getSSLConfig() { 

    KeyStoreConfiguration keyStoreConfig = null; 
    TrustStoreConfiguration trustStoreConfig = null; 
    try { 
     keyStoreConfig = KeyStoreConfiguration.createKeyStoreConfiguration(keyStorePath, keyStoreKey.toString(), keyFormat, null); 
     trustStoreConfig = TrustStoreConfiguration.createKeyStoreConfiguration(keyStorePath, keyStoreKey.toString(), keyFormat, null); 
    } 
    catch (StoreConfigurationException sce) 
    { 
     statusLogger.log(Level.ERROR, "Unable to configure secure socket : " + sce.getMessage()); 
    } 
     SslConfiguration sslConfig = SslConfiguration.createSSLConfiguration(Protocol.SSL.toString(),keyStoreConfig, trustStoreConfig); 
     return sslConfig; 
    } 
} 

、代わりに設定

関連する問題