HTTPSServer.java

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.*;
/** Serveur concurrent pour HTTP à nombre de processus légers fixé. */
public class HTTPSServer {
  /** Méthode de démarrage. */
  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]";
}