diff --git a/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/ConfigurationProperties.java b/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/ConfigurationProperties.java index 3618d67..6550363 100644 --- a/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/ConfigurationProperties.java +++ b/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/ConfigurationProperties.java @@ -32,6 +32,11 @@ public class ConfigurationProperties { public static final String FORCE_RETURN_VALUES = "infinispan.client.hotrod.force_return_values"; public static final String HASH_FUNCTION_PREFIX = "infinispan.client.hotrod.hash_function_impl"; public static final String DEFAULT_EXECUTOR_FACTORY_QUEUE_SIZE ="infinispan.client.hotrod.default_executor_factory.queue_size"; + public static final String USE_SSL = "infinispan.client.hotrod.use_ssl"; + public static final String KEY_STORE_FILE_NAME = "infinispan.client.hotrod.key_store_file_name"; + public static final String KEY_STORE_PASSWORD = "infinispan.client.hotrod.key_store_password"; + public static final String TRUST_STORE_FILE_NAME = "infinispan.client.hotrod.trust_store_file_name"; + public static final String TRUST_STORE_PASSWORD = "infinispan.client.hotrod.trust_store_password"; // defaults @@ -95,6 +100,26 @@ public class ConfigurationProperties { return props.getBooleanProperty(PING_ON_STARTUP, true); } + public boolean getUseSSL() { + return props.getBooleanProperty(USE_SSL, false); + } + + public String getKeyStoreFileName() { + return props.getProperty(KEY_STORE_FILE_NAME, null); + } + + public String getKeyStorePassword() { + return props.getProperty(KEY_STORE_PASSWORD, null); + } + + public String getTrustStoreFileName() { + return props.getProperty(TRUST_STORE_FILE_NAME, null); + } + + public String getTrustStorePassword() { + return props.getProperty(TRUST_STORE_PASSWORD, null); + } + public String getRequestBalancingStrategy() { return props.getProperty(REQUEST_BALANCING_STRATEGY, RoundRobinBalancingStrategy.class.getName()); } diff --git a/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/TcpTransport.java b/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/TcpTransport.java index 300fa34..4e5c5ba 100644 --- a/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/TcpTransport.java +++ b/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/TcpTransport.java @@ -1,19 +1,34 @@ package org.infinispan.client.hotrod.impl.transport.tcp; -import net.jcip.annotations.ThreadSafe; -import org.infinispan.client.hotrod.impl.transport.AbstractTransport; -import org.infinispan.client.hotrod.exceptions.TransportException; -import org.infinispan.client.hotrod.impl.transport.TransportFactory; -import org.infinispan.util.logging.Log; -import org.infinispan.util.logging.LogFactory; +import static org.infinispan.io.UnsignedNumeric.readUnsignedInt; +import static org.infinispan.io.UnsignedNumeric.readUnsignedLong; +import static org.infinispan.io.UnsignedNumeric.writeUnsignedInt; +import static org.infinispan.io.UnsignedNumeric.writeUnsignedLong; +import java.io.BufferedInputStream; +import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; import java.net.InetSocketAddress; import java.net.Socket; -import java.nio.channels.SocketChannel; +import java.security.KeyStore; +import java.security.Security; +import java.util.Arrays; import java.util.concurrent.atomic.AtomicLong; -import static org.infinispan.io.UnsignedNumeric.*; +import javax.net.ssl.KeyManager; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.TrustManagerFactory; + +import net.jcip.annotations.ThreadSafe; + +import org.infinispan.client.hotrod.exceptions.TransportException; +import org.infinispan.client.hotrod.impl.transport.AbstractTransport; +import org.infinispan.client.hotrod.impl.transport.TransportFactory; +import org.infinispan.util.logging.Log; +import org.infinispan.util.logging.LogFactory; /** * Transport implementation based on TCP. @@ -34,14 +49,66 @@ public class TcpTransport extends AbstractTransport { private final InetSocketAddress serverAddress; private final long id = ID_COUNTER.incrementAndGet(); + public static void loadKeyStore(KeyStore ks, String keyStoreFileName, char[] keyStorePassword) throws Exception { + + InputStream is = new BufferedInputStream(new FileInputStream(keyStoreFileName)); + try { + ks.load(is, keyStorePassword); + } + finally { + is.close(); + } + } + public TcpTransport(InetSocketAddress serverAddress, TransportFactory transportFactory) { super(transportFactory); + TcpTransportFactory tcpTransportFactory = (TcpTransportFactory) transportFactory; this.serverAddress = serverAddress; try { - SocketChannel socketChannel = SocketChannel.open(serverAddress); - socket = socketChannel.socket(); + if (tcpTransportFactory.isUseSSL()) { + + KeyManager[] keyManagers = null; + String keyStoreFileName = tcpTransportFactory.getKeyStoreFileName(); + String keyStorePassword = tcpTransportFactory.getKeyStorePassword(); + if (keyStoreFileName != null) { + char[] keyStorePass = keyStorePassword.toCharArray(); + KeyStore ks = KeyStore.getInstance("JKS"); + loadKeyStore(ks, keyStoreFileName, keyStorePass); + + String ksAlgorithm = Security.getProperty("ssl.KeyManagerFactory.algorithm"); + if (ksAlgorithm == null) + ksAlgorithm = "SunX509"; + KeyManagerFactory kmf = KeyManagerFactory.getInstance(ksAlgorithm); + kmf.init(ks, keyStorePass); + keyManagers = kmf.getKeyManagers(); + } + + TrustManager[] trustManagers = null; + String trustStoreFileName = tcpTransportFactory.getTrustStoreFileName(); + String trustStorePassword = tcpTransportFactory.getTrustStorePassword(); + if (trustStoreFileName != null) { + char[] trustStorePass = trustStorePassword.toCharArray(); + KeyStore ks = KeyStore.getInstance("JKS"); + loadKeyStore(ks, trustStoreFileName, trustStorePass); + + String ksAlgorithm = Security.getProperty("ssl.KeyManagerFactory.algorithm"); + if (ksAlgorithm == null) + ksAlgorithm = "SunX509"; + TrustManagerFactory tmf = TrustManagerFactory.getInstance(ksAlgorithm); + tmf.init(ks); + trustManagers = tmf.getTrustManagers(); + } + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(keyManagers, trustManagers, null); + socket = sslContext.getSocketFactory().createSocket(); + } + else { + socket = new Socket(); + } socket.setTcpNoDelay(transportFactory.isTcpNoDelay()); - } catch (IOException e) { + //socket.setSoTimeout(2000); + socket.connect(serverAddress, 20000); + } catch (Exception e) { String message = "Could not connect to server: " + serverAddress; log.error(message, e); throw new TransportException(message, e); diff --git a/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/TcpTransportFactory.java b/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/TcpTransportFactory.java index 955d093..1397cdb 100644 --- a/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/TcpTransportFactory.java +++ b/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/TcpTransportFactory.java @@ -38,6 +38,11 @@ public class TcpTransportFactory implements TransportFactory { private volatile Collection servers; private volatile ConsistentHash consistentHash; private volatile boolean tcpNoDelay; + private volatile boolean useSSL; + private volatile String keyStoreFileName; + private volatile String keyStorePassword; + private volatile String trustStoreFileName; + private volatile String trustStorePassword; private final ConsistentHashFactory hashFactory = new ConsistentHashFactory(); @Override @@ -48,6 +53,11 @@ public class TcpTransportFactory implements TransportFactory { String balancerClass = cfg.getRequestBalancingStrategy(); balancer = (RequestBalancingStrategy) Util.getInstance(balancerClass); tcpNoDelay = cfg.getTcpNoDelay(); + useSSL = cfg.getUseSSL(); + keyStoreFileName = cfg.getKeyStoreFileName(); + keyStorePassword = cfg.getKeyStorePassword(); + trustStoreFileName = cfg.getTrustStoreFileName(); + trustStorePassword = cfg.getTrustStorePassword(); PropsKeyedObjectPoolFactory poolFactory = new PropsKeyedObjectPoolFactory(new TransportObjectFactory(this, topologyId, pingOnStartup), cfg.getProperties()); createAndPreparePool(staticConfiguredServers, poolFactory); balancer.setServers(servers); @@ -205,6 +215,26 @@ public class TcpTransportFactory implements TransportFactory { return tcpNoDelay; } + public boolean isUseSSL() { + return useSSL; + } + + public String getKeyStoreFileName() { + return keyStoreFileName; + } + + public String getKeyStorePassword() { + return keyStorePassword; + } + + public String getTrustStoreFileName() { + return trustStoreFileName; + } + + public String getTrustStorePassword() { + return trustStorePassword; + } + @Override public int getTransportCount() { if (Thread.currentThread().isInterrupted()) { diff --git a/core/src/main/java/org/infinispan/util/TypedProperties.java b/core/src/main/java/org/infinispan/util/TypedProperties.java index 8e25c54..298da45 100644 --- a/core/src/main/java/org/infinispan/util/TypedProperties.java +++ b/core/src/main/java/org/infinispan/util/TypedProperties.java @@ -131,9 +131,12 @@ public class TypedProperties extends Properties { * @return the value in this property list with the specified key valu after optionally being inspected for String property replacement */ public String getProperty(String key, String defaultValue, boolean doStringReplace) { + String result = getProperty(key, defaultValue); + if (result == null) + return null; if (doStringReplace) - return StringPropertyReplacer.replaceProperties(getProperty(key, defaultValue)); + return StringPropertyReplacer.replaceProperties(result); else - return getProperty(key, defaultValue); + return result; } } \ No newline at end of file diff --git a/server/core/src/main/scala/org/infinispan/server/core/AbstractProtocolServer.scala b/server/core/src/main/scala/org/infinispan/server/core/AbstractProtocolServer.scala index 4d0e6b4..8904179 100644 --- a/server/core/src/main/scala/org/infinispan/server/core/AbstractProtocolServer.scala +++ b/server/core/src/main/scala/org/infinispan/server/core/AbstractProtocolServer.scala @@ -57,26 +57,48 @@ abstract class AbstractProtocolServer(threadNamePrefix: String) extends Protocol throw new IllegalArgumentException("Send buffer size can't be lower than 0: " + sendBufSize) } + val useSSL = typedProps.getBooleanProperty(PROP_KEY_USE_SSL, USE_SSL_DEFAULT, true) + val needClientAuth = typedProps.getBooleanProperty(PROP_KEY_NEED_CLIENT_AUTH, NEED_CLIENT_AUTH_DEFAULT, true) + val keyStoreFileName = typedProps.getProperty(PROP_KEY_KEY_STORE_FILE_NAME, null, true) + val keyStorePassword = typedProps.getProperty(PROP_KEY_KEY_STORE_PASSWORD, null, true) + var trustStoreFileName = typedProps.getProperty(PROP_KEY_TRUST_STORE_FILE_NAME, null, true) + var trustStorePassword = typedProps.getProperty(PROP_KEY_TRUST_STORE_PASSWORD, null, true) + + if (useSSL) { + if (keyStoreFileName != null && keyStorePassword == null) + throw new IllegalArgumentException("No key store password for key store: " + keyStoreFileName) + if (trustStoreFileName != null && trustStorePassword == null) + throw new IllegalArgumentException("No trust store password for trust store: " + trustStoreFileName) + } + if (isDebugEnabled) { debug("Starting server with basic settings: host={0}, port={1}, masterThreads={2}, workerThreads={3}, " + - "idleTimeout={4}, tcpNoDelay={5}, sendBufSize={6}, recvBufSize={7}", host, port, - masterThreads, workerThreads, idleTimeout, tcpNoDelay, sendBufSize, recvBufSize) + "idleTimeout={4}, tcpNoDelay={5}, sendBufSize={6}, recvBufSize={7}, useSSL={8}, " + + "needClientAuth={9}, keyStoreFile={10}, trustStoreFile={11}", + host, port, masterThreads, workerThreads, idleTimeout, tcpNoDelay, sendBufSize, recvBufSize, + useSSL, needClientAuth, keyStoreFileName, trustStoreFileName) } // Register rank calculator before starting any cache so that we can capture all view changes cacheManager.addListener(getRankCalculatorListener) // Start default cache startDefaultCache - startTransport(idleTimeout, tcpNoDelay, sendBufSize, recvBufSize, typedProps) + startTransport(idleTimeout, tcpNoDelay, sendBufSize, recvBufSize, useSSL, needClientAuth, keyStoreFileName, + keyStorePassword, trustStoreFileName, trustStorePassword, typedProps) } } - def startTransport(idleTimeout: Int, tcpNoDelay: Boolean, sendBufSize: Int, recvBufSize: Int, typedProps: TypedProperties) { + def startTransport(idleTimeout: Int, tcpNoDelay: Boolean, sendBufSize: Int, recvBufSize: Int, + useSSL : Boolean, needClientAuth : Boolean, + keyStoreFileName : String, keyStorePassword : String, + trustStoreFileName : String, trustStorePassword : String, + typedProps: TypedProperties) { val address = new InetSocketAddress(host, port) val encoder = getEncoder val nettyEncoder = if (encoder != null) new EncoderAdapter(encoder) else null transport = new NettyTransport(this, nettyEncoder, address, masterThreads, workerThreads, idleTimeout, - threadNamePrefix, tcpNoDelay, sendBufSize, recvBufSize) + threadNamePrefix, tcpNoDelay, sendBufSize, recvBufSize, useSSL, needClientAuth, keyStoreFileName, + keyStorePassword, trustStoreFileName, trustStorePassword) transport.start } diff --git a/server/core/src/main/scala/org/infinispan/server/core/Main.scala b/server/core/src/main/scala/org/infinispan/server/core/Main.scala index ffdd5d4..abf35de 100644 --- a/server/core/src/main/scala/org/infinispan/server/core/Main.scala +++ b/server/core/src/main/scala/org/infinispan/server/core/Main.scala @@ -31,6 +31,12 @@ object Main extends Logging { val PROP_KEY_RECV_BUF_SIZE = "infinispan.server.recv_buf_size" val PROP_KEY_PROXY_HOST = "infinispan.server.proxy_host" val PROP_KEY_PROXY_PORT = "infinispan.server.proxy_port" + val PROP_KEY_USE_SSL = "infinispan.server.use_ssl" + val PROP_KEY_NEED_CLIENT_AUTH = "infinispan.server.need_client_auth" + val PROP_KEY_KEY_STORE_FILE_NAME = "infinispan.server.key_store_file_name" + val PROP_KEY_KEY_STORE_PASSWORD = "infinispan.server.key_store_password" + val PROP_KEY_TRUST_STORE_FILE_NAME = "infinispan.server.trust_store_file_name" + val PROP_KEY_TRUST_STORE_PASSWORD = "infinispan.server.trust_store_password" val HOST_DEFAULT = "127.0.0.1" val MASTER_THREADS_DEFAULT = 0 val WORKER_THREADS_DEFAULT = 0 @@ -38,6 +44,8 @@ object Main extends Logging { val TCP_NO_DELAY_DEFAULT = true val SEND_BUF_SIZE_DEFAULT = 0 val RECV_BUF_SIZE_DEFAULT = 0 + val USE_SSL_DEFAULT = false + val NEED_CLIENT_AUTH_DEFAULT = false /** * Server properties. This object holds all of the required diff --git a/server/core/src/main/scala/org/infinispan/server/core/transport/netty/NettyChannelPipelineFactory.scala b/server/core/src/main/scala/org/infinispan/server/core/transport/netty/NettyChannelPipelineFactory.scala index 571b41c..c01cb92 100644 --- a/server/core/src/main/scala/org/infinispan/server/core/transport/netty/NettyChannelPipelineFactory.scala +++ b/server/core/src/main/scala/org/infinispan/server/core/transport/netty/NettyChannelPipelineFactory.scala @@ -2,6 +2,7 @@ package org.infinispan.server.core.transport.netty import org.jboss.netty.channel._ import org.infinispan.server.core.ProtocolServer +import org.jboss.netty.handler.ssl.SslHandler import org.jboss.netty.handler.timeout.IdleStateHandler import org.infinispan.server.core.transport.IdleStateHandlerProvider import org.jboss.netty.util.{HashedWheelTimer, Timer} @@ -15,13 +16,19 @@ import org.jboss.netty.util.{HashedWheelTimer, Timer} * @since 4.1 */ class NettyChannelPipelineFactory(server: ProtocolServer, encoder: ChannelDownstreamHandler, - transport: NettyTransport, idleTimeout: Int) + transport: NettyTransport, idleTimeout: Int, + useSSL : Boolean, needClientAuth : Boolean, + keyStoreFileName : String, keyStorePassword : String, + trustStoreFileName : String, trustStorePassword : String) extends ChannelPipelineFactory { private var timer: Timer = _ override def getPipeline: ChannelPipeline = { val pipeline = Channels.pipeline + if (useSSL) + pipeline.addLast("ssl", new SslHandler(SSLEngineFactory.createSSLEngine(keyStoreFileName, keyStorePassword, + trustStoreFileName, trustStorePassword, needClientAuth))) pipeline.addLast("decoder", new DecoderAdapter(server.getDecoder, transport)) if (encoder != null) pipeline.addLast("encoder", encoder) diff --git a/server/core/src/main/scala/org/infinispan/server/core/transport/netty/NettyTransport.scala b/server/core/src/main/scala/org/infinispan/server/core/transport/netty/NettyTransport.scala index 5651cb1..f613707 100644 --- a/server/core/src/main/scala/org/infinispan/server/core/transport/netty/NettyTransport.scala +++ b/server/core/src/main/scala/org/infinispan/server/core/transport/netty/NettyTransport.scala @@ -20,12 +20,16 @@ import org.jboss.netty.util.{ThreadNameDeterminer, ThreadRenamingRunnable} class NettyTransport(server: ProtocolServer, encoder: ChannelDownstreamHandler, address: SocketAddress, masterThreads: Int, workerThreads: Int, idleTimeout: Int, threadNamePrefix: String, tcpNoDelay: Boolean, - sendBufSize: Int, recvBufSize: Int) extends Transport { + sendBufSize: Int, recvBufSize: Int, + useSSL : Boolean, needClientAuth : Boolean, + keyStoreFileName : String, keyStorePassword : String, + trustStoreFileName : String, trustStorePassword : String) extends Transport { import NettyTransport._ private val serverChannels = new DefaultChannelGroup(threadNamePrefix + "-Channels") val acceptedChannels = new DefaultChannelGroup(threadNamePrefix + "-Accepted") - private val pipeline = new NettyChannelPipelineFactory(server, encoder, this, idleTimeout) + private val pipeline = new NettyChannelPipelineFactory(server, encoder, this, idleTimeout, + useSSL, needClientAuth, keyStoreFileName, keyStorePassword, trustStoreFileName, trustStorePassword) private val factory = { if (workerThreads == 0) new NioServerSocketChannelFactory(masterExecutor, workerExecutor) diff --git a/server/core/src/main/scala/org/infinispan/server/core/transport/netty/SSLEngineFactory.scala b/server/core/src/main/scala/org/infinispan/server/core/transport/netty/SSLEngineFactory.scala index 13a6d31..8c77e84 100755 --- a/server/core/src/main/scala/org/infinispan/server/core/transport/netty/SSLEngineFactory.scala +++ b/server/core/src/main/scala/org/infinispan/server/core/transport/netty/SSLEngineFactory.scala @@ -6,9 +6,11 @@ import java.io.InputStream import java.security.KeyStore import java.security.Security +import javax.net.ssl.KeyManager import javax.net.ssl.KeyManagerFactory import javax.net.ssl.SSLContext import javax.net.ssl.SSLEngine +import javax.net.ssl.TrustManager import javax.net.ssl.TrustManagerFactory /** @@ -32,35 +34,44 @@ object SSLEngineFactory { trustStoreFileName : String, trustStorePassword : String, needClientAuth : Boolean): SSLEngine = { - // KeyStore - val keyStorePass = keyStorePassword.toCharArray - val ks = KeyStore.getInstance("JKS") - loadKeyStore(ks, keyStoreFileName, keyStorePass) + // Key Managers + var keyManagers: Array[KeyManager] = null + if (keyStoreFileName != null) { + val keyStorePass = keyStorePassword.toCharArray + val ks = KeyStore.getInstance("JKS") + loadKeyStore(ks, keyStoreFileName, keyStorePass) - var ksAlgorithm = Security.getProperty("ssl.KeyManagerFactory.algorithm") - if (ksAlgorithm == null) - ksAlgorithm = "SunX509" - val kmf = KeyManagerFactory.getInstance(ksAlgorithm) - kmf.init(ks, keyStorePass) + var ksAlgorithm = Security.getProperty("ssl.KeyManagerFactory.algorithm") + if (ksAlgorithm == null) + ksAlgorithm = "SunX509" + val kmf = KeyManagerFactory.getInstance(ksAlgorithm) + kmf.init(ks, keyStorePass) + keyManagers = kmf.getKeyManagers + } - // TrustStore - val trustStorePass = trustStorePassword.toCharArray - val ts = KeyStore.getInstance("JKS") - loadKeyStore(ts, trustStoreFileName, trustStorePass) + // Trust Managers + var trustManagers: Array[TrustManager] = null + if (trustStoreFileName != null) { + val trustStorePass = trustStorePassword.toCharArray + val ts = KeyStore.getInstance("JKS") + loadKeyStore(ts, trustStoreFileName, trustStorePass) - var tsAlgorithm = Security.getProperty("ssl.TrustManagerFactory.algorithm") - if (tsAlgorithm == null) - tsAlgorithm = "SunX509" - val tmf = TrustManagerFactory.getInstance(tsAlgorithm) - tmf.init(ts) + var tsAlgorithm = Security.getProperty("ssl.TrustManagerFactory.algorithm") + if (tsAlgorithm == null) + tsAlgorithm = "SunX509" + val tmf = TrustManagerFactory.getInstance(tsAlgorithm) + tmf.init(ts) + trustManagers = tmf.getTrustManagers + } // Create the SSLContext val sslContext = SSLContext.getInstance("TLS") - sslContext.init(kmf.getKeyManagers, tmf.getTrustManagers, null) + sslContext.init(keyManagers, trustManagers, null) // Create the engine in client mode val sslEngine = sslContext.createSSLEngine sslEngine.setUseClientMode(false) + sslEngine.setEnabledCipherSuites(sslEngine.getSupportedCipherSuites) sslEngine.setNeedClientAuth(needClientAuth) sslEngine } diff --git a/server/core/src/test/scala/org/infinispan/server/core/AbstractProtocolServerTest.scala b/server/core/src/test/scala/org/infinispan/server/core/AbstractProtocolServerTest.scala index 615481b..86c8c68 100644 --- a/server/core/src/test/scala/org/infinispan/server/core/AbstractProtocolServerTest.scala +++ b/server/core/src/test/scala/org/infinispan/server/core/AbstractProtocolServerTest.scala @@ -185,6 +185,9 @@ class AbstractProtocolServerTest { override def getDecoder: Decoder = null override def startTransport(idleTimeout: Int, tcpNoDelay: Boolean, sendBufSize: Int, recvBufSize: Int, + useSSL : Boolean, needClientAuth : Boolean, + keyStoreFileName : String, keyStorePassword : String, + trustStoreFileName : String, trustStorePassword : String, typedProps: TypedProperties) { this.tcpNoDelay = tcpNoDelay } diff --git a/server/hotrod/src/main/scala/org/infinispan/server/hotrod/HotRodServer.scala b/server/hotrod/src/main/scala/org/infinispan/server/hotrod/HotRodServer.scala index e275efc..668d043 100644 --- a/server/hotrod/src/main/scala/org/infinispan/server/hotrod/HotRodServer.scala +++ b/server/hotrod/src/main/scala/org/infinispan/server/hotrod/HotRodServer.scala @@ -47,7 +47,11 @@ class HotRodServer extends AbstractProtocolServer("HotRod") with Logging { super.start(properties, cacheManager, 11222) } - override def startTransport(idleTimeout: Int, tcpNoDelay: Boolean, sendBufSize: Int, recvBufSize: Int, typedProps: TypedProperties) { + override def startTransport(idleTimeout: Int, tcpNoDelay: Boolean, sendBufSize: Int, recvBufSize: Int, + useSSL : Boolean, needClientAuth : Boolean, + keyStoreFileName : String, keyStorePassword : String, + trustStoreFileName : String, trustStorePassword : String, + typedProps: TypedProperties) { // Start rest of the caches and self to view once we know for sure that we need to start // and we know that the rank calculator listener is registered @@ -65,7 +69,8 @@ class HotRodServer extends AbstractProtocolServer("HotRod") with Logging { addSelfToTopologyView(externalHost, externalPort, cacheManager) } - super.startTransport(idleTimeout, tcpNoDelay, sendBufSize, recvBufSize, typedProps) + super.startTransport(idleTimeout, tcpNoDelay, sendBufSize, recvBufSize, useSSL, needClientAuth, keyStoreFileName, + keyStorePassword, trustStoreFileName, trustStorePassword, typedProps) } private def addSelfToTopologyView(host: String, port: Int, cacheManager: EmbeddedCacheManager) { diff --git a/server/websocket/src/main/java/org/infinispan/server/websocket/WebSocketServer.java b/server/websocket/src/main/java/org/infinispan/server/websocket/WebSocketServer.java index b63c41a..03acdd3 100644 --- a/server/websocket/src/main/java/org/infinispan/server/websocket/WebSocketServer.java +++ b/server/websocket/src/main/java/org/infinispan/server/websocket/WebSocketServer.java @@ -85,7 +85,9 @@ public class WebSocketServer extends AbstractProtocolServer { } @Override - public void startTransport(int idleTimeout, boolean tcpNoDelay, int sendBufSize, int recvBufSize, TypedProperties typedProps) { + public void startTransport(int idleTimeout, boolean tcpNoDelay, int sendBufSize, int recvBufSize, + boolean useSSL, boolean needClientAuth, String keyStoreFileName, String keyStorePassword, + String trustStoreFileName, String trustStorePassword, TypedProperties typedProps) { InetSocketAddress address = new InetSocketAddress(getHost(), getPort()); Executor masterExecutor = masterThreads() == 0 ?