Implementierung SSL-Verbindung über Apache Tomcat

11.
Juli
2023
Veröffentlicht von: Andreas Mößel

Sicherheit ist keine Option, sondern eine Pflicht in der Kommunikation über das Internet. Deswegen sollte man auch die Verbindung zu den APEX-Anwendungen ordentlich absichern und ein SSL-Zertifikat in Tomcat einbinden, um potenziellen Angreifern weniger Einfallstore in das Netzwerk zu bieten.

Voraussetzungen

Für diesen Monatstipp wird vorausgesetzt, dass auf dem Server mindestens Apache Tomcat 9 und eine JDK 20 installiert ist, um die beschriebenen Schritte durchzuführen, und dass die Verbindung zu APEX mittels einem auf dem Tomcat eingesetzten ORDS erfolgen soll.
 

Erstellung eines Zertifikats

Wenn man ein Zertifikat erstellen und später auch in Tomcat einbinden will, braucht man ein Programm zur Schlüssel- und Zertifikatsverwaltung. Ein solches Programm, mit dem Namen Keytool, ist im JDK (Java Development Kit), welches zum allgemeinen Betrieb von ORDS in Verbindung mit Tomcat gebraucht wird, bereits enthalten.

 

Einrichtung des Keystores

Der erste Schritt ist die Einrichtung eines Keystores, der zur Erzeugung eines CSR (Certificate Sign Request) und zur Aufbewahrung des Zertifikats gebraucht wird.

Unix Systeme:
Man navigiert zuerst in den Ordner, indem der Keystore gespeichert werden soll und setzt dann folgenden Befehl ab:

$JAVA_HOME/bin/keytool -genkey -alias mqscon -keyalg RSA -keysize 2048 -keystore /01/cert/mqscon.jks

 

Unter Windows öffnet man die Eingabeaufforderung, um von dort aus den Keystore zu erstellen:

>cd C:\Program Files\Java\jdk-20\bin\
>keytool -genkey -alias mqscon -keyalg RSA -keysize 2048 -keystore C:\Cert\mqscon.jks

Der Ordner in dem das Keytool zu finden ist, kann von diesem Beispiel abweichen.

In beiden Fällen wird man aufgefordert, das Passwort für den Keystore festzulegen und ein paar Angaben zur Organisation zu machen:

Enter keystore password: strongKeystorePassword
Re-enter new password: strongKeystorePassword
Or
What is your first and last name?
  [Unknown]:  monatstipp.muniqsoft.de
What is the name of your organizational unit?
  [Unknown]:  Anwendungsentwicklung
What is the name of your organization?
  [Unknown]:  Muniqsoft Consulting
What is the name of your City or Locality?
  [Unknown]:  München
What is the name of your State or Province?
  [Unknown]:  Bayern
What is the two-letter country code for this unit?
  [Unknown]:  DE
Is CN=monatstipp.muniqsoft.de, OU=Anwendungsentwicklung, O=muniqsoft.de, L=München, ST=Bayern, C=DE correct?
  [no]:  yes

Enter key password for <server>
        (RETURN if same as keystore password): <RETURN>
 


Das sind die Informationen, die später von der CA (Certificate Authority) unterschrieben und im Zertifikat stehen werden.

Außerdem beinhaltet der Keystore ein selbstzertifiziertes Zertifikat, mit dem es von Anfang an möglich ist, eine verschlüsselte Verbindung aufzubauen. Allerdings wird es, je nach Firmenpolitik, als unsicher angesehen, da es keinen Dritten gibt, der bestätigt, dass die Angaben im Zertifikat stimmen.
 

CSR (Certificate Sign Request)

Wurde der Keystore erfolgreich erstellt, muss ein CSR erstellt werden:

keytool -certreq -alias mqscon -keyalg RSA -file C:\Cert\mqscon.csr -keystore C:\Cert\mqscon.jks

Diese Datei (z. B. mqscon.csr) wird an die CA geschickt, welche dort geprüft und, bei der Richtigkeit der Angaben, signiert als Zertifikat zurückgesendet wird.
 

Einbindung des Zertifikats in Tomcat

Hat man ein Zertifikat von der zuständigen Zertifizierungsstelle im Unternehmen zugeschickt bekommen, kann man das Zertifikat in Tomcat einbinden. Dazu muss das Zertifikat erst einmal in den Keystore importiert werden:

Linux: 

$JAVA_HOME/keytool -import -trustcacerts -alias server -file /u01/cert/webserver.cer -keystore webserver.key


Windows:

>cd C:\Program Files\Java\jdk-20\bin\
>keytool -import -trustcacerts -file C:\Cert\mqscon.cert -keystore C:\Cert\mqscon.jks


Daraufhin wird man aufgefordert das Passwort, welches man bei der Erstellung des Keystores vergeben hat, einzugeben und gefragt, ob man dem Zertifikat vertrauen möchte.

Anschließend muss in der Server.xml-Datei von Tomcat das Zertifikat eingebunden und die SSL-Verbindung aktiviert werden. Die Server.xml-Datei findet man unter <InstallationsPfadTomcat>/conf. 
In dieser Datei fügt man folgenden Block hinzu, um einen Port mit Verschlüsselung zu definieren.

<Connector     port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
               sslEnabledProtocols="TLSv1.2"      
               keystoreFile="C:\Cert\mqscon2.jks" 
               keystorePass="*********" />

8443 ist dabei ein im Internet üblicher Port, den man für sichere Kommunikation benutzt, dieser kann aber je nach Bedarf ersetzt werden. Dabei ist wichtig, dass der Port für den Server in der Firewall freigeschaltet ist.
 

Zusammenfassung

Die Verbindung zu APEX sicher zu machen ist nicht schwer und mit einer überschaubaren Anzahl an Schritten zu bewerkstelligen, welche sich schnell zusammenfassen lassen: Keystore aufsetzen, CSR-Datei an die CA-Stelle für ein Zertifikat schicken, das Zertifikat im Keystore ablegen und im Tomcat für eine SSL-Verbindung verwenden.
 

 

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.