Datenverschlüsselung
Eine TopLogic-Anwendung ist in der Lage bestimmte Anwendungsdaten verschlüsselt in der Datenbank abzulegen. Hierzu muss die Verschlüsselung persistenter Daten aktiviert werden. Dies erfordert, dass bei jedem Start der Anwendung ein Anwendungspasswort für die Datenentschlüsselung eingegeben werden muss, bevor ein Login in die Anwendung möglich ist.
Verschlüsselbare Daten
Die folgenden Daten sind verschlüsselbar
- Dokumente
- Die Journal-Historie
- Speziell ausgezeichnete Attributwerte von Objekten.
- Ein Attribut kann nur dann verschlüsselt werden, wenn die Anwendung nicht von datenbankbasierten Suchen nach Werten dieses Attributs abhängt.
- Es können insbesondere keine Attribute verschlüsselt werden, welche als Basis für eine Datenbankindizierung dienen.
- Ebensowenig können Beziehungen zwischen Objekten (oder deren Attribute) verschlüsselt weden.
- Storages sind ebenso von der Verschüsselung ausgenommen.
Aktivierung der Verschlüsselung
Modell
Damit Attribute verschlüsselt werden können, müssen diese im sog. Flex-Storage gespeichert werden. Sie dürfen also nicht als normale Knowledge-Objekt-Attribute definiert sein. U.U. muss das Anwendungsmodell so geändert werden, dass alle sicherheitsrelevanten Daten im Flex-Storage gespeichert werden. Hierfür kann es notwendig sein, die Meta-Schemata der Anwendung so anzupassen.
Anwendungskonfiguration
Das Feature "Verschlüsselung" lässt sich aktivieren, indem das Konfigurationsbundle top-logic.encrypted.xml
in die metaConf.txt
der Anwendung eingebunden wird:
top-logic.encrypted.xml
Dieses Konfigurationsbundle besteht aus den im folgenden beschriebenen Teilen.
Verzögerter Anwendungsstart
Bei eingeschalteter Verschlüsselung muss während des Anwendungsstarts vom Administrator das Verschlüsselungspasswort eingegeben werden. Diese Eingabe erfolgt ebenfalls über die Web-Schnittstelle der Anwendung. Allerdings können vor der Eingabe des Verschlüsselungspassworts noch nicht alle Services gestartet werden. Technisch muss die Web-Anwendung daher den Start der Services solange verzögern, bis das Verschlüsselungspasswort eingegeben ist.
Der verzögerte Start wird in der Konfiguration für den StartStopListener aktiviert. Technisch wird dadurch beim Anwendungsstart der DeferredBootService
gestartet, welcher zu einem späteren Zeitpunkt die Anwendungsdienste starten kann. Alle Dienste, die für die Passworteingabe selbst notwendig sind, müssen als Abhängigkeiten des DeferredBootService
angegeben werden.
Bevor die Anwendung vollständig hochgefahren ist, leitet sie alle Anfragen an die beim DeferredBootService
konfigurierte deferredBootLocation
weiter.
<section name="StartStopListener">
<entry name="deferredBoot" value="true" />
</section>
<section name="DeferredBootService">
<!-- Application password page requires DB-Access. -->
<entry name="dependency:com.top_logic.basic.sql.DBProperties$Module" value="enabled" />
<!-- Redirect directly to the password input page. -->
<entry name="deferredBootLocation" value="/applicationPassword.jsp" />
</section>
Verschlüsselungsdienst
Das Key-Handling für die Verschlüsselung wird durch den EncryptionService
übernommen. Für die Verschlüsselung mit einem vom Nutzer gewählten Passwort muss der PasswordBasedEncryptionService
gewählt werden. Über Konfigurationsoptionen können die Verschüsselungsalgorithmen für den Schlüssel und die Anwendungsdaten eingestellt werden.
<section name="EncryptionService">
<entry name="class" value="com.top_logic.knowledge.service.encryption.pbe.PasswordBasedEncryptionService" />
<!-- The password based encryption algorithm for encrypting the encryption key. -->
<entry name="pbeAlgorithm" value="PBEWithSHAAndTwofish-CBC" />
<entry name="saltLength" value="16" />
<entry name="iterations" value="100000" />
<!-- The algorithm for data encryption -->
<entry name="encryptionAlgorithm" value="Blowfish" />
<!-- The digest algorithm to produce (symmetric) signatures with. -->
<entry name="signatureDigestAlgorithm" value="SHA1" />
</section>
Verschlüsselung von Flex-Attributen
Die Flex-Attribute von Objekten werden durch einen FlexDataManager
gespeichert. Verschlüsselte Speicherung wird durch die Wahl der EncryptedFlexDataManagerFactory
für den FlexDataManagerFactory
-Dienst erreicht.
<section name="FlexDataManagerFactory">
<entry name="class" value="com.top_logic.knowledge.service.encryption.data.EncryptedFlexDataManagerFactory" />
</section>
Selektive Attribut-Verschlüsselung
Es ist möglich, selektiv, einzelne Typen (Knowledge-Base-Typen) bzw. deren Flex-Attribute von der Verschlüsselung auszunehmen (oder die Verschlüsselung nur für ausgewählte Typen oder Attribute einzuschalten):
<section name="FlexDataManagerFactory">
<entry name="dataManager.default" value="include"/>
<entry name="dataManager.type.UIConfig" value="exclude"/>
<entry name="dataManager.attribute.DemoTypesC.stringInBAndC" value="exclude"/>
</section>
Über eine solche Konfiguration können Datenbanksuchen auf einzelnen Flex-Attributen trotz eingeschalteter Verschlüsselung ermöglicht werden.
Journal in verschlüsselten Flex-Attribut-Tabellen
Damit die Journal-Historie verschlüsselt gespeichert wird, muss diese in Flex-Attribut-Tabellen geschrieben werden. Hierfür muss der FlexJournalManager
als JournalManager
aktiviert werden.
<section name="JournalManager">
<entry name="class" value="com.top_logic.knowledge.journal.FlexJournalManager"/>
</section>
<section name="ApplicationTypes">
<entry name="provider:com.top_logic.knowledge.journal.FlexJournalManager$JournalTypes" value="enabled"/>
</section>
Verschlüsselung des File-Repositories
Damit die Dateien im File-Repository verschlüsselt werden, muss der EncryptedDataSourceAdaptor
für den DataAccessService
verwendet werden. Der EncryptedDataSourceAdaptor
verwendet den EncryptionService
. Daher muss eine zusätzliche Abhängigkeit in den DataAccessService
eingetragen werden.
<section name="DataAccessService">
<entry name="dependency:com.top_logic.basic.encryption.EncryptionService$Module" value="enabled" />
<entry name="repository" value="com.top_logic.dsa.impl.EncryptedDataSourceAdaptor" />
<entry name="repository.xproperties" value="repository" />
</section>
<section name="repository">
<entry name="wrapped" value="com.top_logic.dsa.repos.RepositoryDataSourceAdaptor" />
</section>
Signaturdienst zum Schutz vor gefälschten Login-Daten
Nutzerpasswörter werden als Signatur (Einwegverschlüsselung) gespeichert. Normalerweise wird hierfür ein Schlüsselpaar verwendet, das im Anwendungsverzeichnis abgelegt wird. Um bei eingeschalteter Verschlüsselung zu verhindern, dass ein Datenbankadministrator einen Passwort-Hash selbst berechnen und in die Datenbank speichern kann, um sich danach mit dem gefälschten Login an der Anwendung anzumelden, werden die Nutzerpasswörter mit dem Verschlüsselungsschlüssel signiert (verschlüsselter Hash des Passworts gespeichert).
<section name="SignatureService">
<entry name="class" value="com.top_logic.knowledge.service.encryption.EncryptionSignatureService"/>
</section>
Es steht ein Utility zur Verfügung, mit dem man unter Angabe des Anwendungspassworts einen signierten Nutzerpassworthash generieren kann. Hiermit ist es möglich ein vergessenes Administratorpasswort direkt über die Datenbank zurückzusetzen:
java com.top_logic.base.security.util.CreatePasswordHash -w <application-root-dir>
Administration
Java-Installation mit Unlimited-Stength-Encryption
Damit sinnvolle Verschlüsselungspasswörter mit starken Verschlüsselungsalgorithmen vergeben werden können, muss die "Unlimited-Strength-Encryption" in der Java-Installation freigeschaltet werden. Hierzu müssen die Dateien
local_policy.jar
US_export_policy.jar
in das entsprechende Verzeichnis der Java-Installation kopiert werden (bzw. die dort vorhandenen ersetzt werden):
jdk1.5.0_xx\jre\lib\security
Die notwendigen Dateien sind bei Oracle in folgendem Archiv erhältlich:
jce_policy-1_5_0.zip
jce_policy-6.zip
Siehe auch: \\tl\tl\Infrastructure\BaseInstall\Java\jce\
.
Anwendungsinstallation
Nach dem ersten Start einer Anwendung mit Datenverschlüsselung muss das initiale Anwendungspasswort vergeben werden. Damit nicht der erste Nutzer, der eine Verbindung zu einer neuinstallierten Anwendung aufbaut, das initale Anwendungspasswort vergeben kann, ist hierfür ein Produktschlüssel notwendig. Ein Produktschlüssel hat nichts mit dem Lizenzschlüssel zu tun (welcher der Administration bei der technischen Installation der Anwendung zur Verfügung stehen muss). Der Produktschlüssel ist eine Art Passwort, welches zur Vergabe (und Wechsel) des Anwendungspassworts berechtigt.
Vergabe des Anwendungspassworts
Nach dem ersten Start einer neuinstallierten Anwendung leitet diese auf eine Maske zur Eingabe des Anwendungspassworts weiter. In dieser Maske müssen die folgenden Daten eingegeben werden:
- Produktschlüssel
- Initiales Anwendungspasswort
- Initialpasswörter für alle vorkonfigurierten Nutzer (root/admin)
Eingabe des Verschlüsselungspassworts
Nach jedem Neustart einer Anwendung mit Datenverschlüsselung muss das Verschlüsselungspasswort eingegeben werden. Hierfür leitet die Anwendung nach dem Start auf eine spezielle Maske weiter.
Änderung des Anwendungspassworts
Von der Maske für die Eingabe des Anwendungspassworts ist eine Seite erreichbar, mit der das Anwendungspasswort geändert werden kann. Hierfür sind die folgenden Eingaben erforderlich:
- Produktschlüssel
- Altes Anwendungspasswort
- Neues Anwendungspasswort