Kernmodul Tomcat-Einrichtung

Installation und Einrichtung von

Tomcat

Tomcat aus Linux Distributionen

Da die Versionsnummern des Tomcat nicht immer zu SuperX passen, können Sie einen eigenen Tomcat bzw. den im SuperX Kernmodul mitgelieferten Tomcat nutzen. Auch wenn Sie mehrere Tomcats auf einem Server betreiben kann es sinnvoll sein, Tomcat manuell zu installieren.

Der Betrieb von Tomcat aus der jew. Linux Distribution hat jedoch den Vorteil, dass man

Wir empfehlen daher die Distribution.

Tomcat aus der Ubuntu-Distribution

Im folgenden wird das Vorgehen für Ubuntu Linux beschrieben. Hier wird das Kernmodul 5.0 mit Tomcat9 unter Ubuntu 22.04 eingerichtet.

Zunächst wechseln sie in die root-Shell mit

sudo  -i
apt-get  install  openjdk-11-jdk  tomcat9

und direkt stoppen mit

systemctl  stop  tomcat9.service

Zur Sicherheit alte kompilierte Klassen löschen:

rm -r /var/lib/tomcat9/work/*

chown  -R  tomcat:tomcat  /var/lib/tomcat9/webapps/

In der Datei

/etc/tomcat9/server.xml

beim jew. Connector port="...." das Attribut

URIEncoding="UTF-8"

ergänzen, also z.B.

Wenn Sie den Apache über mod_jk anbinden, müssen Sie den Konnektor "AJP1.3" einschalten:

Das Attribut secret wird im Apache-seitig in der workers.properties gesetzt.

Dann in der /etc/default/tomcat die Zeilen

JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
JAVA_OPTS="-Djava.awt.headless=true  -DSuperX-DB-PROPERTIES-SET=true  -Xmx3700M"

eintragen (der letzte RAM Parameter ist nur ein Beispiel).

Dann in der Datei

/usr/lib/systemd/system/tomcat9.service

die Zeile

EnvironmentFile=/etc/default/tomcat9

ergänzen

Dann führen Sie aus:

systemctl  daemon-reload

und starten Tomcat mit:

systemctl  start  tomcat9.service

Danach können Sie den Zugriff im Browser testen, beim Port 8080 z.B.

http://localhost:8080/superx/

Wenn Sie Tomcat jeden morgen automatisch neu starten wollen können Sie für den User root einen cronjob einrichten:

30  4  *  *  *  /bin/systemctl  try-restart  tomcat9

Tomcat unter SuSE Linux

Sie installieren Tomcat aus der Distribution mit

zypper  -n  in  -l  tomcat

Bei Suse Linux wird der interne Tomcat unter /usr/share/java/tomcat installiert, die Konfiguration liegt in /etc/tomcat

Wenn Sie diesen Tomcat nutzen möchten, sollten Sie die komplette SuperX Installation unter dem Tomcat Benutzer welcher von Suse angelegt wurde (tomcat) durchführen.

Zuerst muss der Tomcatuser Shell-Rechte bekommen. Dazu editieren Sie als root die /etc/passwd und geben in der Zeile vom Tomcatuser am Ende /bin/bash ein.

Danach können Sie ggf. das Verzeichnis /usr/share/tomcat/superx anlegen und dort die Dateien des alten $SUPERX_DIR hinkopieren. Dementsprechend auch in der SQL_ENV das $SUPERX_DIR auf /usr/share/tomcat/superx setzen. Die Dateirechte müssen dem Tomcatuser zugeteilt werden.

Es ist auch sinnvoll für den Tomcatuser die Dateien wie .bashrc und .profile und Ordner .ssh anzulegen und rechte auf tomcat:tomcat zu geben. Damit können Sie dann aliases wie ll vergeben und auch bei login automatisch die SQL_ENV laden.

Jetzt melden Sie sich mit der TomcatKennung an.

Nun müssen wir die SuperX-Webanwendung in den Suse-Tomcat integrieren, d.h. der im Kernmodul mitgelieferte Tomcat wird gar nicht benutzt, aber den webapps-Ordner darin schon. Wenn SuperX nun unter /usr/share/tomcat/superx liegt, und das Kernmodul hier entpackt wird, liegt die Webanwendung in /usr/share/tomcat/superx/webserver/tomcat/webapps.

Diesen Pfad tragen Sie in der /etc/tomcat/server.xml ein:

Weiter oben setzen Sie bei Betrieb in UTF-8 noch das URIEncoding="UTF-8":

und ggf. auch

Damit ist der UbuntuTomcat in SuperX integriert.

Beispiel-Befehle für Tomcat:

Starten:

rctomcat  start

Stoppen:

rctomcat  stop

Neustarten:

rctomcat  restart

Und die Logdateien liegen hier: /var/log/tomcat/*

Damit der Server beim Booten hochfährt, geben Sie ein:

chkconfig  --set  tomcat  on

Variablen wie CATALINA_OPTS setzen Sie hier: /etc/sysconfig/tomcat

z.B.

CATALINA_OPTS="-DSuperX-DB-PROPERTIES-SET=true  -Xmx4700M  -Djava.awt.headless=true  -Dfile.encoding=UTF-8  -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false  "

Tomcat aus der Distribution mit abweichender Userkennung oder anderem webapps-Verzeichnis

Wenn Sie Tomcat aus der Distribution nutzen, läuft der Dienst unter der Kennung "tomcat", und das webapps-Verzeichnis liegt in /var/lib/tomcat9.

Standardmäßig hat der User des Tomcat-Dienstes keine Login-Shell. Dies ist eine Sicherheitsvorkehrung, die vom BSI empfohlen wird.

Sie können das Verzeichnis der Webanwendung/en auch verschieben, indem sie in der Datei

/etc/tomcat9/server.xml beim Element "host" das Attribut "appBase" anpassen. Die Auslieferung ist

stattdessen könnten Sie z.B. schreiben

Achtung: Der Tomcat-Dienst der Distribution muss unter der Kennung "tomcat" laufen. Wenn Sie für SuperX z.B. mit der Kennung "superx" arbeiten und den webapps-Ordner z.B. in /home/superx/webserver/tomcat/webapps nutzen, müssen Sie

usermod  -G  tomcat  -a  superx
chown  -R  superx:tomcat    /home/superx/webserver/tomcat/webapps
chmod  -R  g+rw  /home/superx/webserver/tomcat/webapps/superx/WEB-INF/logs

Wenn Sie als User superx neue Dateien anlegen müssen Sie die obigen Kommandos wiederholen, damit Tomcat Schreibrecht bekommt. Ggf. automatisieren Sie dies mit einem Cronjob. Alternativ tragen Sie in der Shell (z.B. in der Datei ~/.bashrc) das Kommando ein:

#Full  access  to  user  and  group,  none  for  others:
umask  u=rwx,g=rwx,o=

Damit haben neue Dateien direkt die Gruppenrechte, die Tomcat benötigt.

Beachten Sie bitte auch die Hinweise für Tomcat und Kettle.

Tomcat und Kettle

Sie sollten im Homeverzeichnis des Users, der den Tomcat startet, den Ordner ".kettle" anlegen, mit der Datei "kettle.properties". Diese Datei kann auch leer sein. Als root z.B. für Ubuntu 2022.04:

mkdir  /var/lib/tomcat9/.kettle
chown  tomcat:tomcat  /var/lib/tomcat9/.kettle
touch  /var/lib/tomcat9/.kettle/kettle.properties
chown  tomcat:tomcat  /var/lib/tomcat9/.kettle/kettle.properties

Das Homeverzeichnis des Users "tomcat" liegt bei Ubuntu 2020.04 standardmäßig in "/", das sollten Sie in der /etc/passwd ändern nach /var/lib/tomcat9. In Ubuntu Linux 2022.04 ist das Problem behoben.

Tomcat manuell installieren

Sie können auch spezielle Versionen von Tomcat herunterladen und installieren. Oder sie laden das SuperX-Kernmodul Paket herunter, da ist ein aktueller Tomcat bereits enthalten. Speicherort wäre z.B. in /home/superx/webserver/tomcat.

Tomcat als Dienst

Damit Tomcat bei Systemstart automatisch hochfährt, und beim Herunterfahren kontrolliert gestoppt wird, muss man einen Dienst anlegen.

In modernen Linuxen geht das mit dem Tool "systemd", was wiederum kontrolliert wird durch den Kommandozeilen Befehl "systemctl".

Damit dieser als Dienst läuft, muss man Linux wie folgt konfigurieren: Nehmen wir als Beispiel, dass das Kernmodul unter /home/superx liegt und Tomcat vom User superx gestartet wird.

Service-Scripte

Zunächst legen wir als User superx im Verzeichnis tomcat/bin zwei Dateien an:

startup_service.x

#
#  Startup  script  for  Apache  Tomcat  with  systemd
#
set  -e
#  Load  the  service  settings
.  /home/superx/db/bin/SQL_ENV
CATALINA_BASE=/home/superx/webserver/tomcat
CATALINA_HOME=/home/superx/webserver/tomcat
CATALINA_TMPDIR=/home/superx/webserver/tomcat/temp
#  Start  Tomcat
cd  $CATALINA_BASE  &&  exec  $CATALINA_HOME/bin/catalina.sh  run

und shutdown_service.x:

#  Shutdown  script  for  Apache  Tomcat  with  systemd
#
set  -e
#  Load  the  service  settings
.  /home/superx/db/bin/SQL_ENV
CATALINA_BASE=/home/superx/webserver/tomcat
CATALINA_HOME=/home/superx/webserver/tomcat
CATALINA_TMPDIR=/home/superx/webserver/tomcat/temp
#  Stop  Tomcat
cd  $CATALINA_BASE  &&  exec  $CATALINA_HOME/bin/catalina.sh  stop

In der Datei SQL_ENV muss dann noch der Ordner /usr/bin in den PATH aufgenommen werden. Daher am besten am Anfang die Zeilen

PATH=$PATH:/usr/bin
export  PATH

setzen. Außerdem muss im Kopf der SQL_ENV

#!/bin/bash

stehen, damit die Bash genommen wird.

Dienst einrichten

Legen Sie als User root die Datei /etc/systemd/system/tomcat_superx.service an, mit dem Inhalt:

[Unit]
Description=Tomcat  SuperX
After=syslog.target
After=network.target
After=postgresql.service

[Service]
RestartSec=2s
Type=simple
User=superx
Group=users
WorkingDirectory=/home/superx/webserver/tomcat/bin
ExecStart=/bin/bash  /home/superx/webserver/tomcat/bin/startup_service.x
ExecStop=/bin/bash  /home/superx/webserver/tomcat/bin/shutdown_service.x
EnvironmentFile=/home/superx/db/bin/SQL_ENV
[Install]
WantedBy=multi-user.target

Den Dienst aktivieren Sie dann mit

systemctl  enable  tomcat_superx

und starten ihn dann mit

systemctl  start  tomcat_superx

Bei Problemen kann man die Fehlerausgabe anzeigen:

journalctl  -xe

Für die Logmeldungen nur des einen Dienstes (und diese dann "rückwärts" lesen) geben Sie ein:

journalctl  -u  tomcat_superx  -r

Wenn man die .service-Datei ändert, muss man die Dienste neu laden:

systemctl  daemon-reload

Alle Dienste anzeigen können Sie mit

service  --status-all

Den Dienst deaktivieren Sie mit

systemctl  disable  tomcat_superx

Ein Fallstrick: ein Dienst kann Probleme machen, wenn die SQL_ENV zu komplexe Bash-Kommandos enthält. In diesem Falle müssen Sie eine abgespeckte TOMCAT_ENV erstellen, die nur die Variablen zuweist.

Wenn Sie Tomcat jeden Morgen automatisch neu starten wollen können Sie einen Cronjob des Users root einrichten:

30  4  *  *  *  /bin/systemctl  try-restart  tomcat_superx

Tomcat Logging

Tomcat Logging mit systemd

Normalerweise loggt Tomcat in das Verzeichnis

$CATALINA_BASE/logs/catalina.out

Ab Tomcat 9 aus der Linux Distribtion mit systemd als Service-Script gibt es diese Datei nicht mehr, die Logausgabe geht direkt ins Systemprotokoll. Dies müsssen Sie mit dem Kommando

journalctl

Das Kommando kann auch auf Fehler filtern:

journalctl  -xe

Sie können die Logmeldungen auch auf den Dienst tomcat9 einschränken, und dabei "rückwärts" lesen:

journalctl  -u  tomcat9  -r

Mit folgendem Kommando können Sie die Logdatei rückwärts abfragen und Zeiträume eingrenzen, z.B.:

journalctl  -rb  --since="today"  --until="2020-08-19  10:00:00"

Weitere Details siehe manpage.

Wir finden das unpraktisch. Ab SuperX 5.1 bzw. HISinOne-BI 2023.12 wird die Logausgabe nicht mehr in system-log geschrieben, sondern in die Datei CATALINA_BASE/logs/superx.log

Apache Anbindung

In Systemumgebungen, in denen bereits ein Webserver wie Apache läuft, bietet es sich an, den SuperX-Tomcat mit dem Webserver zu verbinden. Der Webserver kann so konfiguriert werden, dass Aufrufe zu http://<>/superx direkt an Tomcat weitergeleitet werden können. Dies hat auch den Vorteil, dass die ungewöhnlichen Ports von Tomcat (8080 bzw. 8443) nicht in der Firewall freigegeben werden müssen. Außerdem kann die Verschlüsselung vom Apache durchgeführt werden, und es kann ein Load-Balaning eingeführt werden (Lastausgleich zwischen 2 Tomcat-Servern, gesteuert vom Apache). Wir empfehlen daher generell die Anbindung von Tomcat an den Apache für einen Produktivbetrieb.

Für die Anbindung gibt es zwei Apache-Module bzw. Möglichkeiten:

ProxyPass

Unter Red Hat kann es mit der bisherigen empfohlenen Anbindungsmethode ‘mod_jk’ schwierigkeiten geben. Mit ProxPass hat es gut funktioniert und die Konfiguration war wesentlich einfacher.

Das Modul ‘ProxyPass’ muss installiert und im Apache aktiviert / geladen werden. Danach muss in der Apache Konfiguration folgende Zeile für den AJP Konnector ergänzt werden :

ProxyPass "/superx" "ajp://<>:8009/superx"

Falls die Verbindung zu dem Tomcat über den Standard-Port laufen soll wird folgende Zeile benötigt:

ProxyPass "/superx" "https://<>:8443/superx"

Das war schon alles. Eine Empfehlung können wir mangels fehlender Erfahrung noch nicht geben.

Mod-JK

Das Apache Modul mod_jk ist schon sehr lange im Einsatz und über die jew. Linux Distribution relativ leicht installierbar. Man kann es aber auch manuell installieren. "JK" steht übrigens für "Jakarta", das ist der ursprüngliche Name des Apache-Produkts für Java-basierte Webanwendungen, also gewissermaßen der Vorläufer von Tomcat. Im folgenden beschreiben wir die Installation, und danach die Einrichtung.

Mod-JK unter Ubuntu Linux

Bei Debian / Ubuntu wird das Paket installiert mit

apt-get  install  libapache2-mod-jk

Danach muss man es noch aktivieren mit

a2enmod  jk

Danach ist das Modul im Apache verfügbar.

Mod-JK unter SuSE Linux

Bei Suse wird das Paket installiert mit

zypper  -n  in  -l  apache2-mod_jk

Die Konfiguration kann man in /etc/tomcat/conf.d ablegen, also z.B. die Datei superx_mod_jk.conf.(s.u.).

Einrichtung Mod-JK im mit SuperX ausgelieferten Tomcat

Nun kann die Konfiguration des Mod-JK beginnen, was im folgenden Kapitel beschrieben ist. In der SuperX-Distribution sind die Tomcat-spezifischen Dateien für die Anbindung an den Apache via mod_jk bereits enthalten, es müssen lediglich ein paar Anpassungen gemacht werden:

*  Bei  manchen  mod_jk-  oder  Apache  Versionen  muss  man  noch  die  Zeile
JkMountCopy  All

hinzufügen, siehe Hyperlink.

workers.tomcat_home

auf den richtigen Pfad gesetzt werden. Ausserdem muss der richtige Pfad für workers.java_home gesetzt werden, sowie der Pfad-Demiliter ps für das Betriebssystem ("/" für Unix, "\" für Win, ":" für Mac)

Include  /home/superx/webserver/tomcat/conf/superx_mod_jk.conf

ein (oder stellen das Script nach /etc/apache2/conf.d dann wird es automatisch gelesen). Außerdem müssen Sie ggf. die Umgebungsvariable DirectoryIndex auf index.htm setzen (nicht nur index.html), da die Startseite in den Verzeichnissen immer index.htm heißt.

worker.ajp13.connection_pool_timeout=600

und in tomcat/conf/server.xml bei 8009 Konnektor connectionTimeout="60000" (http://tomcat.apache.org/connectors-doc/generic_howto/timeouts.html)

worker.ajp13.session_keepalive=1

setzt. (http://tomcat.apache.org/connectors-doc/generic_howto/timeouts.html Firewall Connection Dropping)

Einrichtung Mod-JK unter Suse Linux

Das folgende Vorgehen wurde getestet unter SUSE Linux Enterprise Server 12 SP3 (x86_64), d.h. Apache 2.4 und Tomcat 8:

Wenn Sie den in Suse Linux eingebauten Apache und Tomcat nutzen, gehen Sie wie folgt vor (Beispielwebanwendung liegt in /usr/share/tomcat/superx/webserver/tomcat/webapps/superx):

Kopieren Sie die Dateien superx_mod_jk.conf.sam und workers.properties.sam nach /etc/tomcat/conf.d/superx_mod_jk.conf bzw. workers.properties.

Setzen Sie in der Datei superx_mod_jk.conf:

LoadModule  jk_module  /usr/lib64/apache2/mod_jk.so
JkWorkersFile  /etc/tomcat/conf.d/workers.properties
JkLogFile  /var/log/tomcat/mod_jk.log
JkLogLevel  error
JkMountCopy  All
JkMount  /*.jsp  ajp13
JkMount  /servlet/*  ajp13
Alias  /superx  "/usr/share/tomcat/superx/webserver/tomcat/webapps/superx"

Options  Indexes  FollowSymLinks

JkMount  /superx/servlet/*  ajp13
JkMount  /superx/*  ajp13

AllowOverride  None
Require  all  denied


AllowOverride  None
Require  all  denied

Setzen Sie in der Datei workers.properties:

workers.tomcat_home=/usr/share/tomcat
workers.java_home=/usr/lib64/jvm
ps=/
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1

Dann binden Sie die Dateien in den Apache ein, indem Sie in der Datei /etc/sysconfig/apache2 die Zeile

APACHE_CONF_INCLUDE_FILES="/etc/tomcat/conf.d/superx_mod_jk.conf"

ergänzen.

Danach starten Sie den Apache mit

rcapache2  restart

Logmeldungen des mod_jk liegen in /var/log/tomcat/mod_jk.log.

Damit der Apache Server beim Booten hochfährt, geben Sie ein:

chkconfig --set apache2 on

Einrichtung Mod-JK unter Ubuntu Linux

Das folgende Vorgehen wurde getestet unter Ubuntu Linux Server 22.04 (x86_64), d.h. Apache 2.4 und Tomcat 9:

Installieren Sie Java OpenJDK 11, Tomcat 9, Apache 2.4 und mod_jk:

apt-get  update
apt-get  install  -y  openjdk-11-jdk
apt-get  install  -y  tomcat9
apt-get  install  -y  apache2  libapache2-mod-jk

Das mod_jk wird automatisch aktiviert, die Konfiguration landet defaultmäßig in der Datei

/etc/apache2/mods-available/mod_jk.conf

Entfernen Sie dann die -Elemente jk-manager und jk-status.

Wenn Sie den in Ubuntu Linux eingebauten Apache und Tomcat nutzen, gehen Sie wie folgt vor (Beispielwebanwendung liegt in /var/lib/tomcat9/webapps/superx):

Alias  /superx  "/var/lib/tomcat8/webapps/superx"

Options  Indexes  FollowSymLinks

JkMount  /superx/servlet/*  ajp13
JkMount  /superx/*  ajp13

AllowOverride  None
deny  from  all


AllowOverride  None
deny  from  all

JkMountCopy  All

Setzen Sie in der Datei /etc/libapache2-mod-jk/workers.properties

workers.tomcat_home=/var/lib/tomcat9
workers.java_home=/usr/lib/jvm/java-11-openjdk-amd64
ps=/
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1
worker.ajp13.secret=geheim

Danach starten Sie den Apache mit

/etc/init.d/apache2  start

Logmeldungen des mod_jk liegen in

/var/log/apache2/mod_jk.log.

Einrichtung Mod-JK Load Balancing

Mit dem eingerichteten mod_jk lässt sich recht einfach ein Lastausgleich zwischen mehreren Tomcats oder eine Trennung von Apache und Tomcat auf zwei Server implementieren. Die Konfiguration findet statt im Apache-Konfigurationsverzeichnis in der Datei workers.properties. Hier wird ein zweiter Worker eingerichtet, z.B. für einen anderen Tomcat Server "miles":

worker.list=loadbalancer
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
worker.worker2.port=8010
worker.worker2.host=miles
worker.worker2.type=ajp13
#
#  Specifies  the  load  balance  factor  when  used  with
#  a  load  balancing  worker.
#  Note:
#    ---->  lbfactor  must  be  >  0
#    ---->  Low  lbfactor  means  less  work  done  by  the  worker.
worker.worker2.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=worker1,worker2

Zunächst muss in der server.xml auf dem Rechner, auf dem der erste Tomcat läuft, ein AJP-Connector eingerichtet werden, z.B. am Port 8009.

Auszug aus der server.xml des ersten Tomcat-Rechners

Der AJP-Connector am Port 8010 muss dann auf dem zweiten Tomcat-Server in der server.xml eingetragen werden (nur dieser, nicht der 8009er).

Danach kann in der mod_jk-Konfigurationsdatei ein Lastausgleich eingerichtet werden:

JkMount  /superx/servlet/*  loadbalancer
JkMount  /superx/*  loadbalancer

Mod-JK und Tomcat Sicherheit

Mit Tomcat 8.5 wurden die Defaulteinstellungen für die Mod-JK Anbindung verschärft:

Hier ein Beispiel:

worker.list=superx_tomcat
worker.superx_tomcat.port=8009
worker.superx_tomcat.host=localhost
worker.superx_tomcat.type=ajp13
worker.superx_tomcat.secret=geheim

Wenn Sie nur auf localhost arbeiten und den Port 8009 nicht nach außen freigeben, können Sie in der server.xml auch

secretRequired="false"

setzen. Damit entfällt die Notwendigkeit eines Passworts.

Weitere Tipps zur Tomcat Sicherheit siehe https://tomcat.apache.org/tomcat-9.0-doc/security-howto.html

Einrichtung SSL

SSL Varianten

Sie können Tomcat selbst SSL verschlüsseln lassen, aber normalerweise wird die Verschlüsselung im Webserver eingerichtet.

SSL im Webserver

Einrichten von SSL beim Apache 2.x unter SuSE Linux

Das Modul ssl ist im Apache 2.x nicht mehr separat zu installieren, sondern bereits im Lieferumfang enthalten, das Modul muss nur in den entsprechenden LoadModule und Include-Abschnitten geladen werden.

Wir führen alle Schritte als user root durch, und gehen z.B. davon aus, dass wir uns im Verzeichnis /root befinden.

Zunächst muss ein Zertifikat erzeugt werden. Das öffentliche CA-Zertifikat liegt z.B. in /root/demoCA/cacert.pem und der private Schlüssel liegt in /root/demoCA/private/cakey.pem..

Nun werden die Schlüssel dem Apache2 bekannt gemacht. Die einzelnen Konfigurationsparameter werden bei SuSE Linux über die Sysconfig gesetzt:

SuSE-typisch wird die Konfiguration in einer Datei im Verzeichnis /etc/sysconfig abgelegt, nämlich in apache2. Dort setzen Sie in der Direktive

APACHE_CONF_INCLUDE_FILES="/home/superx/webserver/tomcat/conf/superx_mod_jk.conf  /etc/apache2/vhosts.d/myhost-ssl.conf"

die Tomcat-Anbindung und den Virtuellen SSL-Host. Letzteren konfigurieren Sie am besten, indem Sie die Vorlage /etc/apache2/vhosts.d/vhost-ssl.template kopieren, z.b. wie oben nach myhost-ssl.conf.

Weiter unten in /etc/sysconfig/apache2 setzen Sie die Direktive

APACHE_SERVER_FLAGS="SSL"

Damit werden in verschiedenen anderen conf-Dateien die Abfragen

Nach dem Ändern der Datei /etc/sysconfig/apache2 müssen Sie als User root das Script SuSEconfig ausführen.

Bei anderen Linux-Distributionen entfällt die sysconfig. Auch unabhängig von der Distribution wird beim Apache2 nicht mehr die gesamte Konfiguration in einer großen httpd.conf gesammelt, sondern in separaten conf-Dateien. Bei virtuellen Hosts zum Beispiel befinden sich die Konfigurationen in Dateien mit der Endung *.conf im Verzeichnis vhosts.d. Der Startpunkt ist aber immer die httpd.conf (standardmäßig in /etc/apache2).

Wenn Sie keine Virtual Hosts nutzen, dann können Sie den Abschnitt, der im Konfigurationsbeispiel /etc/apache2/vhosts.d/vhost-ssl.template beschrieben ist auch in der Datei /etc/apache2/default-server.conf einfügen:

/etc/apache2/default-server.conf

##
##  SSL  Virtual  Host  Context
##
SSLCertificateFile  /root/demoCA/cacert.pem
#SSLCertificateFile  /etc/apache2/ssl.crt/server.crt
#SSLCertificateFile  /etc/apache2/ssl.crt/server-dsa.crt
#    Server  Private  Key:
#    If  the  key  is  not  combined  with  the  certificate,  use  this
#    directive  to  point  at  the  key  file.  Keep  in  mind  that  if
#    you've  both  a  RSA  and  a  DSA  private  key  you  can  configure
#    both  in  parallel  (to  also  allow  the  use  of  DSA  ciphers,  etc.)
SSLCertificateKeyFile  /root/demoCA/private/cakey.pem
#SSLCertificateKeyFile  /etc/apache2/ssl.key/server.key
#SSLCertificateKeyFile  /etc/apache2/ssl.key/server-dsa.key
...

Danach müssen Sie in /etc/sysconfig/apache2 die Systemvariable HTTPD_START_TIMEOUT auf einen sinnvollen Wert setzen, z.B. 10. Danach wie immer SuSEconfig ausführen.

Sie haben dann beim Start des Apache 10 Sek. Zeit, dass CA-Passwort einzugeben.

Wenn sie wünschen, dass der Apache beim Booten ohne Passwort-Abfrage startet, dann müssen Sie das CA-Passwort löschen und die Leserechte für den privaten Schlüssel ändern (nur root und der Apache-Daemon haben Leserecht)

Auch in der offiziellen Doku von mod_ssl wird dies empfohlen, mit dem Zusatz,dass nur root und der apache-daemon diese Datei lesen darf.

http://www.modssl.org/docs/2.0/#FAQ-nopass

. Dies ist allerdings ein Sicherheitsrisiko; der Server wird leichter kompromittierbar, wenn ein Hacker auf den Rechner kommt und die Datei lesen kann, kann er den Schlüssel missbrauchen. Unserer Erfahrung nach ist aber nur dieser Weg gangbar, denn bei einem Reboot nach Stromausfall würde der gesamte Webserver sonst nicht laufen!

Wir geben als root im Verzeichnis /root/demoCA/private ein:

openssl  rsa  -in  cakey.pem  -out  cakey2.pem

(1x mit der Passphrase bestätigen).

Dann wird ein Schlüssel ohne Passphrase erzeugt. Wenn wir diesen dann wiederum in /etc/httpd/httpd.conf eintragen:

#SSLCertificateKeyFile  /root/demoCA/private/cakey.pem
SSLCertificateKeyFile  /root/demoCA/private/cakey2.pem

Dann startet der Apache ohne Passwortabfrage. In diesem Fall kann man auch die Variable HTTPD_START_TIMEOUT auf 1 zurücksetzen.

Wenn Sie Ihr Zertifikat bei einer Zertifizierungstelle signieren lassen möchten, müssen eine outline|Zertifizierungsanfrage erstellen.

Mit dem oben erstellten CA-Zertifikat können Sie Ihr http-Zertifikat folgendermaßen selbst signieren:

/usr/share/ssl/misc/CA.sh  -sign

Es wird eine Datei newcert.pem erzeugt. Nachdem Sie nun ein signiertes Zertifikat für Ihre Anwendung erstellt haben, müssen Sie dieses nur noch in das entsprechende Verzeichnis kopieren und in der Konfigurationsdatei eintragen. Der Apache erwartet den privaten Schlüssel in einer separaten Datei, in solchen Fällen können Sie den privaten Schlüssel wie folgt extrahieren

openssl  rsa  -in  newreq.pem  -out  newkey.pem

Einrichten von SSL beim Apache 2.x unter Ubuntu Linux

Zunächst erzeugen Sie ein Zertifikat:

mkdir  /etc/apache2/ssl
openssl  req  -x509  -nodes  -days  1095  -newkey  rsa:2048  -out  /etc/apache2/ssl/server.crt  -keyout  /etc/apache2/ssl/server.key

Das Zertifikat binden Sie in der conf-Datei ein, defaultmäßig /etc/apache2/sites-enabled/000-default.conf:

Danach aktivieren Sie SSL mit

a2enmod  ssl

Sie können unter Ubuntu auch den Apache ssl-virtual host aktivieren

a2ensite  default-ssl.conf

Dann können Sie den Port 80 auf den Port 443 umleiten:

Und dann starten Sie Apache neu mit

/etc/init.d/apache2  restart

Zertifikate mit Let's encrypt

Mit ACME unter Linux lassen sich Zertifikate von der Initiative Let's encrypt signieren lassen. Die Zertifikate sind 3 Monate gültig, und haben eine eingebaute automatische Verlängerung implementieren. Gehen Sie dazu wie folgt vor:

Clonen Sie das Projekt von GitHub:

git clone https://github.com/Neilpang/acme.sh.git

Es wird ein Verzeichnis "acme.sh" erzeugt, mit dem Script "acme.sh". Dieses kopieren Sie als User root auf den Server, z.B. nach /root.

apt-get  install  socat

Dann installieren Sie den cronjob zum Aktualisieren:

./acme.sh  --install

Der Cronjob prüft jede Nacht um 0:44 Uhr, ob das Zertifikat abgelaufen ist, wenn nicht wird es erneuert. Danach müssen Sie die Shell neu öffnen, und bei zerossl registrieren:

./acme.sh  --register-account  -m  git@superx-cloud.de  --server  zerossl

Dann erzeugen Sie die Zertifikatsdateien, am Beispiel der Domain "superx-cloud.de" auf einem Ubuntu-Apache, d.h. documentRoot ist /var/www/html :

./acme.sh  --issue  -d  superx-cloud.de  -w  /var/www/html

Voraussetzung ist das Apache auf Port 80 läuft und die Firewall auf Port 80 frei ist (iptables).

Dann installieren Sie die Dateien in den Apache, die Beispielverzeichnisse stammen aus der Ubuntu-Apache-Installation. Ggf. müssen Sie das Verzeichnis /etc/apache2/ssl noch erzeugen.

mkdir  -p  /etc/apache2/ssl

./acme.sh  --install-cert  -d  superx-cloud.de  --cert-file  /etc/apache2/ssl/server.crt  --key-file  /etc/apache2/ssl/server.key  --fullchain-file  /etc/apache2/ssl.crt/server-ca.crt

SSL Aktivieren

a2enmod  ssl

Apache ssl-virtual host ggf. aktivieren, unter Ubuntu:

a2ensite  default-ssl.conf

Darin

ServerName      superx-cloud.de
SSLCertificateFile  /etc/apache2/ssl/superx-cloud.de.crt
SSLCertificateKeyFile  /etc/apache2/ssl/superx-cloud.de.key
SSLCertificateChainFile  /etc/apache2/ssl/superx-cloud.de-fullchain.crt
SSLCACertificateFile  /etc/apache2/ssl/superx-cloud.de-intermediate.crt

Danach starten Sie Apache neu.

SSL im Tomcat

Wenn Sie nicht die Möglichkeit die Verschlüsselung vom Webserver (Apache oder IIS) nutzen wollen, können Sie auch direkt im Tomcat verschlüsseln. Im folgenden eine Anleitung, wenn kein öffentlich bekanntes und signiertes Zertifikat genutzt werden soll. Große Teile wurden übernommen aus der Tomcat Dokumentation "ssl-howto.html".

Erzeugen Sie zunächst auf dem Applikationsserver einen Keystore mit dem Befehl

Windows:

%JAVA_HOME%\bin\keytool  -genkey  -alias  tomcat  -keyalg  RSA

UNIX:

$JAVA_HOME/bin/keytool  -genkey  -alias  tomcat  -keyalg  RSA

Die Parameter werden erfragt; wichtig ist, dass der erste Eintrag (Vor- und Nachname, COMMON NAME CN) der DNS-Name des Werbservers ist, z.B. superx.verwaltung.uni-duisburg.de. Als Passwort geben Sie beide Male z.B. "changeit" an (das ist nur ein Beispielpasswort für die Dokumentation, natürlich sollten Sie das Passwort ändern). Daraufhin wird ein Zertifikat erzeugt und in der Datei .keystore im Homeverzeichnis des Benutzers angelegt (unter Windows im Profiles-Verzeichnis, unter UNIX im home-Verzeichnis).

Das persönliche Zertifikat können Sie durch einen kommerziellen Zertifizierungsserver publizieren; zu Testzwecken können Sie auch ein selbsterstelltes Zertifikat erzeugen:

keytool  -selfcert  -alias  tomcat  -validity  -Anzahl  der  Tage-

Danach ändern Sie die Datei $TOMCAT_HOME/conf/server.xml, indem Sie die Passage mit der SSL-Verschlüsselung (z.B. 8443) ent-kommentieren und den normalen Port (8080) auskommentieren.

<Connector  port="8443"  protocol="HTTP/1.1"  SSLEnabled="true"
maxThreads="150"  scheme="https"  secure="true"
clientAuth="false"  sslProtocol="TLS"
keystorePass="changeit"  keystoreFile="/home/superx/.keystore"
/>

Danach ist die Webanwendung über https://localhost:8443 statt http://localhost:8080 erreichbar. Sie müssen alle Links entsprechend ändern.

Das Zertifikat können Sie löschen, indem Sie auf der Kommandozeile eingeben:

keytool -delete -alias tomcat

Signierung eines Zertifikats in Tomcat

Bei selbst signierten Zeritfikaten erscheint im Browser immer eine Sicherheitswarnung. Um dies zu vermeiden, muss man ein öffentliches Zertifikat von einem Trust Center erwerben. Dies kann man im Apache eintragen (s.u.), aber auch direkt im Tomcat, wenn Sie keinen Apache nutzen:

keytool  -genkey  -keyalg  RSA  -alias  tomcat  -keystore  xxx.jks
keytool  -certreq  -keyalg  RSA  -file  server.csr  -keystore  xxx.jks
keytool  -import  -file  UTN.cer  -alias  tomcat  -keystore  xxx.jks
keytool  -import  -file  server.cer  -alias  tomcat  -keystore  xxx.jks
keystoreFile="<