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 exception) { exception.printStackTrace(); } } }