package art.servers.controller;
|
|
import art.library.utils.licence.Licence;
|
import art.library.utils.resources.Resources;
|
import art.servers.configuration.ConfigurationListenerHttp;
|
import art.servers.configuration.ConfigurationSecurity;
|
import com.sun.net.httpserver.HttpsConfigurator;
|
import com.sun.net.httpserver.HttpsParameters;
|
import com.sun.net.httpserver.HttpsServer;
|
import java.io.File;
|
import java.io.FileInputStream;
|
import java.net.InetSocketAddress;
|
import java.security.KeyStore;
|
import java.util.concurrent.Executors;
|
import javax.net.ssl.KeyManagerFactory;
|
import javax.net.ssl.SSLContext;
|
import javax.net.ssl.SSLEngine;
|
import javax.net.ssl.SSLParameters;
|
import javax.net.ssl.TrustManagerFactory;
|
|
|
|
public class ControllerListenerHttpsWeb extends ControllerListenerHttpWeb
|
{
|
|
public ControllerListenerHttpsWeb(ConfigurationListenerHttp configuration, ConfigurationSecurity security)
|
{
|
super(configuration, security);
|
}
|
|
|
|
|
protected void connect()
|
{
|
try
|
{
|
// Setup the socket address
|
|
InetSocketAddress address = new InetSocketAddress(configuration.port);
|
|
// initialise the HTTPS server
|
server = HttpsServer.create(address, 0);
|
SSLContext sslContext = SSLContext.getInstance("TLS");
|
|
// initialise the keystore
|
char[] password = Licence.decrypt(configuration.keystorePassword).toCharArray();
|
KeyStore ks = KeyStore.getInstance("JKS");
|
if ((new File(configuration.keystoreLocation)).exists() == true)
|
{
|
ks.load(new FileInputStream(configuration.keystoreLocation), password);
|
}
|
else
|
{
|
ks.load(Resources.getResourceStream(configuration.keystoreLocation), password);
|
}
|
|
// setup the key manager factory
|
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
|
kmf.init(ks, password);
|
|
// setup the trust manager factory
|
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
|
tmf.init(ks);
|
|
|
// setup the HTTPS context and parameters
|
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
|
((HttpsServer)server).setHttpsConfigurator(new HttpsConfigurator(sslContext)
|
{
|
public void configure(HttpsParameters params)
|
{
|
try
|
{
|
// initialise the SSL context
|
SSLContext c = SSLContext.getDefault();
|
SSLEngine engine = c.createSSLEngine();
|
params.setNeedClientAuth(false);
|
params.setCipherSuites(engine.getEnabledCipherSuites());
|
params.setProtocols(engine.getEnabledProtocols());
|
|
// get the default parameters
|
SSLParameters defaultSSLParameters = c.getDefaultSSLParameters();
|
params.setSSLParameters(defaultSSLParameters);
|
|
}
|
catch (Exception e)
|
{
|
}
|
}
|
});
|
|
|
contexts();
|
server.setExecutor(Executors.newCachedThreadPool());
|
server.start();
|
return;
|
|
}
|
catch (Exception e)
|
{
|
}
|
}
|
|
|
|
|
}
|