!759 !include #1001651 // class NanoHTTP //static int port = 443; // standard https static int port = 8765; static class MyHTTPD extends NanoHTTPD { public MyHTTPD(int port) { super(port); } public Response serve(String uri, Method method, Map header, Map parms, Map files) { print("Serving URI: " + quote(uri)); try { Response response = cast callOpt(getMainClass(), "serve", uri, method, header, parms, files); if (response != null) ret response; S html = callHtmlMethod(getMainClass(), uri); if (html != null) ret serveHTML(html); ret serve404(); } catch (Throwable e) { e.printStackTrace(); ret serveHTML("ERROR."); } } } static MyHTTPD serveHttp_server; static SSLServerSocketFactory makeSSLSocketFactory(File keystoreFile, char[] passphrase) throws IOException { SSLServerSocketFactory res = null; try { KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); InputStream keystoreStream = new FileInputStream(keystoreFile); keystore.load(keystoreStream, passphrase); // TODO: close keystoreStream?? TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(keystore); KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); keyManagerFactory.init(keystore, passphrase); SSLContext ctx = SSLContext.getInstance("TLS"); ctx.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null); res = ctx.getServerSocketFactory(); } catch (Exception e) { throw new IOException(e.getMessage()); } return res; } p { File keystoreFile = new File("/home/stefan/dev/keystore-ssl/keystore.jks"); SSLServerSocketFactory factory = makeSSLSocketFactory(keystoreFile, args[0].toCharArray()); serveHttp_server = new MyHTTPD(port); serveHttp_server.makeSecure(factory); serveHttp_server.start(); System.out.println("HTTPS server started (listening on port " + port + "!)"); }