Konfiguration verschlüsseln

Dokumente für die Entwicklung von und mit JVx.

Konfiguration verschlüsseln

Postby Development@SIB » Fri Dec 16, 2011 12:25 am

Die Konfiguration einer Applikation wird im Normalfall vom Source Code getrennt und in die Konfigurationsdatei config.xml ausgelagert. Bei der Datei handelt es sich um eine Standard XML Datei.

Sofern die Datenbank Zugangsdaten darin abgelegt sind, können sowohl Benutzername als auch Passwort ausgelesen werden. Das hat zwar den Vorteil das eine Änderung der Datei jederzeit möglich ist, aber auch den Nachteil das die Daten ohne weiteres auslesbar sind.

Um die Lesbarkeit zu verhindern, unterstützt der XmlWorker eine transparente Verschlüsselung. Sie können ohne Rücksichtnahme während der Entwicklungsphase mit Klartext Dateien arbeiten und bei der Installation am Produktions-System wechseln Sie in den verschlüsselten Modus. Sie müssen dafür Ihren Source Code nicht ändern.

Um eine Konfigurationsdatei zu verschlüsseln kann folgender Source Code verwendet werden:

Code: Select all
XmlWorker xmw = new XmlWorker();
xmw.setAutomaticDecrypt(true);
xmw.setEncrypted("/application/securitymanager", true);
xmw.setEncrypted("/application/lifecycle", true);
xmw.setEncrypted("/application/datasource", true);

File fiConfig = new File(sFile);
   
XmlNode xmn = xmw.read(fiConfig);
xmw.write(fiConfig, xmn);

Es wird ganz einfach festgelegt, welche XML Nodes verschlüsselt werden sollen. Somit können unwesentliche Teile der Datei weiterhin in Klartext bleiben und die wichtigen Daten werden geschützt.

Beispiel:

Eine sehr einfach lesbare Konfiguration:

Code: Select all
<?xml version="1.0" encoding="UTF-8"?>

<application>
  <securitymanager>
    <class>com.sibvisions.rad.server.security.DBSecurityManager</class>
    <database>
      <driver>org.hsqldb.jdbcDriver</driver>
      <url>jdbc:hsqldb:hsql://localhost/demodb;ifexists=true</url>
      <username>sa</username>
      <password></password>
    </database>
  </securitymanager>

  <!-- optional database configuration -->
  <databaseobjects>
    <yesvalue>Y</yesvalue>
    <NUSERS>TBL_USERS</NUSERS>
    <NUSERS_CHANGE_PASSWORD>CHANGE_PASSWORD</NUSERS_CHANGE_PASSWORD>
    <NUSERS_VALID_FROM>COL_VALID_FROM</NUSERS_VALID_FROM>
    <NUSERS_VALID_TO>COL_VALID_TO</NUSERS_VALID_TO>
    <NUSERS_ACTIVE>COL_ACTIVE</NUSERS_ACTIVE>
  </databaseobjects>
 
    <!-- predefined life-cycle object names -->
  <lifecycle>
    <mastersession>democopy.Session</mastersession>
    <application>democopy.Application</application>
  </lifecycle>
 
</application>

Und nun vor fremden Blicken geschützt:

Code: Select all
<?xml version="1.0" encoding="UTF-8"?>

<application>
  <securitymanager encrypted="true">1f8b08000000000000005d90310ec2300c45774ec109e21d4206c4cac4099cc4b4416903765ae0f6244d111293fdfdfdac2f6b213771c8ef0147ec88cd66bbd52ea28871695012ec1c24a45114a357423c13ab2fa34ec7cbda9e1baea1b1f58ac78c1685aaa89243614de24ef5f288deaa9bb7eeb44c35ac6e5b9d389a6aeedae252760031398c7d920c9e86e4ed3e5ce91524cb21f3441a2ab61e2841471cc80896f15734ef5ef23d137b5842c22fa586ff5f7c00b0e53e381d010000</securitymanager>
  <!-- optional database configuration -->
  <databaseobjects>
    <yesvalue>Y</yesvalue>
    <NUSERS>TBL_USERS</NUSERS>
    <NUSERS_CHANGE_PASSWORD>CHANGE_PASSWORD</NUSERS_CHANGE_PASSWORD>
    <NUSERS_VALID_FROM>COL_VALID_FROM</NUSERS_VALID_FROM>
    <NUSERS_VALID_TO>COL_VALID_TO</NUSERS_VALID_TO>
    <NUSERS_ACTIVE>COL_ACTIVE</NUSERS_ACTIVE>
  </databaseobjects>
  <!-- predefined life-cycle object names -->
  <lifecycle encrypted="true">1f8b0800000000000000b3c9c94c4b4dae4cce49b5e35250b0c94d2c2e492d2a4e2d2ececccfb34b49cdcd4fce2fa8d40b8608d8e8a3ca8374241614e464262796a0a8774408dae823abe0b2d1475808003864e6777c000000</lifecycle>
</application>
User avatar
Development@SIB
 
Posts: 311
Joined: Mon Sep 28, 2009 1:54 pm

Return to Dokumentation