embedded Tomcat 6 mit SSL-Verschlüsselung

AndiN

Grünschnabel
Hallo Leute,
ich bin neu hier im Forum und ich brauche dringend Eure Hilfe!
Ich habe eine kleine Webanwendung in JAVA 6 mit embedded Tomcat 6 und möchte nun zusätzlich die Möglichkeit über SSL-Verschlüsselung darauf zuzugreifen. Der direkte Aufruf über
http://localhost:8080 funktioniert einwandfrei! Jetzt habe ich zwei verschiedene Vatianten von Connector hinzugefügt, aber ausser das ich zusätzlich über http://localhost:8443 draufkomme hat sich nichts geändert. Es gibt immernoch keinen Zugriff über https://localhost:8443 ******

1. Versuch/Variante:

...

/ / Create a connector that listens on all addresses
/ / On port 8080
Connector connector = embedded.createConnector (
(String) null, 8080 false);

/ / Wire up the connector
embedded.addConnector (connector);

/ / Ssl connector
Connector sslConnector embedded.createConnector = (
(Java.net.InetAddress) null, 8443, true);

sslConnector.setProtocol ("TLS");
sslConnector.setSecure (true);
sslConnector.setEnableLookups (false);
sslConnector.setAttribute (keypass "," changeit ");
sslConnector.setAttribute ("keystore", catalina home +
"/ keys / .keystore");
sslConnector.setAttribute (ClientAuth "," false ");

/ / Wire up the sslconnector
embedded.addConnector (sslConnector);
...

2. Versuch/Variante:

...
Connector sslConnector embedded.createConnector =
((java.net.InetAddress) null, sslPort, true);
IntrospectionUtils.setProperty (sslConnector, "port", "8443");
IntrospectionUtils.setProperty (sslConnector, "SslProtocols", "TLS");
IntrospectionUtils.setProperty (sslConnector,
"keystore file", catalina home + "/ keys / .keystore");
IntrospectionUtils.setProperty (sslConnector,
"keystore pass", "kspass");
IntrospectionUtils.setProperty (sslConnector,
"keystore type", "JKS");
IntrospectionUtils.setProperty (sslConnector, "clientAuth", "false");
IntrospectionUtils.setProperty (this, "SSLEnabled", "true");

embedded.addConnector (sslConnector);
...

Beide Varianten bringen keine Fehler - helfen aber auch nicht weiter! Leider habe ich bisher keine Dokumente gefunden, aus der der die korrekte Parametrisierung der embedded Version von Tomcat zu entenhmen ist :(
Ich komme hier einfach nicht mehr weiter! Irgendwie drehe ich mich im Kreis und mache scheinbar einen Denkfehler. Hat einer von Euch ein funktionierendes Beispiel für mich?

Gruß
Andi
 
Zuletzt bearbeitet:
Danke Tom,
den Link habe ich bei meiner verzweifelten Suche nach einer Lösung vor ein paar Tagen auch schon gefunden. Er entspricht meiner zweiten Lösung und löst mein Problem leider nicht.
Ich habe inzwischen festgestellt, dass er bei der Initialisierung des SSL-Connectors meine Parameter sogar übernimmt, denn ich kann mir die übergebenen Parameter ansehen. Beim eigentlichen Start von Tomcat werden diese jedoch offensichtlich nicht berücksichtigt und dafür der Standard-Connector (mit HTTP) geladen.

Auf jedenfall danke schon einmal, dass Du Dir die Mühe gemacht hast, eine Lösung zu suchen.

Gruß Andi
 
Hallo,

bei mir Funktioniert folgendes Beispiel mit Tomcat 6.0.30:
https://localhost:8443/mywebapp/

Hier das Beispiel zum generieren von Keys im Keystore mit Keytool:
http://www.tutorials.de/java/232026-textdateien-mit-applet-auslesen.html

Java:
package de.tutorials.training;

import java.io.File;
import java.net.InetAddress;
import java.net.MalformedURLException;

import org.apache.catalina.Context;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.loader.WebappLoader;
import org.apache.catalina.realm.MemoryRealm;
import org.apache.catalina.startup.Embedded;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;

public class EmbeddedTomcatExample {
  public static void main(String[] args) throws Exception {
    EmbeddedTomcat tomcat = new EmbeddedTomcat("simplewebapp", 8089);
    tomcat.launch();
    Thread.sleep(30000);
  }

  public static class EmbeddedTomcat {

    protected Log logger = LogFactory.getLog(getClass());

    protected String path;
    protected String contextName;
    protected int port;
    protected Embedded container;

    protected String catalinaHome = "tomcat";
    protected String webAppClassesFolder = "target/classes";
    protected String hostname = "localHost";
    protected String tomcatBaseFolder = "target";
    protected String engineName = "localEngine";


    public EmbeddedTomcat(String contextName, int port) {
      this.contextName = contextName;
      this.path = "/" + contextName;
      this.port = port;
    }


    public void launch() throws LifecycleException, MalformedURLException {
      container = setupContainer();
      WebappLoader loader = setupWebappLocader();
      Context rootContext = setupContext(loader);
      Host localHost = setupHost(rootContext);
      Engine engine = setupEngine(localHost);
      Connector httpConnector = setupHttpConnector();
      Connector httpsConnector = setupHttpsConnector();

      // start server
      container.start();

      Runtime.getRuntime().addShutdownHook(new Thread() {
        public void run() {
          shutdownContainer();
        }
      });
    }


    protected Connector setupHttpsConnector() {
      Connector sslConnector = container.createConnector((InetAddress) null, 8443, true);
      sslConnector.setProtocol("TLS");
      sslConnector.setSecure(true);
      sslConnector.setEnableLookups(false);
      sslConnector.setAttribute("keypass", "xxxxxx");
      sslConnector.setAttribute("keystore", "/keys/SSLKeyStore");
      sslConnector.setAttribute("ClientAuth", false);
      container.addConnector(sslConnector);
      return sslConnector;
    }


    protected Connector setupHttpConnector() {
      Connector httpConnector = container.createConnector((InetAddress) null, port, false);
      container.addConnector(httpConnector);
      container.setAwait(true);
      return httpConnector;
    }


    protected Engine setupEngine(Host host) {
      Engine engine = container.createEngine();
      engine.setName(engineName);
      engine.addChild(host);
      engine.setDefaultHost(host.getName());
      container.addEngine(engine);
      return engine;
    }


    protected Host setupHost(Context rootContext) {

      Host localHost = container.createHost(hostname, new File(tomcatBaseFolder).getAbsolutePath());
      localHost.addChild(rootContext);
      return localHost;
    }


    protected Context setupContext(WebappLoader webappLoader) {
      Context rootContext = container.createContext(path, contextName);
      rootContext.setLoader(webappLoader);
      rootContext.setReloadable(true);
      return rootContext;
    }


    protected WebappLoader setupWebappLocader() throws MalformedURLException {
      WebappLoader loader = new WebappLoader(this.getClass().getClassLoader());

      if (webAppClassesFolder != null) {
        loader.addRepository(new File(webAppClassesFolder).toURI().toURL().toString());
      }
      return loader;
    }


    protected Embedded setupContainer() {
      Embedded container = new Embedded();
      container.setCatalinaHome(catalinaHome);
      container.setRealm(new MemoryRealm());
      return container;
    }


    public void shutdownContainer() {
      try {
        if (container != null) {
          container.stop();
        }
      } catch (LifecycleException le) {
        logger.warn("Could not shutdown Tomcat: " + le.getMessage(), le);
      }
    }
  }
}

Maven dependencies:
Code:
		    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>catalina</artifactId>
        <version>6.0.30</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>coyote</artifactId>
        <version>6.0.30</version>
    </dependency>


Gruß Tom
 
Hi Tom,
sorry, dass ich mich noch nicht gemeldet habe! Danke schon mal für das Beispiel. Leider habe ich bisher noch keine Zeit gefunden, dieses auszuprobieren. Ich melde mich, sobald ich dazu komme.

Gruß Andi
 
Zurück