Apache Tomcat: Verschlüsseln von Passwörtern

Im Apache Tomcat Application Servers werden Resourcen angelegt welche mit einem Benutzernamen und Passwort hinterlegt sind. Diese werden in der Grundkonfiguration im klartext angelegt. Bei einem eventuellen einbruch in den Server sind so die Passwörter für zbsp. Datenbanken im klartext lesbar.

Vorwort

Da im Internet bereits einiges beschrieben ist und ich mich nicht mit fremden Federn schmücken möchte, möchte ich auf das Tutorial von JDev.it hinweisen welches ich für dieses Tutorial zuhilfe genommen habe.

Apache Tomcat Benutzername und Passwort verschlüsseln

Für die Verwaltung des Applicationservers steht einem Benutzer die „Manager App“ zur Verfügung. Um jedoch diese App benutzen zu können muss in der Datei tomcat-users.xml ein Benutzer eingerichtet werden.

Ich habe in der XML Datei alle Kommentare entfernt.
So das wie hier zu sehen ist der Benutzer „tomcat“ mit dem Passwort „tomcat“ und der Rolle „tomcat“ sowie „manager-gui“ eingerichtet ist.

Wenn man nun den Server neustartet, kann man sich mit diesen Daten anmelden.

Apache Tomcat, anmelden an die "Manager App"
Apache Tomcat, anmelden an die „Manager App“

Als nächsten werden wir nun das Passwort verschlüsseln um hier eine Sicherheit zu schaffen.

Verschlüsseln von Passwörtern

Apache Tomcat wird mit einem Script ausgeliefert welches Passwörter im Format „SHA-256“ verschlüsselt. Dieses Skript ist im %TOMCAT_HOME%\bin Ordner abgelegt und heißt für Windowsbenutzer „digest.bat“, Linuxbenutzer wählen hier die Datei „digest.sh“.

Skripte zum verschlüsseln von Passwörtern.
Skripte zum verschlüsseln von Passwörtern.

Wenn man also nun das Skript „digist.bat“ folgendermaßen ausführt
„digist.bat -a sha-256 tomcat >> pw.txt“ wird das übergebene Passwort verschlüsselt in der Datei „pw.txt“ abgelegt (nicht vergessen diese Datei zu löschen), nun müssen wir noch dieses Passwort in die Datei „tomcat-users..xml“ eintragen.

Jetzt muss im Server noch konfiguriert werden das dieses Passwort entschlüsselt werden muss.

Vorher:

Nachher:

Nun kann man sich in der Manager App mit dem Benutzernamen „tomcat“ anmelden und dem verschlüsselten Passwort „tomcat“.

Datenbankpasswörter verschlüsseln

Datenbanken sind besonders zu sichern da hier bei einem eventuellen Einbruch der größte Schaden entstehen kann (löschen / verändern / stehlen von Daten).

Beispiel zum verschlüssen von Datenbankpasswörter

Hier nun ein Beispiel wie man ein Datenbankpasswort für eine Apache Derby Datenbank verschlüsselt.

Die Konfiguration (in der Datei context.xml) für eine Datenbank Resource im Apache Tomcat sieht in meinem Beispiel wiefolgt aus:

Hier ist wieder zuerkennen dass, das Passwort „testUserPassword“ im klartext steht.

Für das verschlüsseln des Passwortes greife ich auf die Klassen „EncryptedDataSourceFactory“ und „Encryptor“ aus dem Tutorial Encrypting passwords in Tomcat zurück welche ich hier bereitstellen möchte.

Als gepackte, lauffähige JAR Datei:

Und den Quellcode:

 

Nachdem Download wird die JAR Datei in den Order WEB-INF\lib kopiert.
Nun kann auf der Konsole mit dem Befehl
„java -jar encryptedDS.jar testUserPassword >> pw.txt“
das Passwort verschlüsselt werden.
Zum vereinfachten kopieren des Passwortes wird dieses in der Datei „pw.txt“ abgelegt.

Nun muss die Resource für die Datenbank wiefolgt angepasst werden:

In dem Attribut „factory“ wird die Factory Klasse aus der JAR Datei angegeben mit welcher das Passwort entschlüsselt werden kann.
Nach einem Serverneustart sollte diese Änderung aktiv sein.

Dowload des Eclipse Projektes

Schreibe einen Kommentar

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