Verschlüsselte Konfigurationswerte
Konfigurationswerte, welche sensible Informationen enthalten können in den Konfigurationsdateien verschleiert werden. Werden z.B. Datenbankpassworte so gespeichert, wird verhindert, dass jeder Leser der Konfigurationsdatei direkt das Passwort im Klartext sieht.
Die Mechanik für verschlüsselte Konfigurationswerte unterscheidet sich bei typisierten Konfigurationen (*.config.xml
) und untypisierten Konfigurationen (andere *.xml
).
Verschlüsselte typisierte Konfigurationswerte
Damit ein Konfigurationswert einer typisierten Konfiguration verschlüsselt werden kann, muss das Property mit der Annotation tl:Encrypted versehen sein. Dies ist u.a. bei der tl:EncryptedDriverOption der Fall, die für die Konfiguration sensibler Parameter einer Datenbankanbindung verwendet werden kann:
Konfiguration einer Datenbankanbindung mit verschleiertem Passwort: Hier wird das Passwort nicht als <option .../>
konfiguriert, sondern als <encrypted-option .../>
. Der Konfigurationswert (value
) ist dann nicht das Passwort im Klartext, sondern ein verschleiertes Passwort, das durch Eingabe des Passworts in die Wartungsseite EncodeConfigurationValues
erzeugt werden kann:
<application xmlns:config="http://www.top-logic.com/ns/config/6.0">
<services>
<config service-class="com.top_logic.basic.sql.ConnectionPoolRegistry">
<instance>
<pools>
<pool name="default">
<data-source>
<driver-class>...</driver-class>
<options>
<option name="URL" value="..." />
<option name="user" value="..." />
<encrypted-option name="password" value="..." />
</options>
</data-source>
</pool>
</pools>
</instance>
</config>
</services>
</application>
Technisch bewirkt die Verwendung des Tags <encrypted-option/>
die Verwendung der Konfiguration tl:EncryptedDriverOption, deren value
-Property mit der Annotation tl:Encrypted versehen ist. Auf diese Weise können auch anwendungsdefinierte Properties als zu verschleiernd ausgezeichnet werden.
Bootstrap: Plain-Text in verschlüsselter Konfigurationsoption
Soll ausnahmsweise der Einfachheit halber doch ein Plain-Text-Wert direkt in einer als verschlüsselt markierten Konfigurationsoption gespeichert werden, so muss dieser Plain-Text-Wert mit dem Prefix unencrypted:
versehen werden. Dies kann notwendig sein, da für den Bootstrap-Prozess zuerste eine Anwendung (z.B. mit Datenbankverbindung) aufgesetzt werden muss, bevor die Wartungsseite zum Verschleiern der Konfigurationswerte genutzt werden kann.
Verschlüsselte untypisierte Konfigurationswerte
Achtung: Diese Information ist veraltet und nur noch zu Referenzzwecken verfügbar.
In einer untypisierten Konfiguration kann prinzipiell jeder Konfigurationswert verschlüsselt werden. Hierfür muss dem <entry/>
-Tag das zusätzliche Attribut encrypted="true"
mitgegeben werden:
<root>
<alias>
<!-- Not here! -->
</alias>
<properties>
<section name="...">
<entry name="..." value="..." encrypted="true"/>
</section>
</properties>
</root>
Achtung: Das gilt nur für die <entry/>
-Tags im Abschnitt <section name="..">
. Insbesondere gilt das nicht für die <entry/>
-Tags zur Definition von Alias-Variablen im Abschnitt <alias>
! D.h. die Verschlüsselung muss immer an der Stelle der Verwendung der Alias-Variable aktiviert werden, nicht bei ihrer Definition.
Sicherheitshinweis
Bei der hier beschriebenen Verschleierung von sensiblen Daten handelt es sich nicht um eine echte Verschlüsselung. Da die Anwendung das Original-Passwort selbstständig wiederherstellen können muss, um es bei der Authentifizierung gegenüber einem Drittsystem einzusetzen, ohne dass die manuelle Eingabe eines Master-Passworts erforderlich ist, kann theoretisch auch ein Angreifer mit vollem Systemzugriff das Originalpasswort wiederherstellen. Die Verschleierung von Passworten schützt demnach nur gegen das Aufschnappen eines Passworts durch einen flüchtigen Leser einer Konfigurationsdatei.