package fr.umlv.ji.tcp.server.https;
import javax.net.ssl.*;
import java.security.*;
import java.io.*;
import java.util.prefs.*;
import java.util.logging.*;
import fr.umlv.ji.tcp.server.*;
import fr.umlv.ji.tcp.server.http.*;
import fr.umlv.ji.ssl.*;
public class HTTPSServer {
public static void main(String[] args) {
Logger logger =
Logger.getLogger("fr.umlv.ji.tcp.server.https.HTTPSServer");
Preferences prefs =
Preferences.userNodeForPackage(HTTPSServer.class);
String keyStore = prefs.get("keyStore", "keyStore");
logger.info("Loading keys from " + keyStore);
char[] keySecret = prefs.get("keySecret", "keySecret").toCharArray();
char[] keyPassword =
prefs.get("keyPassword", "keyPassword").toCharArray();
try {
BoundConcurrent server = new BoundConcurrent(logger,prefs);
SSLContext ctx;
SSLServerSocket ss;
if(args.length == 1) {
if(args[0].equals("-auth")) {
String trustStore = prefs.get("trustStore", "trustStore");
logger.info("Loading trusted certs from " + trustStore);
char[] trustSecret =
prefs.get("trustSecret", "trustSecret").toCharArray();
ctx = SSLHelper.getSSLContext(keyStore, keySecret, keyPassword,
trustStore, trustSecret);
ss = (SSLServerSocket)
ctx.getServerSocketFactory().createServerSocket();
ss.setNeedClientAuth(true);
} else {
System.err.println(usage);
System.exit(1);
return;
}
} else {
ctx = SSLHelper.getSSLContext(keyStore, keySecret, keyPassword);
ss = (SSLServerSocket)
ctx.getServerSocketFactory().createServerSocket();
}
server.setServerSocket(ss);
server.setService(new HTTPService(server));
server.launch();
} catch(GeneralSecurityException e) {
logger.log(Level.SEVERE,"Can't start server", e);
} catch(IOException e) {
logger.log(Level.SEVERE,"Can't start server", e);
}
}
private static String usage =
"java fr.umlv.ji.tcp.server.https.HTTPSServer [-auth]";
}