Dies ist eine alte Version des Dokuments!


IdP-Vorarbeiten: Tomcat

root@idp:~# apt install tomcat9

CentOS 7 bringt über das Repository noch Tomcat 7 mit. Neuere Versionen können Sie manuell installieren.

root@idp:~# yum -y install tomcat

OpenSUSE Leap 15 kommt mit Tomcat 9.

root@idp:~# zypper install tomcat

Einige globale Java-Parameter müssen beim Tomcat-Start festgelegt werden. Das IdP-Servlet benötigt mehr Speicher, als gemäß den Voreinstellungen vorgesehen ist und Zugriff auf das Filesystem:

/etc/default/tomcat9
# den Tomcat mit genug Speicher starten:
JAVA_OPTS="-Djava.awt.headless=true -XX:+UseConcMarkSweepGC -Xms1024m -Xmx2048m"

Für die Schreibberechtigungen vom Tomcat müssen ein Verzeichnis und eine Override-Konfiguration für Systemd angelegt werden:

root@idp:~# mkdir /etc/systemd/system/tomcat9.service.d

Die Datei wird in dem soeben erstellten Verzeichnis angelegt:

/etc/systemd/system/tomcat9.service.d/override.conf
[Service]
ReadWritePaths=/opt/shibboleth-idp/logs/
ReadWritePaths=/opt/shibboleth-idp/metadata/

Anschließend:

root@idp:~# systemctl daemon-reload

Die Tomcat-Start-Optionen werden in /etc/tomcat/tomcat.conf festgelegt.

In der Tomcat-Configuration wird dann

  • aus Sicherheitsgründen der Default-Port 8080 abgeschaltet
  • auf Port 8009 der AJP-Connector aktiviert über den der vorgelagerte Webserver Anfragen an Tomcat weiterleitet
/etc/tomcat9/server.xml
   <!-- ... -->
  <Service name="Catalina">
    <!-- ... -->
    <!-- non-SSL/TLS HTTP/1.1 Connector on port 8080 abschalten -->
    <!-- <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" /> -->
    <!-- ... -->
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009"
               address="127.0.0.1"
               protocol="AJP/1.3"
               redirectPort="8443"
               enableLookups="false"
               useIPVHosts="true"
               maxPostSize="100000"
               URIEncoding="UTF-8" />
    <!-- ... -->
  </Service>
  <!-- ... -->

IdP-Sessions gehen bei einem Tomcat-Neustart in jedem Fall verloren. Daher ergibt es keinen Sinn (bzw. führt nur zu unnötigen IdP-Fehlermeldungen), einzustellen, dass alte Sessions über Tomcat-Neustarts persistiert werden sollen. Deaktivieren Sie daher dieses Tomcat-Feature:

/etc/tomcat9/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
     ...
-->
<!-- The contents of this file will be loaded for each web application -->
<Context>
 
    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
 
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
 
    <!-- siehe https://wiki.shibboleth.net/confluence/display/IDP30/ApacheTomcat8 -->
    <Manager pathname="" />
 
</Context>

Unter Debian 10 kann die JSTL aus dem Debian-Repository installiert werden:

root@idp:~# apt install libtaglibs-standard-impl-java

Anschließend muss der Pfad zur .jar-Datei noch /etc/tomcat9/catalina.properties hinzugefügt werden:

/etc/tomcat9/catalina.properties
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar","/usr/share/java/*.jar"
root@idp:~# zypper install jakarta-taglibs-standard

Um das IdP-Servlet im Tomcat zu aktivieren, erstellen Sie folgende Datei im Tomcat-localhost-Context:

/etc/tomcat9/Catalina/localhost/idp.xml
<Context docBase="/opt/shibboleth-idp/war/idp.war"
         privileged="true"
         unpackWAR="true"
         antiResourceLocking="false"
         swallowOutput="true" />

Sie haben jetzt eine Tomcat-Konfiguration, die nicht startet, solange nichts unter /opt/shibboleth liegt!

Weiter geht es mit dem Webserver.

  • Zuletzt geändert: vor 3 Monaten