From 6edf9f5a5819296c1809f21a000b3b6778b2c167 Mon Sep 17 00:00:00 2001 From: 20013395 <20013395@studenti.uniupo.it> Date: Sat, 17 Sep 2022 19:20:28 +0200 Subject: [PATCH] TLS --- domainManager/Domain/src/code/Domain.java | 170 +++++++++++++++------- domainManager/Domain/src/code/Helper.java | 2 +- 2 files changed, 117 insertions(+), 55 deletions(-) diff --git a/domainManager/Domain/src/code/Domain.java b/domainManager/Domain/src/code/Domain.java index 5d04b5e..6219db1 100644 --- a/domainManager/Domain/src/code/Domain.java +++ b/domainManager/Domain/src/code/Domain.java @@ -1,13 +1,24 @@ package code; +import java.io.FileInputStream; import java.io.IOException; import java.net.HttpURLConnection; import java.net.InetSocketAddress; import java.net.URL; +import java.security.KeyStore; import java.sql.SQLException; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; +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; + +import com.sun.net.httpserver.HttpsConfigurator; +import com.sun.net.httpserver.HttpsParameters; +import com.sun.net.httpserver.HttpsServer; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -18,71 +29,123 @@ import db.DBC; public class Domain { - static public int port=3001; + static public int port = 3001; public static void main(String[] args) throws IOException, JSONException { - - ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor)Executors.newCachedThreadPool(); - HttpServer server=HttpServer.create(new InetSocketAddress(port),0); - - //chiamata per popolare moduli - - URL url = new URL("https://gitlab.di.unipmn.it/alfredo/iotlabgw.edu-al.unipmn.it/-/raw/main/index.json"); - HttpURLConnection con = (HttpURLConnection) url.openConnection(); - - Helper.setConnectionSettings(con,"GET"); - - // leggo risposta - int status = con.getResponseCode(); - //controllare ToDo - String content = Helper.getResponseFromConnection(con); - con.disconnect(); - - //manipolazione per ottenere i campi dei moduli - riempiModuli(content); - - server.setExecutor(threadPoolExecutor); - - server.createContext("/install/", new InstallHandler()); - server.createContext("/start/", new StartHandler()); - server.createContext("/stop/", new StopHandler()); - server.createContext("/delete/", new DeleteHandler()); - server.createContext("/secured/domains/", new TokenHandler()); - server.createContext("/secured/services", new ServicesHandler()); - server.createContext("/secured/priviledges", new PriviledgesHandler()); - - server.start(); - System.out.println("Domain in ascolto su "+Helper.getSelfURL()); + + ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) Executors.newCachedThreadPool(); + // HttpServer server=HttpServer.create(new InetSocketAddress(port),0); + + HttpsServer server = HttpsServer.create(new InetSocketAddress(port), 0);// port gets set here + // HttpServer server = HttpServer.create(new InetSocketAddress(port), 0); + + // initialise the HTTPS server + try { + SSLContext sslContext = SSLContext.getInstance("TLS"); + + // initialise the keystore + char[] password = "miapasswd".toCharArray(); + KeyStore ks = KeyStore.getInstance("JKS"); + FileInputStream fis = new FileInputStream("../lig.keystore"); + ks.load(fis, 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); + server.setHttpsConfigurator(new HttpsConfigurator(sslContext) { + @Override + public void configure(HttpsParameters params) { + try { + // initialise the SSL context + SSLContext context = getSSLContext(); + SSLEngine engine = context.createSSLEngine(); + params.setNeedClientAuth(false); + params.setCipherSuites(engine.getEnabledCipherSuites()); + params.setProtocols(engine.getEnabledProtocols()); + + // Set the SSL parameters + SSLParameters sslParameters = context.getSupportedSSLParameters(); + params.setSSLParameters(sslParameters); + + } catch (Exception ex) { + System.out.println("Failed to create HTTPS port"); + ex.printStackTrace(); + } + } + }); + + // chiamata per popolare moduli + + URL url = new URL("https://gitlab.di.unipmn.it/alfredo/iotlabgw.edu-al.unipmn.it/-/raw/main/index.json"); + HttpURLConnection con = (HttpURLConnection) url.openConnection(); + + Helper.setConnectionSettings(con, "GET"); + + // leggo risposta + int status = con.getResponseCode(); + // controllare ToDo + String content = Helper.getResponseFromConnection(con); + con.disconnect(); + + // manipolazione per ottenere i campi dei moduli + riempiModuli(content); + + server.setExecutor(threadPoolExecutor); + + // API del server + + server.createContext("/install/", new InstallHandler()); + server.createContext("/start/", new StartHandler()); + server.createContext("/stop/", new StopHandler()); + server.createContext("/delete/", new DeleteHandler()); + server.createContext("/secured/domains/", new TokenHandler()); + server.createContext("/secured/services", new ServicesHandler()); + server.createContext("/secured/priviledges", new PriviledgesHandler()); + + server.start(); + System.out.println("Domain in ascolto su " + Helper.getSelfURL()); + + } catch (Exception e) { + System.out.println("Failed to create HTTPS server on port " + port + Helper.getSelfURL()); + e.printStackTrace(); + } + } - + private static void riempiModuli(String content) throws JSONException { - - JSONObject obj=new JSONObject(content); + + JSONObject obj = new JSONObject(content); JSONArray jr = obj.getJSONArray("response"); - String []s1=new String[jr.length()]; + String[] s1 = new String[jr.length()]; - for(int i=0;i<jr.length();i++) { - s1[i]=jr.getString(i); + for (int i = 0; i < jr.length(); i++) { + s1[i] = jr.getString(i); } - for(int i=0;i<s1.length;i++) { - String remZip=s1[i].substring(0, s1[i].length()-4); - String[] curr=remZip.split("-"); - for(int j=0;j<curr.length;j++) { - if(curr.length>1) { - String a=curr[0]; - String b=curr[1]; + for (int i = 0; i < s1.length; i++) { + String remZip = s1[i].substring(0, s1[i].length() - 4); + String[] curr = remZip.split("-"); + for (int j = 0; j < curr.length; j++) { + if (curr.length > 1) { + String a = curr[0]; + String b = curr[1]; try { - //inserimento modulo non arduino + // inserimento modulo non arduino DBC.fillModules(a, b, s1[i]); } catch (SQLException | JSONException e) { e.printStackTrace(); } - } - else { - String a=curr[0]; + } else { + String a = curr[0]; try { - //inserimento modulo arduino - DBC.fillModules(a,"Arduino1", s1[i]); + // inserimento modulo arduino + DBC.fillModules(a, "Arduino1", s1[i]); } catch (SQLException | JSONException e) { e.printStackTrace(); } @@ -91,5 +154,4 @@ public class Domain { } } } - -} +} \ No newline at end of file diff --git a/domainManager/Domain/src/code/Helper.java b/domainManager/Domain/src/code/Helper.java index 6f05eac..9862a8e 100644 --- a/domainManager/Domain/src/code/Helper.java +++ b/domainManager/Domain/src/code/Helper.java @@ -26,7 +26,7 @@ public class Helper { private static String keycloakRealm = "test00"; private static String keycloakURL = "http://localhost:8080/"; private static String cloudappURL = "http://localhost:3002/"; - private static String selfURL = "http://localhost:3001"; + private static String selfURL = "https://localhost:3001"; public static void sendCors(HttpExchange exchange, int stato, String response) throws IOException { Headers headers = exchange.getResponseHeaders(); -- GitLab