Tomcat SSL Konfiguration

Zertifikat

Eine Anleitung zum Ausstellen eines SSL Zertifikats unter Tomcat findet ihr in diesem Artikel.

HTTPS Connector

Die Tomcat Konfiguration für den Redirect ist am Aufwendigsten, da gleich 2 Konfigurationsdateien angepasst werden müssen. Zum Einen die Datei $CATALINA_HOME\conf\server.xml, in der die Port Connectors angelegt werden müssen und zum Anderen die Datei $CATALINA_HOME\WEB-INF\web.xml, in der die eigentliche Redirect-Konfiguration vorgenommen wird.

Hier eine grundlegende Konfiguration:

<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
<Connector
  protocol="org.apache.coyote.http11.Http11NioProtocol"
  port="8443"
  maxThreads="200"
  scheme="https"
  secure="true"
  SSLEnabled="true"
  keystoreFile="<Path>\<Keystore-File>.jks"
  keystorePass="<Keystore-Password>"
  clientAuth="false"
  sslProtocol="TLS"
/>

HTTP zu HTTPS Redirect

Nachdem ein HTTPS Connector in der Datei $CATALINA_HOME\conf\server.xml konfiguriert ist, möchte man meistens noch verhindern, dass der Webservice auf einem unverschlüsselten Port antwortet. Hierzu kann entweder der HTTP Connector entfernt oder ein Redirect von HTTP auf HTTPS eingerichtet werden. Letzteres wird in der Datei $CATALINA_HOME\WEB-INF\web.xml bewerkstelligt. Folgende Parameter sind hierzu im Bereich <web-app> einzufügen:

<web-app>
...
  <security-constraint>
    <web-resource-collection>
      <web-resource-name><Web-Resource></web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
  </security-constraint>
...
</web-app>

Protocol/Cipher Konfiguration

Die Tomcat Standardkonfiguration erlaubt nahezu jedes Protokoll (SSLv2, SSLv3, TLSv1, TLSv1.1, TLSv1.2). Da z.B. SSLv3 bereits heute (Stand 03/2018) als unsicher gilt, ist es wichtig, die verwendeten Protokolle und Cipher Gruppen einzuschränken, bzw. die Konfiguration auf sicher geltende Protokolle und Ciphers zu ändern. Hierzu ist der HTTPS Connector in der server.xml (siehe oben) anzupassen.

Konfiguration TLS v1.2 mit Unterstützung von TLS v1.1 und TLS v1.0

Im folgenden Beispiel konfigurieren wir TLS v1.2 als Standard SSL Protokoll, erlauben aber zusätzlich ältere TLS Versionen zur Verbesserung der Client-Kompatibilität.

<Connector
  protocol="org.apache.coyote.http11.Http11Protocol"
  port="8443" 
  SSLEnabled="true"
  maxThreads="200"
  scheme="https"
  secure="true"
  keystoreFile="<Path>\<Keystore-File>.jks"
  keystorePass="<Keystore-Password>"
  clientAuth="false"
  sslProtocol="TLSv1.2"
  sslEnabledProtocols="TLSv1.2,TLSv1.1,TLSv1"
  ciphers="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
           TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
           TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
           TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
           TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
           TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
           TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,
           TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
           TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
           TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
           TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,
           TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"
/>

Konfiguration TLS v1.2 ohne Unterstützung älterer TLS Versionen

Noch sicherer ist die ausschließliche Verwendung von TLS 1.2 wie im folgenden Beispiel.

<Connector
  protocol="org.apache.coyote.http11.Http11NioProtocol"
  port="8443"
  SSLEnabled="true"
  maxThreads="200"
  scheme="https"
  secure="true"
  keystoreFile="<Path>\<Keystore-File>.jks"
  keystorePass="<Keystore-Password>"
  clientAuth="false"
  sslProtocol="TLSv1.2"
  sslEnabledProtocols="TLSv1.2"
  ciphers="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
           TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
           TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
           TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
           TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
           TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
           TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,
           TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
           TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
           TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
           TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,
           TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"
/>

Quellen:
https://www.owasp.org/index.php/Securing_tomcat

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.