54
Christophe Leybaert Integratie van Adito in aXsGUARD Gatekeeper Academiejaar 2009-2010 Faculteit Ingenieurswetenschappen Voorzitter: prof. dr. ir. Daniël De Zutter Vakgroep Informatietechnologie Master in de toegepaste informatica Masterproef ingediend tot het behalen van de academische graad van Begeleider: Jurgen Van Ham (Vasco) Promotoren: prof. dr. ir. Bart Dhoedt, Dieter Roelands (Vasco)

Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Christophe Leybaert

Integratie van Adito in aXsGUARD Gatekeeper

Academiejaar 2009-2010Faculteit IngenieurswetenschappenVoorzitter: prof. dr. ir. Daniël De ZutterVakgroep Informatietechnologie

Master in de toegepaste informaticaMasterproef ingediend tot het behalen van de academische graad van

Begeleider: Jurgen Van Ham (Vasco)Promotoren: prof. dr. ir. Bart Dhoedt, Dieter Roelands (Vasco)

Page 2: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Woord Vooraf

In de eerste plaats bedank ik Jurgen Van Ham. Zijn eindeloze geduld werd door mij meermaals op de proef gesteld, maar toch mocht ik steeds rekenen op zijn onvoorwaardelijke ondersteuning en begeleiding. Ik kon ook altijd terugvallen op zijn uitgebreide expertise en ideeën, wat deze masterproef voor mij zeer leerrijk maakte. Wie ook veel betekend heeft bij de realisatie van dit werk is promotor Dieter Roelants. Ik vond hem altijd bereid om mijn vorderingen op te volgen en te controleren. Dankzij hem en de andere medewerkers van Vasco kon ik werken in een zeer aangename sfeer, waardoor ik met plezier op deze periode kan terugblikken. Ook professor Bart Dhoedt ben ik zeer erkentelijk. Bij hem kon ik op het laatste moment nog terecht met mijn onderwerp. Hij hield de vorderingen stevig onder controle en was steeds bereikbaar voor mogelijke vragen. Zijn tussentijdse controles hebben dit verslag in goede banen geleid. Aan Alex Ongena een woord van dank voor het vinden van een eindwerk aangepast aan mijn kennis en capaciteiten. Hierdoor kon ik de wetenschap die ik tijdens dit jaar vergaard heb, uitbreiden en in de praktijk toepassen. Ook Johan Leybaert mag ik hier niet vergeten omwille van zijn nauwgezette taal- en spellingscorrecties. Daarnaast vermeld ik zeker Jeroen Leybaert. Hij wist mij te stimuleren om voor dit onderwerp te kiezen en zorgde voor de nodige motivatie en hulp tijdens de aanloop naar dit eindwerk. Ten slotte bedank ik ook de professoren van Universiteit Gent die zich in dit korte jaar hebben ingezet om ons zoveel mogelijk nuttige kennis bij te brengen.

Christophe Leybaert Gent, mei 2010

Page 3: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 4

Integratie van Adito in aXsGUARD Gatekeeper

Inhoudsopgave

Inhoudsopgave ........................................................................................................... 4

Lijst met figuren en tabellen ........................................................................................ 6

Lijst met afkortingen ................................................................................................... 7

Inleiding ................................................................................................................... 8

1 Probleemstelling .................................................................................................. 9

2 Doelstelling ........................................................................................................ 10

3 Werking Adito .................................................................................................... 11

4 Voorbereiding softwareontwerp ......................................................................... 13

4.1 Definities ...................................................................................................... 13

4.2 Inleidende installaties .................................................................................. 14

4.2.1 Apache Ant ........................................................................................... 14

4.2.2 Adito zonder aXsGUARD ...................................................................... 14

4.2.3 Cygwin .................................................................................................. 15

4.2.4 OpenSSL .............................................................................................. 15

4.2.5 Bouncy Castle ....................................................................................... 15

4.3 Identificatie parameters ............................................................................... 16

4.4 Locatie parameters ...................................................................................... 18

4.5 Types bestanden ......................................................................................... 19

4.5.1 Configuratiebestand .............................................................................. 19

4.5.2 Properties.............................................................................................. 19

4.5.3 HSQLDB ............................................................................................... 20

4.5.4 Keystore ................................................................................................ 20

5 Analyse automatisatie van de installer .............................................................. 21

5.1 Aanmaken configuratiebestand ................................................................... 21

5.2 Aanmaken Properties-bestand .................................................................... 21

5.3 Conversie XML – Java ................................................................................ 22

5.3.1 Algemeen .............................................................................................. 22

5.3.2 Globale bespreking code ...................................................................... 22

5.3.3 Problemen............................................................................................. 23

5.4 Logbestanden .............................................................................................. 24

5.4.1 Algemeen .............................................................................................. 24

5.4.2 Globale bespreking code ...................................................................... 24

5.4.3 Problemen............................................................................................. 24

5.5 Aanmaken keystore-bestand ....................................................................... 25

5.5.1 Algemeen .............................................................................................. 25

Page 4: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 5

Integratie van Adito in aXsGUARD Gatekeeper

5.5.2 Globale bespreking code ...................................................................... 25

5.6 Aanmaken hsqldb ........................................................................................ 27

5.6.1 Algemeen .............................................................................................. 27

5.6.2 Globale bespreking code ...................................................................... 28

6 Softwareontwerp................................................................................................ 30

6.1 Algemeen .................................................................................................... 30

6.2 AditoInstaller.input ....................................................................................... 30

6.3 AditoInstaller.data ........................................................................................ 33

6.4 Adito-Installer............................................................................................... 36

7 Software-implementatie ..................................................................................... 37

7.1 CopyByMap en getConfig ............................................................................ 37

7.2 Javadoc ....................................................................................................... 40

8 Voorbereiding testfase ....................................................................................... 41

8.1 Buildfile ........................................................................................................ 41

8.1.1 Manifest ................................................................................................ 41

8.1.2 Buildfile uitvoeren .................................................................................. 42

9 Testen installer .................................................................................................. 43

9.1 Upgrade vermijden ...................................................................................... 43

9.2 Externe JAR’s .............................................................................................. 43

9.3 Bouncy Castle provider ............................................................................... 44

10 Extra functionaliteiten ........................................................................................ 45

10.1 Certificate signing request ........................................................................ 45

10.2 Toevoegen administrators ........................................................................ 45

Conclusie ................................................................................................................. 49

Literatuurlijst ............................................................................................................. 51

Bijlage I Documentatie config-bestand ................................................................... 52

Bijlage II Voorbeeld config-bestand ........................................................................ 55

Page 5: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 6

Integratie van Adito in aXsGUARD Gatekeeper

Lijst met figuren en tabellen

Figuur 1: Overzicht Adito ............................................................................................ 8

Figuur 2: Interfaces Adito............................................................................................ 9

Figuur 3: Gebruikersinterface Adito .......................................................................... 11

Figuur 4: Laden Adito Agent ..................................................................................... 11

Figuur 5: Schema werking Adito VPN ...................................................................... 11

Figuur 6: Certificaatkeuze ......................................................................................... 16

Figuur 7: Passphraseconfiguratie ............................................................................. 16

Figuur 8: Certificaatconfiguratie ................................................................................ 16

Figuur 9: Databaseconfiguratie ................................................................................. 17

Figuur 10: Super user configuratie ........................................................................... 17

Figuur 11: Webserverconfiguratie ............................................................................. 17

Figuur 12: Proxy-server configuratie ......................................................................... 18

Figuur 13: Procedure conversie XML - Java ............................................................. 22

Figuur 14: Overzicht Java logger .............................................................................. 24

Figuur 15: Schema communicatie database - Java .................................................. 28

Figuur 16: Klassendiagram XmlReader .................................................................... 30

Figuur 17: Klassendiagram ConfigWriter .................................................................. 31

Figuur 18: Klassendiagram FieldMapper .................................................................. 32

Figuur 19: Mapping config-file - dataklasse - output file ........................................... 32

Figuur 20: Klassendiagram SqlReader ..................................................................... 33

Figuur 21: Klassendiagram DirectoryReader ............................................................ 33

Figuur 22: Klassendiagram ConfigHolder ................................................................. 33

Figuur 23: Klassendiagram PropertiesHolder ........................................................... 34

Figuur 24: Klassendiagram WebServer .................................................................... 35

Figuur 25: Klassendiagram ExplorerProperties ........................................................ 36

Tabel 1: Locatie parameters ..................................................................................... 18

Tabel 2: Betekenis parameters X509-certificaat ....................................................... 25

Tabel 3: Betekenis certificaatextenties ..................................................................... 26

Tabel 4: Betekenis argumenten setKeyEntry ............................................................ 27

Tabel 5: Verschil opbouw ExplorerProperties - Administrator ................................... 46

Page 6: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 7

Integratie van Adito in aXsGUARD Gatekeeper

Lijst met afkortingen

Afkorting Betekenis

AA Adito agent

API Application programming interface

BC Bouncy Castle

CA Certificate authority

DMZ Demilitarized zone

DNAT Destination network address translation

DOM Document object model

HSQLDB HyperSQL database

http Hypertext transfer protocol

https Hypertext transfer protocol secure

IPS Intrusion prevention system

JAR Java archive

JCE Java cryptographic extension

JDBC Java database connectivity

JKS Java keystore

LAN Local area network

PEM Privacy enhanced mail

PKCS Public key cryptography standards

RSA Rivest, Shamir, Adleman

SHA Secure hash algorithm

SNAT Source network address translation

SSL Secure sockets layer

TCP Transmission control protocol

URL Uniform resource locator

VPN Virtual private network

XML Extensible markup language

Page 7: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 8

Integratie van Adito in aXsGUARD Gatekeeper

Inleiding

Tegenwoordig wordt steeds meer gebruik gemaakt van mobiele computertechnologieën. Dit zorgt ervoor dat werknemers de mogelijkheid willen hebben om hun mails, applicaties van het bedrijf, bestanden en websites van overal en zonder veel moeite te bereiken. Uiteraard moet ervoor gezorgd worden dat dit op een veilige manier kan gebeuren, zodat misbruik van deze service wordt vermeden. Hiervoor heeft VASCO Data Security de aXsGUARD Gatekeeper ontwikkeld. Dit is een op Linux gebaseerd toestel dat een totaaloplossing biedt voor de beveiliging van de verbinding met een bedrijfsnetwerk. In de basisuitvoering beschikt de Gatekeeper onder andere over een firewall met DMZ (DeMilitarized Zone), een IPS (Intrusion Prevention System) en een VPN. In de Enterprise- versie wordt dit nog verder uitgebreid met bijvoorbeeld een application firewall en een SSL-VPN-module Adito is zo een module.

Figuur 1: Overzicht Adito

Een VPN maakt het onder andere mogelijk dat een organisatie op een beveiligde manier gegevens uitwisselt tussen bijvoorbeeld zijn hoofdzetel en een gebruiker die thuis zit. Hiervoor gebruikt het gewoon het publieke Internet, maar alle gegevens worden eerst geëncrypteerd.1 Een nadeel is dat de eindgebruikers altijd eerst gespecialiseerde software zullen moeten installeren om gebruik te kunnen maken van het VPN. Een gelijkaardig effect als een VPN, maar via eenvoudiger technieken zoals port forwarding, kan verkregen worden via de open source Java-applicatie, Adito. Een groot voordeel van Adito is dat de gebruiker niet actief software zal moeten downloaden, maar zich enkel via zijn webbrowser moet verbinden met Adito. Een korte beschrijving van de werking van Adito zal verderop in dit werk gegeven worden.

1 Cursus communicatienetwerken

Page 8: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 9

Integratie van Adito in aXsGUARD Gatekeeper

1 Probleemstelling

Adito maakt voor zijn installatie gebruik van een interactieve interface. Hierin moeten veel instellingen door de gebruiker zelf worden vastgelegd. Daarvoor krijgt hij meestal een grote lijst met keuzes die hij kan maken. Voor een ervaren gebruiker is dit geen probleem, maar een minder gemotiveerde gebruiker kan hier al snel verkeerde of onlogische instellingen doorvoeren. Het huidige installatieprogramma van Adito laat niet toe die keuzes te beperken of via een andere bron in te stellen. De gebruiker moet de volledige lijst van instellingen steeds zelf doorlopen en krijgt de totale vrijheid in zijn keuzes. Hieronder wordt ter verduidelijking, maar zonder te sterk in detail te treden, een kort voorbeeld gegeven.

Figuur 2: Interfaces Adito2

Zoals in de inleiding vermeld, is het de bedoeling de gebruiker van overal toegang te geven tot zijn gegevens of applicaties. Het zou onlogisch zijn bij de interface van Adito te kiezen voor één die binnen het interne LAN ligt. Voor een maximale toegankelijkheid wordt er dus voor gezorgd dat de gebruiker enkel uit interfaces van het type Internet kan kiezen. Naast onlogische keuzes kunnen er ook foute keuzes worden gemaakt. Het is bijvoorbeeld wenselijk dat de gebruikers en hun authenticatiegegevens altijd uit de achterliggende Unix- database worden gehaald. Om te vermijden dat de gebruiker hier verkeerd kiest, is deze optie voor hem verborgen. Beide voorbeelden tonen aan dat het huidige installatieprogramma van Adito voor toepassing op aXsGUARD niet voldoet. Er moet dus een aangepaste installer geschreven worden die een aantal keuzes beperkt of verbergt.

2 http://www.linklogger.com/images/DMZ1.jpg

Page 9: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 10

Integratie van Adito in aXsGUARD Gatekeeper

2 Doelstelling

Zoals al gezegd, legt de huidige versie van Adito te veel de verantwoordelijkheid bij de eindgebruiker. Die kan verkeerde beslissingen nemen, zodat de software niet naar behoren werkt. Door het aantal keuzes die hij moet instellen te beperken, wordt hij zo veel mogelijk ontlast van deze taak Er moet dus een nieuwe installer geschreven worden die slechts een beperkt aantal mogelijkheden aan de gebruiker over laat, en voor het overige gebruik maakt van standaardwaarden of gegevens die al in aXsGUARD aanwezig zijn. Op deze manier worden instellingen die aanleiding kunnen geven tot verkeerde keuzes maximaal verborgen voor de eindgebruiker. Het definitieve programma kan opgedeeld worden in twee stukken: een stuk code met bijhorende bestanden die ervoor zorgen dat de huidige installer nagebootst wordt, en een tool die de instellingen van de gebruiker kan inlezen en die van aXsGUARD kan gebruiken. Die tool is eigenlijk al aanwezig op aXsGUARD en bestaat uit een deel interface die instellingen aan de gebruiker presenteert en een deel logica die deze instellingen verwerkt en koppelt. Om een volledig geïntegreerde Adito te bekomen, moet bij het instellen van zijn gegevens ook gebruik gemaakt worden van die tool. Die moet dus ook een stuk aangepast worden. In dit eindwerk worden de bestaande installer en de bijhorende bestanden nagebootst. De bestaande installer geeft een interactieve interface die de gebruiker een grote vrijheid gaf bij de keuze van zijn instellingen. In de nieuwe wordt deze vrijheid beperkt tot enkel logische keuzes. De tool zal dus nog altijd via een interactieve interface met de gebruiker communiceren, maar zal hem slechts een beperkt aantal mogelijkheden aanbieden. Omdat de tool geschreven is in Perl, en de nieuwe installer in Java, zal de tool niet rechtstreeks in verbinding staan met de code van de nieuwe installer, maar hij zal al zijn instellingen wegschrijven naar één centraal bestand. Dit zal dan door het nieuwe installatieprogramma worden ingelezen en toegepast. Het configuratiebestand is dan eigenlijk een manier om een verzameling argumenten van de tool door te geven naar de installer. In dit eindwerk zal een formaat worden vastgelegd voor dit gegevensbestand. De nieuwe installer zal de functies van de oude moeten nabootsen. Het bestaande installatieprogramma kan niet meer toegepast worden, omdat dit geen gebruik maakt van een centraal gegevensbestand, maar zijn instellingen rechtstreeks van de interface opvangt en dan uitvoert. Daarom moet er dus een nieuw stuk code worden geschreven. Om ervoor te zorgen dat de taken van de oude installer kunnen worden overgenomen, wordt eerst onderzocht welke parameters deze nodig heeft, welke bewerkingen hierop worden uitgevoerd en welke bestanden er worden aangemaakt. De integratie van Adito op aXsGUARD gebeurt vrij experimenteel. Er is dus op voorhand geen gedetailleerd beeld van de vereisten of specificaties van de nieuwe installer. Daarom wordt ervoor gezorgd dat de code achteraf nog makkelijk uitbreidbaar en aanpasbaar is. Naast het schrijven van deze code, wordt er ook voor gezorgd dat het geheel voldoende gedocumenteerd is. Op deze manier wordt alles verduidelijkt voor de ontwerpers van de tool, zodat het installatieprogramma vlot integreerbaar of aanpasbaar is.

Page 10: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica

3 Werking Adito

Zoals eerder vermeld is het grotesoftware moeten installeren. Het volstaat dat hij eeen scherm getoond waarbij de gebruiker zichzelf moet inloggen. Eens dit gelukt is, krijgt hij de gebruikersinterface te zien. Hierinbijvoorbeeld kiezen om de applicatie

Figuur

Zodra hij deze opdracht heeft doorgegeven, zal

Nadat de agent is opgestart, zal opgezet. Dit verloopt volgens onderstaand schema:

Figuur

In bovenstaand geval zit de clientheeft publiek adres 212.123.45.10 en privaat adres 172.16.210.132. De gebruiker wil een applicatie openen op de server met adres 1onderscheiden.

Masterproef Toegepaste informatica 2009-2010

Werking Adito

Zoals eerder vermeld is het grote voordeel van Adito dat de gebruiker niet eerst actief software moeten installeren. Het volstaat dat hij een verbinding opstelt met Adito.

waarbij de gebruiker zichzelf moet inloggen. Eens dit gelukt is, krijgt hij Hierin laat hij dan de gewenste acties uitvoeren. Hij kan

de applicatie putty te starten.

Figuur 3: Gebruikersinterface Adito

hij deze opdracht heeft doorgegeven, zal de Adito Agent automatisch worden gestart.

Figuur 4: Laden Adito Agent

, zal een beveiligde connectie naar de gewenste server worden opgezet. Dit verloopt volgens onderstaand schema:

Figuur 5: Schema werking Adito VPN

client achter een SNAT en heeft ip-adres 192.168.0.100. Adito heeft publiek adres 212.123.45.10 en privaat adres 172.16.210.132. De gebruiker wil een applicatie openen op de server met adres 157.192.34.10. Hierbij worden een aantal stappen

11

voordeel van Adito dat de gebruiker niet eerst actief en verbinding opstelt met Adito. Er wordt

waarbij de gebruiker zichzelf moet inloggen. Eens dit gelukt is, krijgt hij . Hij kan

worden gestart.

beveiligde connectie naar de gewenste server worden

adres 192.168.0.100. Adito heeft publiek adres 212.123.45.10 en privaat adres 172.16.210.132. De gebruiker wil een

een aantal stappen

Page 11: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 12

Integratie van Adito in aXsGUARD Gatekeeper

• De gebruiker klikt op het icoon van de applicatie. Hierna start de Adito Agent op. Deze draait op de computer van de gebruiker maar moet niet actief door hem worden geïnstalleerd.

• De Adito Agent gedraagt zich als een TCP-server die luistert naar alles wat binnenkomt op bepaalde poorten van het localhost-adres 127.0.0.1. Deze vormt de toegang tot de TCP-proxyserver.

• Er wordt een TCP-verbinding opgezet tussen de client en de AA.

• De client stuurt zijn aanvraag door naar de AA.

• Er wordt een gecodeerde verbinding opgezet tussen AA en Adito.

• De AA verpakt de informatie van de client en stuurt die via het http- of https-protocol door naar het publieke adres en de poort van Adito. Deze twee werden ingesteld door het installatieprogramma.

• Er wordt een TCP-verbinding opgezet tussen Adito en de server.

• Adito levert de aanvraag af bij de gewenste server. Na deze stappen is er een connectie opgesteld tussen de client en de server via de proxy, zodat de nodige data (via de proxyserver) kunnen worden uitgewisseld. De proxyserver wordt hier gevormd door zowel de Adito Agent als Adito zelf. Indien Adito voor het versturen van de gegevens naar de server gebruik maakt van een privaat adres, dan zorgt dit ervoor dat enkel de client een verbinding kan opstellen met de server, maar niet omgekeerd: de server kent immers het private adres van Adito niet.

Page 12: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 13

Integratie van Adito in aXsGUARD Gatekeeper

4 Voorbereiding softwareontwerp

Vooraleer er aan het eigenlijke ontwerp van het nieuwe installatieprogramma kan worden begonnen, moet de huidige versie worden onderzocht. Daarom licht dit hoofdstuk toe hoe Adito wordt geïnstalleerd en gebruikt en welke hulpprogramma’s hiervoor nodig zijn. Hierna wordt het installatieproces doorlopen en volgt de identificatie van de belangrijkste parameters die door het programma worden ingesteld. Vervolgens wordt nagegaan in welke bestanden deze parameters worden weggeschreven en hoe dit wordt aangepakt, maar eerst komt de betekenis van een aantal veelgebruikte termen aan bod.

4.1 DEFINITIES

a Keystore

Een keystore is een software- (bestand) of hardwareobject (cryptografische kaart) waarin informatie in verband met authenticatie en encryptie wordt opgeslagen. Hij kan identiteiten, SSL-certificaten, private sleutels en soms ook publieke sleutels bevatten.3

b PKCS12

PKCS12 is een bestandsformaat dat voor de opslag van X.509 private sleutels en bijhorende public-key-certificaten kan dienen.4 De afkorting staat voor Public-Key Cryptography Standard.

c Public-key certificaat

Dit certificaat wordt gebruikt bij authenticatie. Het zorgt ervoor dat een webserver zijn identiteit kan bewijzen aan de gebruiker. Kort gezegd gebeurt dit door een koppeling van de identiteitsgegevens van de server aan zijn publieke sleutel. Deze koppeling wordt dan aan de hand van een private sleutel, digitaal ondertekend door ofwel de beheerder van de webserver (self-signed), ofwel door een certificate authority (CA). De identiteitsgegevens van de organisatie die nodig zijn voor het certificaat moeten ingegeven worden bij de installatieprocedure van Adito. Er bestaan verschillende manieren om een certificaat aan te maken. Om inzicht te krijgen in de manier waarop een certificaat wordt gemaakt en geïmporteerd wordt in Adito, werd als voorbereiding een self-signed certificate aangemaakt via OpenSSL.

d X.509

In de context van dit eindwerk volstaat de definitie dat X.509 een standaard is die onder andere het formaat bepaald van public-key-certificaten.

e Certificaatketting

Een certificaatketting is een opeenvolging van certificaten, waarbij elk certificaat van de ketting wordt ondertekend door het volgende certificaat.5

3 http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/rzalx/rzalxsecterms.htm 4 http://en.wikipedia.org/wiki/PKCS12

5 http://www.iona.com/support/docs/orbix2000/2.0/tls/html/OpenSSL4.html

Page 13: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 14

Integratie van Adito in aXsGUARD Gatekeeper

f certificate signing request

Dit wordt gebruikt om een aanvraag voor een public-key-certificaat bij een CA in te dienen. Een certificate signing request bevat de publieke sleutel, de identiteitsgegevens en eventueel extra attributen van de aanvrager. Die ondertekent de volledige aanvraag met zijn private sleutel en stuurt ze door naar de CA. Aan de hand van zijn private sleutel kan die dan een ondertekend certificaat terugsturen.

g HSQLDB

De afkorting staat voor hyper structured query language database. Dit is een relationeel database management systeem dat geschreven is in Java. Via deze bibliotheek wordt de HSQL-databank aangemaakt.

h Database dump

Een database dump wordt normaal gebruikt om een back-up van een databank te maken. Dit houdt een opname van het schema en de data in, meestal onder de vorm van een lijst SQL-opdrachten.6

4.2 INLEIDENDE INSTALLATIES

In deze paragraaf wordt de installatie van enkele programma’s besproken die nodig zijn voor de installatie of de ondersteuning van Adito.

4.2.1 Apache Ant

Bij de installatie van aXsGUARD wordt Adito automatisch mee uitgevoerd. Wordt Adito echter op zichzelf geïnstalleerd, dan gebeurt dit best via het programma Ant. Dit zorgt voor de automatisering van het bouwproces van de software, specifiek die geschreven in Java.7 Alvorens Ant te gebruiken, moeten twee omgevingsvariabelen worden ingesteld: ANT_HOME en JAVA_HOME. Deze bepalen het pad waar de Ant-bestanden en de Java-bestanden zitten en worden intern als variabelen in Ant gebruikt. Als dan nog het commando set PATH=%PATH%;%ANT_HOME%\bin ingegeven wordt, is dit klaar voor gebruik. Meer informatie over Ant volgt in hoofdstuk 8.1 Buildfile.

4.2.2 Adito zonder aXsGUARD

Om snel te kunnen werken en testen, is het handig als er een installatie van Adito aanwezig is die kan worden uitgevoerd zonder eerst aXsGUARD te moeten installeren. Ant kan Adito gemakkelijk opbouwen aan de hand van het build.xml-bestand dat meegeleverd wordt. De installatieprocedure van Adito kan opgestart worden via het commando ant install. Hiermee kan de software bijvoorbeeld geïnstalleerd worden op de localhost (127.0.0.1). Na de installatie kan de gebruikersinterface van Adito worden opgestart via het commando ant start. Het programma wordt afgesloten door ant met als target stop in te geven.

6 http://en.wikipedia.org/wiki/Database_dump

7 http://nl.wikipedia.org/wiki/Apache_Ant

Page 14: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 15

Integratie van Adito in aXsGUARD Gatekeeper

4.2.3 Cygwin

Cygwin is een programma dat een gelijkaardige omgeving als Linux / Unix aanmaakt, maar dan op een Windows-computer. Het biedt een Linux API emulatielaag aan, die ervoor zorgt dat de gebruiker toegang heeft tot een grote hoeveelheid Linux API-functionaliteiten. Daarnaast bevat het ook een ruime verzameling Linux-tools.8 De installatie van Cygwin was hier nodig om OpenSSL te kunnen gebruiken en om gemakkelijk te kunnen werken met de geïnstalleerde aXsGUARD. Deze werd aangemaakt op een virtuele machine (Sun VirtualBox), maar wordt bediend via Cygwin. Om het gebruiksgemak nog te verhogen wordt hierbij de terminal rxvt gebruikt. Deze laat eenvoudiger dan Cygwin toe om lijnen te kopiëren en te plakken. De installatie van Cygwin verloopt bijna volledig automatisch. Achteraf moeten enkel nog wat bijkomende pakketten toegevoegd worden zoals: make, gcc, perl en rxvt.

4.2.4 OpenSSL

OpenSSL werd in dit eindwerk gebruikt om te overlopen welke stappen er nodig zijn om bijvoorbeeld een self-signed-certificaat aan te maken. Het programma OpenSSL bestaat uit een bibliotheek en een command line interface. Naast vele andere toepassingen kunnen hiermee de meeste bewerkingen op X509-certificaten worden uitgevoerd.

4.2.5 Bouncy Castle

Dit hoort eigenlijk al bij de ontwerpfase, maar om een volledig overzicht te krijgen van alle installaties die moeten worden uitgevoerd, volgt hier al de bespreking. Bouncy Castle is een Java-bibliotheek die hier gebruikt werd voor het aanmaken van de keystore-bestanden. Ze wordt verkregen onder de vorm van een providerbestand in JAR-formaat en als externe referenced library toegevoegd aan een Java-project. Om effectief te kunnen werken met alle klassen uit deze bibliotheek zijn nog een aantal bijkomende instellingen nodig. Ten eerste moeten de unrestricted policy-files voor SUN JCE (Java Cryptographic Extension) worden binnengehaald. Die vervangen de bestaande policy-bestanden. Als dit niet gebeurt, zal Java bij het gebruik van de bibliotheek de fout java.lang.SecurityException geven.9 Vervolgens moet het bestand java.security worden aangepast. Daar moet een lijn tekst worden toegevoegd die Bouncy Castle als security provider opgeeft. Bijvoorbeeld:

security.provider.9=org.bouncycastle.jce.provider.BouncyCastleProvider10 Een security provider zorgt voor de implementatie van een deel of van de volledige Java Security API. Hij kan bijvoorbeeld een uitwerking geven voor het aanmaken van sleutelparen, wat voor dit eindwerk nodig zal zijn. Na deze stappen bleek de bibliotheek nog steeds niet te werken. Het probleem werd dan uiteindelijk opgelost door bij de eigenschappen (Java Build Path) van het Java-project de

8 http://www.cygwin.com/ 9 http://www.bouncycastle.org/documentation.html

10 http://www.bouncycastle.org/specifications.html

Page 15: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 16

Integratie van Adito in aXsGUARD Gatekeeper

bestaande bibliotheken te verwijderen en ze nadien gewoon terug toe te voegen. Hierdoor wordt vermeden dat Eclipse gecachete informatie zou gebruiken. In de testfase blijkt achteraf dat het aanpassen van het securitybestand vermeden wordt door een aanpassing in de code (zie 9.3 Bouncy Castle provider).

4.3 IDENTIFICATIE PARAMETERS

Om een duidelijk beeld te krijgen van de parameters waarop Adito moet worden ingesteld, wat hun betekenis is en waar ze eventueel teruggevonden kunnen worden, wordt het installatieproces een aantal keer doorlopen. In deze paragraaf worden de verschillende installatiestappen kort besproken.

• Installatiestap 1a: Configure certificate

Adito kan ervoor zorgen dat data beschermd worden doorgestuurd van de beveiligde omgeving naar de gebruiker. Hiervoor authenticeert de webserver waarop Adito draait zichzelf aan de hand van een SSL-certificaat. Er wordt gekozen om een nieuw certificaat aan te maken. Dit certificaat is uiteraard nog niet ondertekend door een Certification Authority en de gebruiker zal dus achteraf nog een aanvraag moeten indienen bij zo een CA.

Figuur 6: Certificaatkeuze

• Installatiestap 1b: Set Keystore passphrase

Het nieuwe certificaat wordt bewaard in een keystore-bestand. Om dit bestand te kunnen encrypteren en om ervoor te zorgen dat het achteraf nog kan worden aangepast via Java, moet een passphrase worden opgegeven.

Figuur 7: Passphraseconfiguratie

• Installatiestap 1c: Create new certificate

Voor het nieuwe certificaat moeten een aantal standaardgegevens van de gebruiker worden opgegeven: de hostname, de naam en locatiegegevens van het bedrijf en de afdeling.

Figuur 8: Certificaatconfiguratie

Page 16: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 17

Integratie van Adito in aXsGUARD Gatekeeper

• Installatiestap 2: Configure user database

In deze stap wordt ingesteld waar Adito informatie kan krijgen over zijn gebruikers en hoe het zijn authenticatie moet verrichten. Hier wordt gekozen om de achterliggende Unix-database te gebruiken in plaats van de Adito-database. Op deze manier kunnen de gebruikers van aXsGUARD ook dienen voor Adito.

Figuur 9: Databaseconfiguratie

• Installatiestap 3: Configure super user

Het systeem vereist de instelling/installatie van een administrator. Dit is de taak van de super user. In de geïntegreerde versie van Adito op aXsGUARD kan geen nieuwe gebruiker worden aangemaakt. Er kan enkel gekozen worden uit een lijst van bestaande gebruikers. Dit komt omdat in de vorige stap geopteerd werd om gebruik te maken van de achterliggende Unix-database. De super user van Adito is dan ook automatisch de gebruiker van het Unix-systeem.

Figuur 10: Super user configuratie

• Installatiestap 4: Configure web server

Hier worden de instellingen opgegeven van de webserver waarop Adito zal worden gebruikt. Hiervoor zijn gegevens in verband met de poort, het protocol (http of https), de interface(s) en de externe hostnamen van de webserver nodig. Optioneel kan worden ingesteld hoe de server moet reageren indien er een ongeldige hostname wordt opgegeven.

Figuur 11: Webserverconfiguratie

Page 17: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 18

Integratie van Adito in aXsGUARD Gatekeeper

• Installatiestap 5: Configure proxies

Tot slot is in Adito de mogelijkheid ingebouwd om een verbinding te maken met een externe host. Hiervoor kan het nodig zijn om een proxyserver in te stellen. Wordt daarvan gebruik gemaakt, dan zullen de nodige gegevens hier moeten worden ingesteld.

Figuur 12: Proxy-server configuratie

• Normal mode: extra instellingen

Nadat de installatie is voltooid, wordt Adito opgestart in normal mode. Hier kunnen nog extra instellingen aangepast worden die niet in de installatieprocedure zelf zijn opgenomen. Voorbeeld zijn het aanmaken van gebruikersgroepen, het instellen van gebruikersrechten, …

4.4 LOCATIE PARAMETERS

Nadat de parameters zijn geïdentificeerd, kunnen de verschillende bestanden van Adito doorlopen worden en kan er gezocht worden naar verbanden met die variabelen. Onderstaande tabel toont de parameters die tijdens de installatieprocedure werden ingesteld, het bestand waar zij kunnen gevonden worden en het type van dit bestand. Tabel 1: Locatie parameters

Parameter Naam bestand Type bestand

Passphrase certificate webserver Properties

Host name default.keystore Java Keystore

Organisational Unit default.keystore Java Keystore

Company default.keystore Java Keystore

City default.keystore Java Keystore

State default.keystore Java Keystore

Country Code default.keystore Java Keystore

Databaseconfiguratie explorer_properties HSQL Database tabel

Webserver port webserver Properties

Webserver protocol webserver Properties

Webserver interface(s) webserver Properties

Webserver hostname(s) explorer_properties HSQL Database tabel

Webserver invalid hostname action

explorer_properties HSQL Database tabel

Proxyserver hostname webserver Properties

Proxyserver port webserver Properties

Proxyserver username (optie) webserver Properties

Proxyserver password (optioneel) webserver (geëncrypteerd) Properties

Page 18: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 19

Integratie van Adito in aXsGUARD Gatekeeper

Parameter Naam bestand Type bestand

Non proxy hosts (optioneel) webserver Properties

4.5 TYPES BESTANDEN

In deze paragraaf wordt kort besproken wat de betekenis is van de bestanden waarin de verschillende parameters worden bewaard. Een globale strategie voor het aanmaken van deze bestanden zal eveneens worden voorgesteld. De concrete uitwerking wordt gegeven in hoofdstuk 5 Analyse automatisatie van de installer.

4.5.1 Configuratiebestand

Hierin worden de gegevens bewaard die moeten worden uitgevoerd door het nieuwe installatieprogramma. Het bestand moet alle parameters in een overzichtelijk formaat kunnen bewaren.

Strategie

Er wordt niet opgelegd welk formaat voor dit bestand moet worden gebruikt. Dit kan bijvoorbeeld ASCII, Yaml of XML zijn. Om een zo duidelijk mogelijke structuur in het configuratiebestand te krijgen, zodat die makkelijk kan worden ingevuld, geïnterpreteerd en gevalideerd, wordt hier gekozen voor het XML-formaat. De betekenis van de parameters wordt dan duidelijk aangegeven door hun tags. Om nuttig gebruik te kunnen maken van de structuur van het XML-bestand, moet dit ingelezen worden in Java en omgezet in een objectgeoriënteerde structuur. Dit gebeurt aan de hand van een DOM-structuur (Document Object Model).

4.5.2 Properties

Dit zijn de eenvoudigste bestanden. Het belangrijkste voorbeeld hiervan is het webserver.properties-bestand dat bestaat uit een aantal lijnen van de volgende vorm:

elementname=value Bijvoorbeeld:

webServer.port=4434 Dit toont dat deze bestanden gemakkelijk te maken zijn: er moet enkel nog een elementnaam gelinkt worden aan elke value-waarde die uit de config-file wordt gelezen.

Strategie

De properties-bestanden bestaan gewoon uit een aantal lijnen tekst die worden ingelezen vanuit het configuratiebestand en dan in het juiste formaat weer worden uitgeschreven in een bestand met properties-extentie. De enige moeilijkheid hierbij is dat het webserver.properties-bestand ook paswoordgegevens bevat (zie Tabel 1). Deze worden niet zomaar in plain-text opgeslagen, maar onder een geëncrypteerde vorm. De eenvoudige encryptietechniek die hiervoor gebruikt wordt is een

Page 19: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 20

Integratie van Adito in aXsGUARD Gatekeeper

stuk code dat te vinden is tussen de bestaande Adito-bestanden, en dus gewoon in de eigen installer kan worden overgenomen. Op het eerste gezicht lijkt dit een onveilige methode, aangezien iedereen Adito, en dus ook de encryptiecode, vrij kan downloaden. In de eerste plaats moet de gebruiker zijn computer dus fysiek beveiligen. Kan iemand dan toch nog deze beveiliging omzeilen, dan is het paswoord nog niet direct bruikbaar, omdat het in geëncrypteerde vorm staat.

4.5.3 HSQLDB

In de HSQL-database worden de instellingen bewaard die niet in het properties-bestand zitten. Zo kan een duidelijke scheiding gemaakt worden tussen de applicatie en de application server. De instellingen van deze laatste worden bewaard in het properties-bestand, terwijl die voor de applicatie in de database zitten.

Strategie

Er moeten onderzocht worden hoe een HSQL-database vanuit Java kan worden aangemaakt. Nadien wordt bekeken welke tabellen en velden er door de bestaande installer van Adito worden aangemaakt. De bijhorende hoofdingen en beginwaarden worden in principe gemakkelijk verkregen door een initiële installatie van Adito uit te voeren en vervolgens een dump te maken van de aangemaakte database. Het opbouwen van de HSQL-database zal dus in 2 fasen gebeuren. Eerst worden de databankstructuur en de initiële data aangemaakt. De commando’s die nodig zijn om de database te definiëren worden ingelezen vanuit een SQL-bestand. Dit bestand bevat de initiële instellingen van de Adito-databank en wordt aangemaakt door een dump te maken van de database, juist nadat Adito geïnstalleerd is. In een tweede fase worden de concrete data ingevuld. Dit zijn de specifieke gegevens voor de organisatie waarbij Adito wordt geïnstalleerd, bv. de naam van de administrator, de externe hostnames, …

4.5.4 Keystore

De keystore bewaart in eerste instantie een self-signed-certificaat en een sleutelpaar. Hij kan op verschillende manieren worden aangemaakt. Om ervoor te zorgen dat de code voor het nieuwe installatieprogramma van Adito zo veel mogelijk gecentraliseerd wordt, moet de methode voor het aanmaken van de keystore geïntegreerd worden in de rest van de installer. Er kan gebruik worden gemaakt van hulpprogramma’s zoals Keytool of OpenSSL, maar de opdrachtgever legde op hiervan af te zien.

Strategie

Er moeten methoden worden voorzien die een publieke en private sleutel kunnen aanmaken, die in een certificaat de gegevens van de organisatie kunnen koppelen aan zijn publieke sleutel en dit kunnen bewaren in een keystore. De code hiervoor is gebaseerd op voorbeelden die beschikbaar zijn op het Internet. Deze maken in de meeste gevallen gebruik van de bibliotheek van Bouncy Castle.

Page 20: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 21

Integratie van Adito in aXsGUARD Gatekeeper

5 Analyse automatisatie van de installer

5.1 AANMAKEN CONFIGURATIEBESTAND

Zoals eerder vermeld zal de config-file volgens het XML-formaat worden opgebouwd. Hiervoor wordt uiteraard best een gebruiksvriendelijke interface gebruikt, in dit geval Visual Web Developer 2008 Express. De gegevens worden zo veel mogelijk gestructureerd in het XML-document: er wordt bijvoorbeeld een aparte tag proxies aangemaakt die alle noodzakelijke elementen bevat voor het instellen van een proxyserver. De namen van de tags worden daarbij zo intuïtief mogelijk gekozen, zodat de gebruiker van het configuratiebestand duidelijk weet wat hij moet invullen. Om aan te geven hoe het config-bestand wordt opgemaakt en ingevuld, wordt een documentatie voorzien. Die omvat een voorbeeld van zo’n bestand en legt uit wat de verschillende velden betekenen (zie Bijlage I en Bijlage II). Daarnaast wordt ook een XML-schema opgesteld, zodat de input al op voorhand een eerste keer kan worden gecontroleerd. In het configuratiebestand wordt gebruik gemaakt van een webserver hostname voor het webserver.properties-bestand en een common name voor het SSL-certificaat. Hoewel dit beide hostnamen zijn, gaat het niet noodzakelijk over dezelfde. Dit is zo wanneer er DNAT (port redirection) gebruikt wordt om de webserver te bereiken. De client probeert hierbij eerst een https-verbinding naar het publieke ip-adres (met de publieke hostname) op te stellen. Hier moet dus het SSL-certificaat geïnstalleerd zijn, zodat de browser van de client de nodige controles kan verrichten. Hierna wordt de client doorgestuurd naar het private adres van de webserver waarop de Adito-service draait. Beide hostnamen zijn in dit geval dus verschillend.

5.2 AANMAKEN PROPERTIES-BESTAND

Het aanmaken van de properties-bestanden kan gezien worden als het inlezen van de config-file en het wegschrijven van deze gegevens volgens een bepaalde lay-out naar een tekstbestand. Java beschikt echter over een ingebouwde klasse om properties-bestanden aan te maken: Properties. Een object van deze klasse is in staat om een hoeveelheid key-value-paren bij te houden en deze achteraf automatisch in het juiste formaat naar een bestand weg te schrijven. Aan de hand van de methode setProperty(String key, String value), kan zo een paar toegevoegd worden. Zodra alle gegevens zijn aangevuld, wordt het object eenvoudig weggeschreven naar een bestand door de methode store(OutputStream out, String header) op te roepen. Hieronder volgt een kort voorbeeld. FileOutputStream fo = new FileOutputStream(location); webs.store(fo, "Webserver properties"); fo.close(); Dit zal een bestand aanmaken met inhoud: #Webserver properties #Wed Apr 21 19:08:01 CEST 2010 webServer.keyStoreType=JKS

Page 21: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 22

Integratie van Adito in aXsGUARD Gatekeeper

5.3 CONVERSIE XML – JAVA

5.3.1 Algemeen

Eens de config-file geschreven is, kan hij ingelezen worden door een Java-programma. In principe kan de code hiervoor zelf geschreven worden, maar er bestaan al beproefde standaardcomponenten die dit werk automatisch uitvoeren: XML Parsers. Een parser leest het XML-document in, verwerk het en zet het om naar een XML-documentobject dat in het geheugen wordt bewaard. Het documentobject bestaat uit een boomstructuur met knopen (nodes) die de data en de structuur van het XML-bestand bevatten. De toegang tot en het wijzigen van de elementen van de boomstructuur kan via een application programming interface, bijvoorbeeld de DOM API. Aangezien DOM niets anders is dan een verzameling Java-interfaces zonder implementatie, moet die dus nog verder uitgewerkt worden door de XML-parser. Dit zit uiteraard allemaal verwerkt in de parser, zodat de gebruiker zich daar niets moet van aantrekken.11

Figuur 13: Procedure conversie XML - Java

Er zijn verschillende uitgewerkte voorbeelden beschikbaar die een XML-bestand inlezen en omzetten naar Java-objecten. Deze worden in dit werk uiteraard als basis gebruikt en verder uitgewerkt voor de specifieke toepassing. Verderop komt een korte uitleg van de globale stappen van de code.12 3 types objecten komen vaak voor in deze code: NodeList, Node en Element. Het eerste is zoals de naam al suggereert een geordende verzameling van Nodes. Dit is niets anders dan een enkele knoop in de boomstructuur. Er zijn verschillende types knopen mogelijk: tekstknopen, commentaarknopen, elementknopen, … Een Element is een speciaal type knoop dat een element voorstelt uit een XML- of HTML-bestand.

5.3.2 Globale bespreking code

• Stap 1: Aanmaken klassen

In een eerste stap worden verschillende klassen aangemaakt. De objecten hiervan bewaren de informatie die uit het XML-document wordt gelezen. Er wordt bijvoorbeeld een klasse proxies aangemaakt, waarvan een object onder andere het paswoord als String zal opslaan.

11

http://developerlife.com/tutorials/?p=30 12

http://www.totheriver.com/learn/xml/xmltutorial.html#6.1.1

Page 22: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 23

Integratie van Adito in aXsGUARD Gatekeeper

• Stap 2: Omzetten XML - DOM

Het XML-bestand moet worden omgezet naar een DOM-document. Hiervoor wordt gebruik gemaakt van een document builder. Op een object van deze klasse wordt een methode opgeroepen die het XML-document vertaalt naar een DOM-representatie.

• Stap 3: Parsen en bewaren

Voor deze stap moet eerst het root-element van de boomstructuur bepaald worden. Pas dan kunnen vanuit dit root-element andere elementen worden opgevraagd. Zo is het mogelijk bijvoorbeeld alle gegevens die een tag hebben waarvan de naam proxies is, te selecteren en te bewaren in een nodelist. Elk element ervan kan worden bewaard in een object van de gewenste klasse. Uiteraard moet het element hiertoe eerst ontleed worden in zijn verschillende onderdelen. Uit een proxies-element wordt bijvoorbeeld het element met tag password gehaald. Dit wordt dan in de paswoordvariabele van een object van de klasse proxies bewaard.

5.3.3 Problemen

Een probleem ontstaat wanneer het XML-document lege elementen bevat. In de config-file zijn bijvoorbeeld tags voorzien voor de instellingen van een proxyserver, maar als die niet gebruikt wordt, blijven die elementen uiteraard leeg. In de code die als basis werd aangewend gaf dit een foutmelding bij de volgende methode: private String getTextValue(Element ele, String tagName) {

String textVal = null;

NodeList nl = ele.getElementsByTagName(tagName);

if(nl != null && nl.getLength() > 0) {

Element el = (Element)nl.item(0);

textVal = el.getFirstChild().getNodeValue();

}

return textVal;

}

Deze methode krijgt als argument een element mee uit de nodelist (bv. proxies) en zoekt binnen dit element naar andere elementen waarvan de tagname wordt bepaald door het argument tagName (bv. password). De bedoeling is dat het dan de inhoud uit dit laatste element haalt en bewaart in een String. De if-voorwaarde zorgt ervoor dat de methode stopt indien er geen elementen bestaan met als tag tagName, maar houdt er geen rekening mee dat het element binnen die tag leeg kan zijn. Hierdoor kan el null zijn, en zal el.getFirstChild().getNodeValue() een foutmelding geven. De oplossing bestaat er uiteraard eenvoudig in eerst te controleren of el null is en indien dit het geval is, een waarschuwing te geven in een logbestand.

Page 23: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 24

Integratie van Adito in aXsGUARD Gatekeeper

5.4 LOGBESTANDEN

5.4.1 Algemeen

Bij sommige stappen in de code is het interessant om een logbestand bij te houden. Java beschikt hiervoor over de nodige bibliotheken. Voor een eenvoudig geval is een logger, een handler en een formatter nodig. Een applicatie die iets wil loggen, kan de methode log toepassen op een object van de klasse Logger. Het loggerobject geeft zijn informatie door naar een handler, die zorgt voor de publicatie van de gegevens. Aan deze handler kan een formatter toegekend worden. Die bepaalt hoe de informatie gestructureerd wordt in het logbestand. Handler en logger maken gebruik van levels en filters om te beslissen in welke informatie ze geïnteresseerd zijn. Bij installatieproblemen beslist de lezer van het logbestand aan de hand van de levels welke informatie van belang is: fouten tijdens de procedure worden bijvoorbeeld als severe aangeduid, terwijl gewone informatie de level info zal krijgen.

Figuur 14: Overzicht Java logger

5.4.2 Globale bespreking code

De configuratie van de logger gebeurt in een aparte klasse. Die bevat een methode die de root-logger opvraagt, de level hiervan instelt en er een handler aan toekent die o.a. de lay-out en de bestandslocatie van het logbestand vastlegt. De methode wordt eenmalig opgeroepen bij het begin van de installatie. Elke andere gebruikte logger erft de eigenschappen van de root-logger. Ze worden in elke klasse aangemaakt met de volgende code: protected final static Logger logger =

Logger.getLogger(classname.class.getName());

Aan de hand van de naam van de klasse roept dit telkens een unieke logger op. Hierna kunnen boodschappen naar het logbestand worden geschreven, bijvoorbeeld: logger.severe("logboodschap");

5.4.3 Problemen

De logger is bedoeld om foutboodschappen en algemene informatie weg te schrijven naar een bestand. Dit bestand moet uiteraard eerst aangemaakt worden. De gebruiker heeft de mogelijkheid om zelf een directory op te geven waar de loggegevens moeten worden geplaatst. Indien een onbestaande directory wordt gekozen, wordt het bestand niet aangemaakt en verschijnt een foutmelding. Uiteraard wordt de oorzaak van deze fout niet gedocumenteerd in het logbestand, aangezien dit nog niet is aangemaakt. Daarom wordt een aparte methode aangemaakt die controleert of de opgegeven directory bestaat en deze

Page 24: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 25

Integratie van Adito in aXsGUARD Gatekeeper

eventueel zelf aanmaakt. De informatie over deze stappen wordt in dit geval rechtstreeks naar het scherm geschreven aan de hand van een system.err.

5.5 AANMAKEN KEYSTORE-BESTAND

5.5.1 Algemeen

Het aanmaken van een keystore-bestand kan opgedeeld worden in 3 stappen.

• Eerst wordt een sleutelpaar bestaande uit een publieke en een private sleutel aangemaakt.

• Vervolgens moet een certificaat worden gegenereerd dat de publieke sleutel en de gegevens van de organisatie met elkaar verbindt. Zo een certificaat voor een bepaalde organisatie is eigenlijk niets anders dan een publieke sleutel waarvan een derde garandeert dat hij bij de private sleutel van de organisatie hoort.

• Tot slot wordt het keystore-bestand aangemaakt waarin het certificaat en het sleutelpaar worden bewaard.

5.5.2 Globale bespreking code

a Keypair

Een keypair kan eenvoudig worden aangemaakt door gebruik te maken van de ingebouwde bibliotheek java.security. Eerst wordt een KeyPairGenerator-object gedeclareerd. Dit gebeurt via de statische methode getInstance, met als argument het coderingsalgoritme (RSA) en de provider (Bouncy Castle). Na de opgave van de lengte van de sleutel kan de generator geïnitialiseerd worden. Om ervoor te zorgen dat elke aangemaakte sleutel uniek is, wordt bij de initialisatie telkens een stuk random data meegegeven. Dit wordt eenvoudig gegenereerd door de oproep new SecureRandom(). Na deze stappen krijgt de generator de opdracht om een keypair aan te maken.

b Certificaat

Hier wordt opnieuw gebruik gemaakt van een generator, de X509V3CertificateGenerator van Bouncy Castle, die met een gewone constructor wordt aangemaakt. De generator beschikt over een aantal set-methodes voor het instellen van de publieke sleutel, de uitgever en de eigenaar van het certificaat, een serienummer, de keuze van het algoritme voor de digitale handtekening(SHA-256 met RSA-versleuteling) en een geldigheidstermijn voor het certificaat. Het instellen van de eigenaar en de uitgever gebeurt hier aan de hand van een X509Name. Deze bundelt de gegevens van de organisatie en van de CA. Bij de constructor van de X509Name moet een String worden opgegeven die als volgt is opgebouwd:

Eigenschap1 = waarde1, eigenschap2 = waarde2, … Tabel 2: Betekenis parameters X509-certificaat

Eigenschap Betekenis Voorbeeldwaarde

CN Common name localhost

O Organisation Vasco

OU Organisation Unit Able

Page 25: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 26

Integratie van Adito in aXsGUARD Gatekeeper

Eigenschap Betekenis Voorbeeldwaarde E e-mail [email protected]

C Country Belgium

L Locality Mechelen

ST State Oost-Vlaanderen

De X509Name wordt dan doorgegeven aan het certificaat, bv. X509Name x509Name = new X509Name("CN=127.0.0.1, O=Testorganisatie,…");

certGen.setSubjectDN(x509Name);

Nadat de basisgegevens voor het certificaat zijn ingesteld, kunnen nog enkele uitbreidingen worden toegevoegd. Deze dienen bijvoorbeeld om aan te geven waarvoor het certificaat kan worden gebruikt.13 Tabel 3: Betekenis certificaatextenties

Extensie Betekenis Waarde Motivatie

BasicConstraints Geeft aan of het certificaat mag worden gebruikt als een CA, dus of het andere certificaten mag ondertekenen.

false Het gaat om een self-signed certificaat.

KeyUsage Bevat beperkingen op het gebruik van de publieke sleutel in het certificaat.

digitalSignature De digitale handtekening heeft tot doel te verzekeren dat de data die doorgestuurd worden, afkomstig zijn van de webserver

keyEncipherment Het certificaat wordt gebruikt in combinatie met een protocol dat sleutels encrypteert (SSL).

ExtendedKeyUsage Verfijnt nog verder de KeyUsage.

KeyPurposeId. id_kp_serverAuth

Het certificaat dient om de server te authenticeren.

Na de installatie van deze gegevens wordt het certificaat via de generator aangemaakt.

c Keystore

Voor het aanmaken van de keystore wordt weer gebruik gemaakt van de bibliotheek java.security. Eerst wordt een KeyStore-object (store) aangemaakt via de statische getInstance-methode. Hierbij wordt opgegeven over welk type keystore het gaat (JKS, PKCS12). Om de keystore leeg te initialiseren wordt gebruik gemaakt van de code store.load(null, null).

13

http://www.bouncycastle.org/wiki/display/JA1/X.509+Public+Key+Certificate+and+Certification+Request+Gen

eration

Page 26: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 27

Integratie van Adito in aXsGUARD Gatekeeper

Een KeyStore-object kan twee types entiteiten beheren: key-entiteiten en trusted certificate-entiteiten. Het laatste type bevat één publieke sleutelcertificaat, dat vertrouwd wordt door de eigenaar van de keystore. Het eerste type beschikt over een geheime sleutel of een private sleutel in combinatie met een certificaatketting die de publieke sleutel bindt aan zijn eigenaar. Dit is wat gebruikt wordt bij self-authentication.14 De certificaatketting bestaat in dit geval maar uit één element: het self-signedcertificaat. Zoals hiervoor vermeld, wordt dus gebruik gemaakt van de key-entiteit. Deze wordt voor de keystore ingesteld aan de hand van een set-methode: setKeyEntry(String alias, Key key, char[] password, Certificate[] chain)

Tabel 4: Betekenis argumenten setKeyEntry

Argument Betekenis

alias geeft een alias aan de sleutel

key de sleutel die moet worden bewaard

password het paswoord dat de sleutel zal beschermen

Chain Als de sleutel die bewaard wordt een private sleutel is, moet de certificaatketting die de sleutel bindt aan de organisatie meegegeven worden. Hier is dit dus het self-signed certificaat.

Hierna wordt het KeyStore-object eenvoudig weggeschreven naar een keystore-bestand via de store-methode. Nu is er enkel nog een paswoord nodig om de toegang tot de keystore te beveiligen.

5.6 AANMAKEN HSQLDB

5.6.1 Algemeen

In het HSQLDB-pakket, dat via het Internet vrij verkrijgbaar is, zit een uitgewerkt voorbeeld met de nodige methodes die toelaten een database aan te maken. Die zullen vanzelfsprekend in de code van de installer verwerkt worden. Specifiek voor dit programma zijn 3 onderwerpen van belang: het aanmaken of het openen, het vullen en het correct afsluiten van de database. Alvorens deze onderwerpen uit te werken, wordt een overzicht gegeven van de verschillende tabellen die via HSQLDB kunnen worden aangemaakt:15

Type tabel Beschrijving

Memory Bij deze tabellen zit zowel de structuur als de inhoud volledig in het geheugen. Elke wijziging wordt wel bijgehouden in het script-bestand (zie 5.6.2d Bestanden). Wordt de databank afgesloten en weer geopend, dan dient dit bestand om de Memory-tabellen en hun inhoud opnieuw op te bouwen. Dit zijn de standaardtabellen die gebruikt worden bij een HSQLDB.

Cached Dit type wordt toegepast bij grote tabellen, die anders te veel geheugen innemen. Hiervan wordt slechts een beperkt deel in het geheugen bijgehouden. Hun data worden bewaard in een data-bestand (zie 5.6.2d Bestanden). Deze tabellen werken snel voor grote hoeveelheden data, maar relatief traag voor kleine hoeveelheden. Hoewel de tabellen van Adito weinig

14

http://java.sun.com/j2se/1.4.2/docs/api/java/security/KeyStore.html#load%28java.io.InputStream,%20char[]%29 15

http://hsqldb.org/doc/guide/ch01.html

Page 27: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica

Type tabel Beschrijving

gegevens bevatten, gebruiken.

Text Deze tabellen gebruiken begrensde tekstbestanden, bijvoorbeeld Separated Value, als bron van gegevens

5.6.2 Globale bespreking code

a Connectie openen

Java kan in SQL-taal communiceren met een database DataBase Connectivity). Om ervoor te zorgen dat Java kan verbinden met een specifiek type databank, bijvoorbeeld HSQLDB, is er een speciale De JDBC-driver verzorgt de connectie met de databank de overdracht van gegevens tussen het programma en de database.is volledig in Java geschreven en communiceert zonder tussenlaag met de database, dit is dus een type 4-driver: Direct to Database Pure eigenlijk een speciaal type, waaringebouwd.

Figuur

Door op deze manier gebruik te maken vangemaakt van de gebruikte database. Class.forName("org.hsqldb.jdbcDriver"

Hierna kan de connectie met de databank opgezet worden.van de getConnection-methode op de conn = DriverManager.getConnection

16

http://nl.wikipedia.org/wiki/Java_DataBase_Connectivity17

http://en.wikipedia.org/wiki/JDBC_driver

Masterproef Toegepaste informatica 2009-2010

gegevens bevatten, kozen de ontwerpers er tpch voor om vooral dit type te

Deze tabellen gebruiken begrensde tekstbestanden, bijvoorbeeld , als bron van gegevens.

Globale bespreking code

taal communiceren met een database via een speciale API: JDBC (Om ervoor te zorgen dat Java kan verbinden met een specifiek type

databank, bijvoorbeeld HSQLDB, is er een speciale driver nodig voor dat type databank.verzorgt de connectie met de databank en implementeert het protocol voor

de overdracht van gegevens tussen het programma en de database.17 De driveris volledig in Java geschreven en communiceert zonder tussenlaag met de database, dit is

Direct to Database Pure Java Driver. In het geval van HSQLDB is dit eigenlijk een speciaal type, waarbij het database management system in de driver

Figuur 15: Schema communicatie database - Java

Door op deze manier gebruik te maken van een drivers, wordt de code onafhankelijk gemaakt van de gebruikte database. De driver wordt als volgt ingeladen:

"org.hsqldb.jdbcDriver");

connectie met de databank opgezet worden. Dit gebeurt door het oproepen methode op de DriverManager-klasse uit de java.sql-bibiotheek:

getConnection("jdbc:hsqldb:" + name);

http://nl.wikipedia.org/wiki/Java_DataBase_Connectivity

http://en.wikipedia.org/wiki/JDBC_driver

28

dit type te

Deze tabellen gebruiken begrensde tekstbestanden, bijvoorbeeld Comma

speciale API: JDBC (Java Om ervoor te zorgen dat Java kan verbinden met een specifiek type

nodig voor dat type databank.16 en implementeert het protocol voor

driver van HSQL is volledig in Java geschreven en communiceert zonder tussenlaag met de database, dit is

In het geval van HSQLDB is dit driver zit

de code onafhankelijk

Dit gebeurt door het oproepen bibiotheek:

Page 28: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 29

Integratie van Adito in aXsGUARD Gatekeeper

De gegevens tussen haakjes vormen een database-URL:18 jdbc duidt de driver aan, hsqldb het protocol en name de naam van de databank. Optioneel zijn een gebruiker en een paswoord. Indien de databank bestaat, wordt een connectie uitgevoerd. In het andere geval wordt een nieuwe database aangemaakt. Na deze stap is de connectie geopend.

b Opdracht uitvoeren

Om een SQL-opdracht (statement) te kunnen uitvoeren moet eerst een statement-object

voor de database aangemaakt worden: st = conn.createStatement(). Op dit object wordt dan de methode executeUpdate toegepast, wat ervoor zorgt dat een SQL-opdracht zoals insert, delete of update wordt uitgevoerd, bv: st.executeUpdate(“INSERT INTO EXPLORER_PROPERTIES

VALUES('client.shutdown.wait','','0','0','','2500')”); Nadat de opdrachten zijn uitgevoerd, moet het statement-object gesloten worden via de close()-methode.

c Connectie sluiten

Eens de nodige opdrachten zijn uitgevoerd, wordt de database afgesloten. Dit gebeurt aan de hand van 2 opdrachten: st.execute("SHUTDOWN");

conn.close();

De eerste maakt een controlepunt aan, plus een nieuw scriptbestand met daarin de data van de memory-tabellen (zie 5.6.2d Bestanden) en zorgt ervoor dat een nieuwe back-up wordt bewaard in het back-upbestand. De tweede opdracht sluit het connectieobject.

d Bestanden

Nadat de nodige commando’s in Java zijn uitgevoerd, worden automatisch een aantal types bestanden aangemaakt door HSQLDB:19

Type Inhoud

Properties de globale instellingen van de database

Script de definitie van tabellen en andere databaseobjecten en de data van de niet gecachete tabellen

Log Bevat de recente veranderingen die aan de database gemaakt zijn.

Data de data van de gecachete tabellen

Backup Bewaart een gecomprimeerde versie van de laatst gekende consistente toestand van de database.

Lock Geeft aan welk proces of programma de database gebruikt. Het lck-bestand verdwijnt indien een normale SHUTDOWN (zie 5.6.2c Connectie sluiten) wordt uitgevoerd.

18

http://hsqldb.org/doc/guide/ch04.html 19

http://hsqldb.org/doc/guide/ch01.html

Page 29: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 30

Integratie van Adito in aXsGUARD Gatekeeper

6 Softwareontwerp

6.1 ALGEMEEN

De nieuwe installer voor Adito wordt opgedeeld in 4 packages. Op deze manier is er een onderscheid tussen de verschillende functies van de klassen. Een van deze packages bevat alle logica voor het inlezen en parsen van bestanden: AditoInstaller.input. De hieruit gefilterde gegevens worden in de klassen van AditoInstaller.data bewaard. Deze data moeten in het juiste formaat en volgens de juiste lay-out weggeschreven worden naar de specifieke bestanden (zie Types bestanden). De package die daarvoor zorgt is AditoInstaller.output. Daarnaast zijn er nog een aantal klassen die geen van de vorige functies vervullen, bijvoorbeeld de configuratie van een logger, een algemene klasse die alles regelt. Deze klassen worden in AditoInstaller geplaatst. In de volgende paragrafen komt een bespreking van de verschillende klassen en hun samenhang.

6.2 ADITOINSTALLER.INPUT

a XmlReader

Deze klasse verzorgt het inlezen van de gegevens uit het config.xml-bestand.

Figuur 16: Klassendiagram XmlReader

De methode parseXmlFile kijkt na of het Document-object al bestaat (zie 5.3 Conversie XML – Java). Als dit het geval is, moet er verder niets gebeuren en geeft de methode true terug. Is dit niet het geval, dan wordt geprobeerd een nieuw Document-object van het config-bestand te maken. De methode geeft als uitvoer aan of dit al dan niet gelukt is. De meeste methoden die worden aangemaakt, hebben een boolean als resultaat. Op deze manier kan in de algemene klasse die de installer bedient (zie 6.4 Adito-Installer), gemakkelijk bepaald worden of de installatie volledig gelukt is. In de verdere tekst wordt hier niet meer verder op ingegaan. De methode copyByMap staat in voor het kopiëren van de data die uit de nodelist (zie 5.3 Conversie XML – Java) worden gehaald naar een ConfigHolder (zie 6.3a ConfigHolder – PropertiesHolder). Dit is een interface die gebruikt wordt om alle klassen te verzamelen die gegevens uit het configuratiebestand bewaren. De FieldMapper(zie 6.2c FieldMapper) zorgt voor de verbinding tussen de velden van een ConfigHolder en de elementen van de nodelist. Omdat de copyByMap-methode verdere uitleg vraagt, is deze volledig uitgewerkt in paragraaf 7.1 CopyByMap en getConfig.

Page 30: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 31

Integratie van Adito in aXsGUARD Gatekeeper

Tot slot bevat deze klasse nog de methode getConfig. Die zorgt ervoor dat de elementen met een tag bepaald door het argument tag, uit het config-bestand worden gehaald en in de specifieke ConfigHolder worden bewaard. Daarvoor wordt van de vorige twee methoden gebruik gemaakt.

b ConfigWriter

De ConfigWriter vormt een uitbreiding op de XmlReader-klasse:

Figuur 17: Klassendiagram ConfigWriter

Het nadeel van getConfig uit de klasse XmlReader is dat bij het oproepen van deze methode twee argumenten moeten worden meegegeven: een specifieke tag (bv. proxies) en een specifieke dataklasse (bv. Proxies). Dit is niet zo interessant. Beter is het te werken met zoveel mogelijk kant-en-klare methoden, dus zonder al te veel argumenten te moeten opgeven. Een oplossing bestaat erin een nieuwe methode aan te maken. Deze methode roept zelf getConfig op en vult default-waarden in voor de twee argumenten. Bijvoorbeeld: public WebServer readWebserverData() {

WebServer ws = new WebServer();

if (!this.getConfig("WebServer", ws)) {

return null;

}

return ws;

}

Dit is wel een zeer specifieke methode, en gaat in tegen het principe om de methodes van XmlReader zo algemeen mogelijk te houden. Daarom wordt deze in ConfigWriter geplaatst, wat een uitbreiding is van XmlReader.

Page 31: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 32

Integratie van Adito in aXsGUARD Gatekeeper

c FieldMapper

Figuur 18: Klassendiagram FieldMapper

De klasse FieldMapper bevat één gegevenselement van het type HashMap<String,String>. Een hashmap bestaat uit een verzameling key-valueparen, waarbij geen enkele key meer dan een keer mag voorkomen. In het geval van de FieldMapper zijn beide elementen uit een paar van de klasse String. Voor de installer van Adito wordt deze mapper gebruikt om de gegevenselementen van een klasse te koppelen aan de corresponderende elementen uit de configfile en de lay-out van de uitvoerbestanden. Dit wordt verduidelijkt met het volgende voorbeeld. In het config-bestand (input) zit een element met tag keyStoreType. Dit komt overeen met het gegevenselement keystoretype uit de klasse WebServer (data). In het webserver.properties-bestand (output) moet de tekst webServer.keyStoreType=JKS geschreven worden. Dit resulteert dan in een mapping tussen keyStoreType en keystoretype en tussen keystoretype en webServer.keyStoreType.

Config-file Webserver data Output file

Figuur 19: Mapping config-file - dataklasse - output file

De klasse bevat twee methoden addMap: addmap(String target, String source) en addmap(String target). Valt de keuze op de methode met het enkelvoudige argument, dan wordt gewoon een mapping gemaakt tussen het element en zichzelf. Dit is bijvoorbeeld het geval wanneer zowel het gegevenselement van de klasse als de tag uit de config-file dezelfde naam hebben. Er zijn twee bevragingsmethoden voorzien. Met getSource kan de gebruiker aan de hand van de key de value-waarde van een key-value-paar opvragen. Daarnaast wordt ook een methode gemaakt om de volledige set van unieke key-waarden terug te geven. Dit laat samen met getSource toe om een volledige hashmap te overlopen en de key-value-paren af te drukken.

<keyStoreType>

JKS

</keyStoreType>

public String keystoretype;

webServer.keyStoreType

=JKS

Page 32: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 33

Integratie van Adito in aXsGUARD Gatekeeper

d SqlReader

Deze klasse bevat de logica voor het inlezen van de SQL-bestanden.

Figuur 20: Klassendiagram SqlReader

De methode readSql leest een bestand, verwijdert commentaar en geeft dan een rij van SQL-opdrachten in String-formaat .

e DirectoryReader

Zoals eerder vermeld, heeft de installer de mogelijkheid om de initiële gegevens van de HSQL-database in te stellen aan de hand van een SQL-bestand. In de praktijk worden evenwel meerdere bestanden ingelezen en uitgevoerd. Deze bestanden worden gegroepeerd in een bestandsmap. Het installatieprogramma moet dus de mogelijkheid hebben om alle bestanden in een directory te herkennen, te lezen en uit te voeren.

Figuur 21: Klassendiagram DirectoryReader

De bestanden worden allemaal gekenmerkt door een volgnummer, zodat ze in volgorde uitgevoerd worden. Dit is nodig omdat elk bestand voortbouwt op het vorige: er kunnen bijvoorbeeld pas bepaalde waarden in een tabel ingevuld worden, als die door het vorige bestand al is aangemaakt. De lijst met bestanden wordt daarom eerst gesorteerd aan de hand van het Bubble Sort-algoritme.

6.3 ADITOINSTALLER.DATA

a ConfigHolder – PropertiesHolder

Figuur 22: Klassendiagram ConfigHolder

ConfigHolder vormt een interface voor de dataklassen. Dit zorgt ervoor dat de verschillende dataklassen allemaal kunnen aangesproken worden als ConfigHolder. Dit laat toe de methoden die ervoor zorgen dat deze klassen opgevuld worden, zo algemeen mogelijk te houden. Een voorbeeld hiervan is terug te vinden in paragraaf 6.2a XmlReader: de methoden copyByMap en getConfig krijgen de algemene interface ConfigHolder als argument mee. Op deze manier worden geen aparte methoden geschreven voor

Page 33: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 34

bijvoorbeeld het inlezen van de certificaatgegevens (getCertConfig) en het inlezen van de databasegegevens (getDataConfig), maar maken ze beide gebruik van één en dezelfde methode: getConfig. Elke klasse die gegevens bewaart is immers een ConfigHolder. De interface ConfigHolder beschikt over 1 methode die een hashmap als resultaat heeft. Deze methode bestaat uit de paren die de gegevenselementen van een specifieke ConfigHolder linken aan de overeenkomstige tags in het config-bestand. Analoog met de ConfigHolder wordt een interface PropertiesHolder aangemaakt. De methode getPrintMap zorgt voor de verbinding tussen de gegevenselementen van een specifieke PropertiesHolder en de tekst zoals die moet worden uitgeschreven in de uitvoerbestanden (zie 6.2c FieldMapper).

Figuur 23: Klassendiagram PropertiesHolder

Er wordt in de eerste plaats gebruik gemaakt van een aparte interface, omdat niet elk gegevenselement overeenkomt met één eenvoudige lijn in een uitvoerbestand. De gegevens die bijvoorbeeld weggeschreven worden naar de database, moeten worden verpakt in een specifieke SQL-opdracht. Daarom zal de klasse die de gegevens voor de databank bevat enkel de interface ConfigHolder, maar niet PropertiesHolder, implementeren. Data die daarentegen weggeschreven worden naar het webserver.properties-bestand, kunnen wel als eenvoudige lijnen worden opgebouwd. De klassen die deze data bevatten implementeren dus beide interfaces. Hieronder volgt een voorbeeld om het verschil in opbouw duidelijk te maken:

INSERT INTO EXPLORER_PROPERTIES

VALUES('client.heartbeat.interval','','0','0','','40000')

webServer.keyStoreType=JKS

Een tweede reden voor een aparte interface is dat niet elke klasse haar data effectief naar een bestand móet uitschrijven. De klasse waarvan de instanties de gegevens in verband met de bestandslocaties bewaren, worden door de installer enkel gebruikt, maar niet afgeprint. De locatie van de database moet bijvoorbeeld nergens afgeprint worden, maar ze moet wel intern in het installatieprogramma kunnen worden gebruikt.

b WebServer

Zodra de algemene interface is aangemaakt, kunnen de specifieke dataklassen worden geïmplementeerd. Een voorbeeld hiervan is WebServer.

Page 34: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 35

Integratie van Adito in aXsGUARD Gatekeeper

Figuur 24: Klassendiagram WebServer

Zoals eerder vermeld is WebServer een realisatie van zowel ConfigHolder als PropertiesHolder en is een concrete uitwerking voor de methoden getPrintMap en getParseMap noodzakelijk. De klasse gebruikt ook een element van het type Encrypteer. In paragraaf 4.5.2 Properties is al uitgelegd waarom het paswoord wordt geëncrypteerd. Er wordt dus gebruik gemaakt van aggregatie om de daarvoor benodigde logica te integreren in WebServer. De meeste andere dataklassen zijn volgens hetzelfde principe opgebouwd.

c HSQL-data

Het grootste deel van de waarden die ingevuld moeten worden in de HSQL-database, bevinden zich in de tabel explorer_properties. Hieronder staat een voorbeeld van een opdracht die op deze tabel moet worden uitgevoerd: INSERT

INTO EXPLORER_PROPERTIES

VALUES('security.userDatabase','','0','1','','unixAuth')

Dit zorgt ervoor dat de gebruikersgegevens uit de onderliggende Unix-database worden aangewend. De aanmaak van de tabel explorer_properties gebeurde aan de hand van de volgende opdracht: CREATE CACHED TABLE EXPLORER_PROPERTIES(

KEY_1 VARCHAR(255) NOT NULL,

KEY_2 VARCHAR(255) NOT NULL,

KEY_3 VARCHAR(255) NOT NULL,

KEY_4 VARCHAR(255) NOT NULL,

KEY_5 VARCHAR(255) NOT NULL,

VALUE VARCHAR(255) NOT NULL

);

Uit deze twee opdrachten zijn de betekenissen van KEY_1 en VALUE gemakkelijk af te leiden. Die van de andere keys zijn echter nog niet achterhaald. Indien Adito twee keer wordt geïnstalleerd, waarbij de eerste keer gekozen wordt om de achterliggende Unix-database te

Page 35: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica

gebruiken en de tweede keer de eigen Aditoverandert, de keys blijven ongewijzigd. De waarden voor de onafhankelijk van de gekozen valueconfiguratiebestand. Om te voorkomen dat deze standaardwaarden worden gebruikt door het nieuwe installatieprogramma, wordt ervoor gezorgd dat elk veld in de tabel al een bevat. Deze worden ingelezen vanuit de SQLopdracht: INSERT INTO EXPLORER_PROPERTIES VALUES('security.userDatabase','','0','1',' Op deze manier komt in de tabel al een waarde waarde kan nu eenvoudig aan de hand van een update die de correcte waardehet configuratiebestand gebruikt, overschreven worden: UPDATE EXPLORER_PROPERTIES SET VALUE='unixAuth' WHERE KEY_1='security.userDatabase' In de dataklasse worden dus enkel die waarden bewaard die specifiek moeten wordenoverschreven. Dit geeft dan bijvoorbeeld onderstaand klasse

Figuur

6.4 ADITO-INSTALLER

Deze package bevat onder andere de klassesleutels maken en die de HSQLDBGeneral. Die regelt het volledige verloop van de installer en schrijft in het logbestand of de installatie al dan niet geslaagd is.

Masterproef Toegepaste informatica 2009-2010

gebruiken en de tweede keer de eigen Adito-database, dan blijkt dat enkel de VALUEen ongewijzigd. De waarden voor de keys zijn dus standaard,

value. Het heeft dan ook geen nut om ze op te ne

dat deze standaardwaarden worden gebruikt door het nieuwe ervoor gezorgd dat elk veld in de tabel al een defaultwaarde

bevat. Deze worden ingelezen vanuit de SQL-bestanden. Ze bevatten dan bijvoorbeeld al de

INTO EXPLORER_PROPERTIES VALUES('security.userDatabase','','0','1','','builtIn')

de tabel al een waarde security.userDatabase (KEY_1)waarde kan nu eenvoudig aan de hand van een update die de correcte waarde het configuratiebestand gebruikt, overschreven worden:

KEY_1='security.userDatabase'

us enkel die waarden bewaard die specifiek moeten worden. Dit geeft dan bijvoorbeeld onderstaand klassendiagram:

Figuur 25: Klassendiagram ExplorerProperties

NSTALLER

bevat onder andere de klassen die de logger configureren, die certificaten en sleutels maken en die de HSQLDB-operaties mogelijk maken. De belangrijkste hier is

regelt het volledige verloop van de installer en schrijft in het logbestand of de installatie al dan niet geslaagd is.

36

VALUE zijn dus standaard,

. Het heeft dan ook geen nut om ze op te nemen in het

dat deze standaardwaarden worden gebruikt door het nieuwe defaultwaarde

e bevatten dan bijvoorbeeld al de

(KEY_1) voor. Deze (unixAuth) uit

us enkel die waarden bewaard die specifiek moeten worden

, die certificaten en . De belangrijkste hier is echter

regelt het volledige verloop van de installer en schrijft in het logbestand of de

Page 36: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 37

Integratie van Adito in aXsGUARD Gatekeeper

7 Software-implementatie

Dit hoofdstuk bevat de uitwerking van een methode uit de nieuwe installer: copyByMap. Deze code is van essentieel belang in de klasse XmlReader, die verantwoordelijk is voor het inlezen van het config-bestand en het bewaren van de gegevens in de dataklassen. Aangezien elk uitvoerbestand deze gegevens en dus deze methode nodig heeft, is het noodzakelijk dat ze snel en eenvoudig toepasbaar is voor elk type bestand.

7.1 COPYBYMAP EN GETCONFIG

Om de methode copyByMap goed te kunnen begrijpen, moet gestart worden bij de code van getConfig. Die krijgt als argumenten een tag en een ConfigHolder mee, bijvoorbeeld: WebServer ws = new WebServer(); getConfig(“WebServer”, ws); Deze argumenten worden dan verwerkt in de getConfig-methode: protected boolean getConfig(String tag, ConfigHolder ch) {

if (parseXmlFile()) {

Hier wordt eerst gecontroleerd of het Document-object (dom) al dan niet kan of moet worden aangemaakt (zie 6.2a XmlReader). Vervolgens wordt het FieldMapper-object van de ConfigHolder opgevraagd: FieldMapper map = ch.getParseMap();

Hierna komt een stuk code dat ervoor zorgt dat een NodeList wordt aangemaakt die alle elementen bevat met een tag zoals die meegegeven als argument van getConfig (bijvoorbeeld WebServer). Element docEle = dom.getDocumentElement();

NodeList ws = docEle.getElementsByTagName(tag);

Bevat het config-bestand geen elementen met die tag of is het aantal elementen binnen die tag nul, dan wordt een foutmelding gegeven:

if (ws == null || ws.getLength() == 0) {

logger.severe(

"missing nodelist: \""

+ tag

+ "\" not found"

);

return false;

}

Indien dit geen probleem is, wordt vervolgens de methode copyByMap opgeroepen. Daarnaast wordt nog gecontroleerd of deze oproep succesvol was en of het config-bestand kon gelezen en ontleed worden.

Page 37: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 38

Integratie van Adito in aXsGUARD Gatekeeper

else if (copyByMap(ch, map, ws))

return true;

} else {

logger.warning("can not parse xml");

}

return false;

}

De methode copyByMap krijgt als argument de ConfigHolder, zijn FieldMapper en een NodeList mee. De ConfigHolder is initieel leeg, maar zal door de methode opgevuld worden. Aan de hand van de velden die voorkomen in zijn FieldMapper haalt het hiervoor gegevens uit de NodeList. private boolean copyByMap(

ConfigHolder h,

FieldMapper map,

NodeList nodelist)

{

Element elem = null;

if (nodelist == null || nodelist.getLength() == 0) {

logger.log(Level.SEVERE, "missing nodelist");

return false;

}

Hier wordt de NodeList opnieuw gecontroleerd. Het kan immers voorkomen dat de methode copyByMap ergens anders dan in getConfig wordt opgeroepen. Indien de NodeList niet correct is, wordt in deze laatste methode een foutboodschap gegeven die preciezer is dan die van copyByMap: de tag die de fout veroorzaakt kan immers ook mee afgeprint worden. Dan wordt het eerste element uit de NodeList opgevraagd: elem = (Element) nodelist.item(0);

Hierbij wordt verondersteld dat elke hoofdtag slechts één keer voorkomt in het config-bestand, wat voor deze installer het geval zal zijn. Alle gegevens in verband met de WebServer worden bijvoorbeeld binnen één tag geplaatst, en die komt ook maar één keer voor: <WebServer>

<protocol>https</protocol>

</WebServer>

Nu wordt gecontroleerd of het element al dan niet null is:

if (elem == null) {

logger.severe("missing element");

return false;

}

Er moet een mapping gemaakt worden tussen de elementen van de config-file en de gegevenselementen van de ConfigHolder. Zoals eerder gezegd wordt hiervoor de FieldMapper gebruikt. Die bevat als key-waarden de naam van de gegevenselementen uit de ConfigHolder en als value-waarden de tags van de overeenkomstige elementen. De key-value-paren kunnen gemakkelijk overlopen worden:

Page 38: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 39

Integratie van Adito in aXsGUARD Gatekeeper

Iterator<String> iter = map.keySet().iterator();

while (iter.hasNext()) {

String target = iter.next();

String source = map.getSource(target);

De iterator overloopt de Set van key-waarden, zodat de overeenkomstige value-waarde uit de FieldMapper wordt gehaald (zie 6.2c FieldMapper). Hierna kan er telkens een NodeList worden aangemaakt die de elementen bevat met een tag bepaald door de value-waarden van de FieldMapper:

String value = null;

NodeList nl = elem.getElementsByTagName(source);

if (nl != null && nl.getLength() > 0) {

Element el = (Element) nl.item(0);

if (el != null) {

Node node = el.getFirstChild();

In de variabele el zit nu het element uit het XML-docement met tag source. Om te weten te komen wat er binnen die tag zit, wordt het eerste kindelement hiervan opgevraagd. Dit levert dan in principe een Node van het type Text op. Deze wordt bewaard in de variabele node. Dan wordt de volgende code gebruikt: Field fld = h.getClass().getDeclaredField(target);

H is de ConfigHolder die moet worden gevuld. De methode getClass levert de runtime-klasse op.20 Dit wil zeggen dat indien de ConfigHolder een object was van de klasse WebServer, deze laatste klasse als antwoord wordt gegeven. De methode getDeclaredField geeft een Field terug dat een gedeclareerd veld representeert uit de klasse die verkregen is via GetClass.21 Een Field levert informatie over en toegang tot een veld van een klasse of interface.22 Dit zorgt ervoor dat men via dit object de waarde van een gegevenselement van de klasse kan opvragen of aanpassen. Deze techniek behoort tot het domein van de reflectie. De code gaat hierna als volgt verder:

if (node != null) {

value = node.getNodeValue();

}

else {

value = "";

logger.warning(

source

+ " Empty tag in "

+ elem.getNodeName()

);

}

if (fld.getType() == String.class) {

fld.set(h, value);

}

else if (fld.getType() == Encrypteer.class) {

fld.set(h, new Encrypteer(value));

}

20 http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html 21

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html#getDeclaredField%28java.lang.String%29 22

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Field.html

Page 39: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 40

Integratie van Adito in aXsGUARD Gatekeeper

Er wordt gecontroleerd of het element uit de config-file een (tekst-)node bezit. Indien dit het geval is, moet de waarde hiervan bewaard worden in de ConfigHolder. Hiervoor wordt gebruik gemaakt van de methode set(Object obj,Object value). Obj is het object waarvan het veld moet worden aangepast en value is de nieuwe waarde die het veld krijgt.23 Voor de gegevenselementen van de dataklassen werden twee types gebruikt: String en Encrypteer. In het eerste geval wordt de waarde rechtstreeks weggeschreven. In het andere geval moet het paswoord in tekstformaat dat ingelezen wordt uit het config-bestand omgezet worden naar een object van de klasse Encryptor. Indien er geen tekst is voorzien tussen de tags, wordt een lege String als waarde meegegeven. Het is niet verplicht om tekst tussen de tags te plaatsen, maar in dat geval moet de gebruiker wel op de hoogte gebracht worden door een waarschuwing te registreren in het logbestand. Voor het aanmaken van het veld werd een Try geplaatst. Deze wordt hier aangevuld door de nodige catch-blokken.

} catch (NoSuchFieldException e) {

logger.severe(

"Field " + target + " in class "

+ h.getClass().getName()

+ "does not exist ("

+ e.getMessage() + ")"

);

return false;

} catch (IllegalAccessException e) {

logger.severe(

"Field " + target + " in class "

+ h.getClass().getName()

+ "can't be set("

+ e.getMessage() + ")"

);

return false;

}

Dit zorgt ervoor dat een foutboodschap wordt gegenereerd wanneer het veld niet bestaat of wanneer geen toegang wordt verkregen tot het veld. Hiermee zijn de gegevens van het config-bestand naar de juiste ConfigHolder geschreven. Tot slot wordt de methode afgesloten met nog een aantal voorwaarden en logboodschappen indien bepaalde Elements of NodeLists niet bestaan.

7.2 JAVADOC

Voor de toekomstige gebruikers van de nieuwe installer zou het handig zijn mocht er een documentatie aanwezig zijn. Hiervoor kan gebruik gemaakt worden van Javadoc. Op deze manier kunnen de verschillende methoden in HTML-formaat uitgelegd worden.

23

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Field.html#set%28java.lang.Object,%20java.lang.Object

%29

Page 40: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 41

Integratie van Adito in aXsGUARD Gatekeeper

8 Voorbereiding testfase

8.1 BUILDFILE

De nieuwe installer bestaat uit een verzameling van packages. Die worden allemaal toegevoegd aan een Java Archive (JAR). Dit JAR-bestand wordt aangemaakt via Ant. Zoals eerder vermeld zorgt Ant voor het automatiseren van het bouwproces van de software. Hiermee wordt bedoeld dat het probeert een aantal doelen of targets te bereiken. Een doel is bijvoorbeeld het compileren van het programma of het aanmaken van een JAR-bestand. De benodigde stappen om een bepaald target te verwezenlijken, staan beschreven in een XML-document: een Buildfile.24 In Eclipse kan voor een bepaald project automatisch een Buildfile gegenereerd worden. Dit wordt ook bij deze installer toegepast. Het XML-bestand dat hierdoor aangemaakt wordt, bevat echter geen optie om een JAR-bestand aan te maken. De Buildfile moet dus aangevuld worden met een bijkomende target om dit bestand te kunnen genereren.25 <target name="Jar" description="Generates a JAR-file of the project in the

directory build">

<mkdir dir="build/classes"/>

<javac

srcdir="src"

destdir="build/classes"

/>

<mkdir dir="build/AditoInstaller"/>

<jar

destfile="build/AditoInstaller/AditoInstaller.jar"

basedir="build/classes"

>

<manifest>

<attribute name="Main-Class" value="AditoInstaller.General"/>

</manifest>

</jar>

</target> Deze code maakt 3 nieuwe directories aan: build, classes en jar. In de tweede map zorgt het commando javac ervoor dat de broncode die in de src-map zit, wordt gecompileerd tot class-bestanden. Op deze manier wordt de broncode omgezet tot bestanden die kunnen worden uitgevoerd door de Java Virtual Machine.26 Dit levert uiteraard dezelfde bestanden op als deze die in de bin-map worden gemaakt door rechtstreeks te compileren in Eclipse.

8.1.1 Manifest

Eens deze bestanden zijn aangemaakt, kan het JAR-bestand gegenereerd worden via de jar-tag. Een belangrijk stuk binnen deze code is het deel manifest. Een manifest-bestand bevat metadata die meegeleverd worden in de directory META_INF van een JAR. Zo een bestand bestaat uit een aantal name-value-paren, bijvoorbeeld:

24 http://nl.wikipedia.org/wiki/Apache_Ant 25

http://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html 26

http://nl.wikipedia.org/wiki/Javac

Page 41: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 42

Integratie van Adito in aXsGUARD Gatekeeper

Name Value Ant-Version : Apache Ant 1.6.1

Een van de paren die in dit bestand geschreven wordt, duidt de basisklasse aan van het JAR:

Name Value Main-Class : AditoInstaller.General

Deze lijn zorgt ervoor dat het JAR-bestand executable wordt gemaakt. Bij de uitvoering van het archief wordt nu direct de Main-class opgeroepen. Het uitvoeren van zo een executable JAR file, gebeurt aan de hand van het commando java -jar AditoInstaller.jar. In Eclipse bestaat de optie om automatisch een executable JAR file te genereren. Het voordeel hiervan is uiteraard dat dit veel gebruiksvriendelijker is: er moet geen build-bestand worden aangemaakt en het is ook niet nodig zelf een manifest-bestand te schrijven. Het nadeel is wel dat eventuele aanpassingen aan de code steeds via Eclipse (of een gelijkaardig programma) moeten gebeuren. Dit is niet het geval wanneer een build-bestand wordt gebruikt. De code wordt dan bijvoorbeeld gewoon met een editor aangepast en nadien wordt het JAR-bestand opnieuw aangemaakt via het bestaande build-bestand. Hier is bijgevolg helemaal geen specifieke software meer nodig. Daarom wordt ervoor gekozen om geen gebruik te maken van de automatische generator in Eclipse.

8.1.2 Buildfile uitvoeren

Zodra al deze instellingen zijn gemaakt, kan Ant de software bouwen. Hiervoor wordt het commando ant Jar opgegeven. Daarmee wordt in de map build/jar een executable Jar file gemaakt met als manifest-inhoud: Manifest-Version: 1.0 Ant-Version: Apache Ant 1.8.0 Created-By: 1.6.0_16-b01 (Sun Microsystems Inc.) Main-Class: AditoInstaller.General

Nu is de installer klaar voor de testfase.

Page 42: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 43

Integratie van Adito in aXsGUARD Gatekeeper

9 Testen installer

9.1 UPGRADE VERMIJDEN

Bij het testen van de installer ontstaat een eerste probleem bij het upgraden van de database. Als Adito wordt opgestart, wordt automatisch nagekeken of er geen updates van de tabellen moeten worden uitgevoerd. Is dit het geval, dan worden nieuwe tabellen aangemaakt of de bestaande aangepast aan de hand van SQL-bestanden die zich in de directory Upgrade bevinden. Dit zorgt voor een conflict met de database die door de nieuwe installer is aangemaakt. Een van de bestanden voert bijvoorbeeld de volgende SQL-opdracht uit: CREATE CACHED TABLE EXPLORER_PROPERTIES De database die door de installer aangemaakt werd bevat deze tabel echter al. Dit zorgt ervoor dat er een foutmelding wordt gegenereerd en dat de database uiteindelijk niet meer toegankelijk is. Om te vermijden dat de upgrades worden uitgevoerd, wordt de directory waarin deze SQL-bestanden zitten hernoemd, bijvoorbeeld naar UpgradeOld. Dit moet uiteraard automatisch gedaan worden door de nieuwe installer.

9.2 EXTERNE JAR’S

In Eclipse werden een aantal externe JAR-files als referentie toegevoegd aan het project. Indien deze niet bij de nieuwe installer gevoegd worden, kunnen er fouten optreden. Ontbreekt bijvoorbeeld hsqldb.jar, dan kan de JDBC-driver niet ingeladen worden en wordt dus geen database gemaakt. Er moet voor gezorgd worden dat de Java Virtual Machine te weten komt waar deze bestanden kunnen worden gevonden. Dit gebeurt aan de hand van het argument class-path, wat ingesteld kan worden in het manifestbestand van het JAR van de installer.27 Het nadeel is wel dat dit pad altijd verwijst naar een locatie buiten het JAR-bestand. Dit wil zeggen dat de ontbrekende referenties niet mee kunnen worden verpakt in het archief van de installer, waardoor dit uit meerdere bestanden zal bestaan. Om ervoor te zorgen dat de paden ingesteld zijn, wordt de Ant buildfile verder uitgebreid: <mkdir dir="build/AditoInstaller/externalJars"/>

<copy todir="build/AditoInstaller/externalJars">

<fileset dir="JAR"/>

</copy>

Dit zorgt ervoor dat de JAR-bestanden die in de gegevensmap JAR zitten, gekopieerd worden naar een directory binnen build. Die laatste bevat dan alle gegevens die nodig zijn voor en gegenereerd worden door Ant. In de directory JAR zitten de bestanden hsqldb.jar voor de HSQLDB en bcprov-ext-jdk16-145.jar voor Bouncy Castle. De jar-tag ziet er nu als volgt uit:

27

http://en.wikipedia.org/wiki/Classpath_%28Java%29

Page 43: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 44

Integratie van Adito in aXsGUARD Gatekeeper

<jar

destfile="build/AditoInstaller/AditoInstaller.jar"

basedir="build/classes">

<manifest>

<attribute name="Class-Path" value=

"externalJars/hsqldb.jar

externalJars/bcprov-ext-jdk16-145.jar"

/>

<attribute name="Main-Class" value="AditoInstaller.General"/>

</manifest>

</jar>

Op deze manier wordt een class-path gedefinieerd naar de externe JAR-bestanden.

9.3 BOUNCY CASTLE PROVIDER

De vorige twee paragrafen waren voldoende om de installer te laten werken op de eigen computer. Op aXsGUARD gaf hij echter de volgende foutmelding in de klasse CertKeystore: no such provider: BC. Deze klasse bevat 2 methoden: een om een certificaat en een om een sleutelpaar aan te maken. Ze beschikken beide over een stuk code dat gebruik maakt van de Bouncy Castle provider, respectievelijk x509Cert = certGen.generate(key.getPrivate(), "BC");

en

KeyPairGenerator kpGen = KeyPairGenerator.getInstance("RSA", "BC");

In de eerste methode wordt deze provider (BC) expliciet opgeroepen via Security.addProvider(new BouncyCastleProvider()). In de tweede methode gebeurt dit niet, maar toch werd de security provider op de eigen computer gevonden, omdat hij zo was ingesteld in het bestand java.security (zie 4.2.5 Bouncy Castle). Hier moet dus eigenlijk gekozen worden om ofwel telkens gebruik te maken van de code Security.addProvider(new BouncyCastleProvider()) of om het bestand java.security aan te passen. Op aXsGUARD is uiteraard geen aanpassing gemaakt aan de Java-bestanden. Om ook hier gebruik te kunnen maken van de provider, wordt in de tweede methode dus ook een extra lijn code geplaatst.

Page 44: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 45

Integratie van Adito in aXsGUARD Gatekeeper

10 Extra functionaliteiten

10.1 CERTIFICATE SIGNING REQUEST

In Adito zit een functie ingebouwd die automatisch een certificate signing request genereert. Deze aanvraag kan dan door een gebruiker ter ondertekening ingediend worden bij een CA. Het zou handig zijn mocht dit bestand automatisch mee aangemaakt worden door de installer, zodat de gebruiker zelf zo weinig mogelijk in Adito moet werken. In principe zijn alle gegevens om de aanvraag te maken al aanwezig in de code. Er moet dus nog een methode worden gevonden om deze gegevens geëncrypteerd en in het juiste formaat in een csr-bestand te schrijven. Hiervoor wordt weer gebruik gemaakt van de klassen die voorzien zijn in Bouncy Castle: PKCS10CertificationRequest req = null;

Om deze request te initialiseren wordt de volgende constructor gebruikt: PKCS10CertificationRequest(

java.lang.String signatureAlgorithm,

javax.security.auth.x500.X500Principal subject,

java.security.PublicKey key, ASN1Set attributes,

java.security.PrivateKey signingKey)

In deze installer worden geen extra attributen voorzien. Voor attributes zal dus null ingegeven worden. Zoals vermeld wordt de private sleutel niet opgenomen in de aanvraag, maar dient hij enkel om het csr-bestand digitaal te ondertekenen. Toegepast in de Java-code geeft dit dan: req = new PKCS10CertificationRequest(

"SHA256WithRSAEncryption",

cert.getSubjectX500Principal(),

key.getPublic(),

null,

key.getPrivate());

Deze aanvraag moet vervolgens onder het juiste formaat weggeschreven worden. Hiervoor wordt gebruik gemaakt van de klasse PEMWriter van Bouncy Castle, bijvoorbeeld: FileWriter out = FileWriter(request.csr);

PEMWriter pem = PEMWriter(out);

pem.writeObject(req);

pem.close();

out.close();

10.2 TOEVOEGEN ADMINISTRATORS

Het is de bedoeling de mogelijkheid te voorzien om aan Adito extra administrators toe te kennen. Deze kunnen eenvoudig in de database worden ingevoerd, bijvoorbeeld: INSERT INTO POLICY_PRINCIPAL_RELATIONSHIP VALUES(1,'sysadmin',0);

Page 45: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 46

Integratie van Adito in aXsGUARD Gatekeeper

De administrators (bv. sysadmin) moeten worden ingelezen van het config-bestand. Hierin zal zich dan een lijst met namen bevinden, zoals: <Administrators>

<name>Jos</name>

<name>Piet</name>

</Administrators>

Dit vereist wel een totaal andere aanpak bij het verwerken van het XML-bestand: het uitgangspunt is immers dat elke tag maar 1 keer bestaat, terwijl in dit geval meerdere namen voorkomen. In de eerste plaats wordt nu de methode copyByMap aangepast, zodat ook tags met dezelfde naam kunnen worden ingelezen. Dit zorgt ook voor een andere aanpak bij de dataklasse die deze namen zal bewaren. Vroeger had men voor elke element binnen een tag in het config-bestand een overeenkomstig gegevenselement in de dataklasse. Aangezien men niet op voorhand weet hoeveel administrators er zullen worden ingevoerd, is het moeilijk te bepalen hoeveel gegevenselementen er moeten worden voorzien. De gegevens moeten dus in een rij worden bewaard. Onderstaande tabel verduidelijkt de verschillen: Tabel 5: Verschil opbouw ExplorerProperties - Administrator

ExplorerProperties Administrator public String database;

public String smtp; public String keymode; public String maskAnswers; public String admin; public String externalHostnames; public String invalidHostname;

public String [] names;

public FieldMapper getParseMap() { FieldMapper mapping = new FieldMapper(); mapping.addMap( "database", "security.userDatabase" ); … mapping.addMap( "invalidHostname", "webServer.invalidHostnameAction" ); return mapping; }

public FieldMapper getParseMap() { FieldMapper mapping = new FieldMapper(); mapping.addMap("names","name"); return mapping; }

De aanpassingen in de methode copyByMap gebeuren als volgt:

Page 46: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 47

Integratie van Adito in aXsGUARD Gatekeeper

NodeList nl = elem.getElementsByTagName(source);

if (nl != null && nl.getLength() > 0) {

ArrayList<String> elements = new ArrayList<String>();

for(int i=0;i<nl.getLength();i++) {

Element el = (Element) nl.item(i);

if (el != null) {

Node node = el.getFirstChild();

if (node != null) {

elements.add(node.getNodeValue());

}

else {

elements.add("");

logger.warning(

source + " Empty tag in "

+ elem.getNodeName());

}

}

else {

logger.severe(source + " Empty element");

return false;

}

}

try {

Field fld = h.getClass().getDeclaredField(target);

if(elements.size()>1) {

String [] names = new String[elements.size()];

elements.toArray(names);

fld.set(h, names);

}

else {

value = elements.get(0);

if (fld.getType() == String.class) {

fld.set(h, value);

}

else if (fld.getType() == Encryptor.class) {

fld.set(h, new Encryptor(value));

}

}

In tegenstelling met de oude methode wordt elk element van de nodelist overlopen via de for-lus. Indien het om een unieke tag gaat, wordt de lus dus maar één keer doorlopen. De gegevens die worden gelezen uit het config-bestand, worden in eerste instantie bewaard in een ArrayList, zodat de methode compatibel wordt met meervoudige tags. Achteraf wordt gekeken hoeveel elementen in deze lijst zitten en wordt een gepaste actie uitgevoerd om deze data te bewaren in de overeenkomstige gegevenselementen. Een ander probleem doet zich voor bij het type gegevens dat moeten worden ingevoerd bij een SQL-opdracht: INSERT INTO POLICY_PRINCIPAL_RELATIONSHIP VALUES(1,'sysadmin',0);

INSERT INTO EXPLORER_PROPERTIES VALUES('security.userDatabase','','0','1','','unixAuth') In de table explorer_properties, heeft men één unieke waarde en één benaming voor security.userDatabase. Deze waarde kan gemakkelijk via een update aangepast worden. De tabel policy_principal_relationship bestaat evenwel uit een verzameling van administrators.

Page 47: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 48

Integratie van Adito in aXsGUARD Gatekeeper

Dit heeft voor gevolg dat een update voor deze toepassing niet nuttig kan worden gebruikt. Voor deze tabel moeten dus effectief nieuwe rijen worden toegevoegd. Elke rij dient uiteraard uniek te zijn, zodat eerst moet worden gecontroleerd of een administrator al aanwezig is in de databank. Dit kan snel gebeuren door bijvoorbeeld de volgende SQL-opdracht te laten uitvoeren: SELECT COUNT(*) FROM POLICY_PRINCIPAL_RELATIONSHIP WHERE PRINCIPAL_ID = ‘sysadmin’ Indien het resultaat hiervan 0 is, mag een nieuwe administrator worden toegevoegd.

Page 48: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 49

Integratie van Adito in aXsGUARD Gatekeeper

Conclusie

Het nieuwe installatieprogramma voor Adito zal bestaan uit 3 delen: een configuratiebestand dat de instellingen bevat die moeten worden ingevoerd, een aanpassing aan de tool die ervoor zorgt dat dit bestand wordt opgevuld en een installer die alles toepast in Adito. Deze aanpak vergemakkelijkt uitbreidingen of aanpassingen. In dit eindwerk werd een eerste versie van de installer gemaakt en het formaat van het config-bestand vastgelegd. Er werd beslist om het configuratiebestand, dat de instellingen voor Adito bevat, in XML-formaat te maken. Dit laat een zeer gestructureerde opbouw toe, zodat de gebruiker zijn gegevens snel en duidelijk kan invoeren. Dankzij het XML-schema kan hij daarnaast zijn invoer ook al een eerste keer controleren. Op deze manier komt hij te weten of alle velden die de installer nodig heeft zijn ingevuld. Een ander voordeel van dit formaat is dat het zich goed leent voor het inlezen en verwerken in Java. Hiervoor werd onder andere gebruik gemaakt van de DOM API, die toelaat om op een eenvoudige manier gegevens uit het configuratiebestand te filteren. Samen met de techniek van reflectie zorgt dit ervoor dat de gegevens zeer generiek kunnen worden ingelezen en dat de volledige installer op een bijzonder simpele en snelle wijze uitbreidbaar is. De installer zelf werd opgedeeld in 4 packages: input, data, output en een package met overige logica. In principe is het niet nodig dat de ingelezen gegevens eerst worden bewaard in een object van een klasse uit het data-package, om dan nadien toch direct naar een ander bestand weggeschreven te worden. De tussenliggende dataklassen zorgen er wel voor dat er een duidelijke scheiding kan worden gemaakt tussen het input- en outputdeel van de installer, wat uiteraard opnieuw een eenvoudige uitbreiding mogelijk maakt. Het installatieprogramma moet onder andere zorgen voor de aanmaak van een public-key-certificaat dat bewaard wordt in een keystore. Hiervoor werd gebruik gemaakt van de klassen die aanwezig zijn in de Bouncy Castle-bibliotheek. Aan de hand hiervan kunnen een self-signed certificaat en als extra een certificate signing request worden aangemaakt. Om te begrijpen welke methoden er uit de bibliotheek moeten worden gebruikt, is wat zoekwerk nodig, maar uiteindelijk levert dit wel het gewenste resultaat op. Naast een keystore moet de installer een HSQL-database voorzien. Daarbij wordt eveneens gebruik gemaakt van een specifieke bibliotheek. Hierin bevindt zich al een uitgewerkt voorbeeld, dat na een aantal aanpassingen en uitbreidingen geïmplementeerd werd bij het nieuwe installatieprogramma. Een aantal SQL-opdrachten wordt standaard uitgevoerd. Ze werden al op voorhand verzameld in een directory onder de vorm van SQL-bestanden die door de installer worden ingelezen en uitgevoerd. Het aantal uitgevoerde bestanden ligt niet op voorhand vast. De volledige code wordt bewaard in een executable JAR-bestand. Er werd voor gekozen om dit niet automatisch door Eclipse te laten genereren, maar het te laten opbouwen door Ant via een build-bestand. Dit zorgt ervoor dat de code niet afhankelijk is van Eclipse, maar later bijvoorbeeld gewoon met een editor kan worden aangepast en onafhankelijk opnieuw in een JAR-bestand kan worden verpakt. Het enige nadeel is dat de classloader van Java niet toelaat te verwijzen naar geneste JAR-bestanden. Hierdoor bestaat de installer niet compact uit 1 bestand, maar dit is voor deze toepassing geen noodzaak. Aangezien het integreren van Adito op aXsGUARD vrij experimenteel is, kan het zijn dat de installer of het configuratiebestand achteraf nog aangepast moet worden. Er moet ook een tool voorzien zijn die zorgt voor het aanmaken en opvullen van de configuratiegegevens.

Page 49: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 50

Integratie van Adito in aXsGUARD Gatekeeper

Deze tool werkt met een aantal gegevens die al beschikbaar zijn, maar moet daarnaast ook een interface voorzien die de overige keuzes van de gebruiker opvangt. Uiteindelijk komt het hier op neer dat de configuratie van Adito nu niet langer overgelaten wordt aan Adito zelf, maar aan de tool van aXsGUARD. Dit zorgt voor een optimale integratie.

Page 50: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 51

Integratie van Adito in aXsGUARD Gatekeeper

Literatuurlijst

Certificate Chaining. Geraadpleegd op 19 april 2010 via http://www.iona.com/support/docs/orbix2000/2.0/tls/html/OpenSSL4.html Demeester, P. (2009-2010). Communicatienetwerken. Cursus, Universiteit Gent, Faculteit ingenieurswetenschappen, vakgroep Informatietechnologie. (Figuur interfaces Adito). Geraadpleegd op 30 april 2010 via http://www.linklogger.com/images/DMZ1.jpg http://www.wikipedia.org. Verschillende definities geraadpleegd gedurende de volledige

masterproef. Introduction to XML and XML With Java. Geraadpleegd op 7 april 2010 via

http://www.totheriver.com/learn/xml/xmltutorial.html#6.1.1

iSeries Informatiecentrum. (Versie 5 release 6). Beveiligingsterminologie. Geraadpleegd op 7 april 2010 via http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/rzalx/rzalxsecterms.htm Nazmul. Introduction to DOM. Geraadpleegd op 5 mei 2010 via http://developerlife.com/tutorials/?p=30 Sun Microsystems, Inc. JavaTM 2 Platform, Standard Edition, v 1.4.2

API Specification. Geraadpleegd april 2010 via

http://java.sun.com/j2se/1.4.2/docs/api/overview-summary.html

The Apache Ant Project. Tutorial: Hello World with Ant. Geraadpleegd op 22 april 2010 via

http://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html

The hsql Development Group. Chapter 1. Running and Using Hsqldb. Geraadpleegd op 13

april 2010 via http://hsqldb.org/doc/guide/ch01.html

The hsql Development Group. Chapter 4. Advanced Topics. Geraadpleegd op 19 april 2010

via http://hsqldb.org/doc/guide/ch04.html The Legion of the Bouncy Castle. Documentation. Geraadpleegd op 26 april 2010 via http://www.bouncycastle.org/documentation.html The Legion of the Bouncy Castle. Specifications. Geraadpleegd op 26 april 2010 via http://www.bouncycastle.org/specifications.html The Legion of the Bouncy Castle. X.509 Public Key Certificate and Certification Request.

Geraadpleegd op 19 april 2010 via

http://www.bouncycastle.org/wiki/display/JA1/X.509+Public+Key+Certificate+and+Certifica

tion+Request+Generation What is Cygwin?. Geraadpleegd op 7 april 2010 via http://www.cygwin.com/

Page 51: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 52

Integratie van Adito in aXsGUARD Gatekeeper

Bijlage I Documentatie config-bestand

Hoofdtag Tag Beschrijving

WebServer Bevat alle gegevens in verband met de instelling van de webserver die zullen worden weggeschreven naar het bestand webserver.properties.

KeystorePassphrase Het paswoord dat gebruikt wordt om de keystore voor de webserver te encrypteren.

port De poort van Adito waarop zijn webserver beschikbaar zal zijn.

keyStoreType Het type keystore dat gebruikt wordt op de webserver (bijvoorbeeld een Java KeyStore).

protocol Het protocol dat gebruikt wordt voor de communicatie tussen de gebruiker en de Adito-service. Logisch is dit https.

disableCertificateWarning Geeft aan of er een waarschuwing wordt gegeven bij een niet-vertrouwd certificaat.

• true

• false

RedirectPort Poort waarop geluisterd wordt naar http-aanvragen.

certificatename De naam van het SSL-certificaat dat aangemaakt wordt.

bindAddress Het ip-adres van de interface die staat te luisteren om een connectie te maken.

proxies

Bevat alle gegevens in verband met de instelling van de proxyserver die worden weggeschreven naar het bestand webserver.properties.

host (waarde is optioneel) Hostname of ip-adres van de proxyserver.

password (waarde is optioneel) Indien authenticatie wordt gebruikt voor de proxyserver, moet het paswoord worden opgegeven.

port (waarde is optioneel) De poort waarop de proxyserver werkt.

nonHosts (waarde is optioneel) De hosts die niet via de proxyserver moeten gaan.

user (waarde is optioneel) Indien authenticatie wordt gebruikt voor de proxyserver, moet de user opgegeven worden.

certificate Bevat alle gegevens die nodig zijn voor het opmaken van het self-signed certificaat en de certificate

Page 52: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 53

Integratie van Adito in aXsGUARD Gatekeeper

Hoofdtag Tag Beschrijving

signing request.

password Moet hetzelfde zijn als KeystorePassphrase. In principe kan er een verschillend paswoord worden gebruikt om de sleutel te encrypteren en om de keystore te encrypteren, maar dit is niet voorzien in de huidige installer.

commonName

e-mail

country

state

localityName

organizationName

organizationUnitName

ExplorerProperties Bevat alle gegevens die extra moeten worden ingesteld in de tabel explorer_properties van de database explorer_configuration.

security.userDatabase Geeft aan welke databank Adito moet gebruiken voor zijn authenticatie.

• unixAuth (dit moet gekozen worden)

• builtIn

smtp.startOnStartup Duidt aan of het SMTP-berichtsysteem moet worden opgestart bij het aanzetten van Adito.

• true

• false (dit moet gekozen worden)

security.privateKeyMode Geeft aan hoe de passphrase voor de publieke sleutel van een gebruiker wordt bepaald. Deze sleutel dient om de attributen (bijvoorbeeld de security questions) van een gebruiker te encrypteren. Voor een digipass ligt het paswoord niet vast, hier wordt dus best disable gekozen).

• disable (dit moet gekozen worden)

• prompt

• automatic

security.maskPersonalAnswers Toont of het antwoord van de gebruiker op zijn persoonlijke vraag moet worden verborgen door sterren.

• false

• true

security.administrators De naam van de super user.

Page 53: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 54

Integratie van Adito in aXsGUARD Gatekeeper

Hoofdtag Tag Beschrijving

webServer.validExternalHostnames (waarde is optioneel)

Indien hier een waarde wordt opgegeven, moet de gebruiker een van deze hostnames selecteren om verbinding te maken met Adito. Indien hij een andere kiest, zal hij door zijn browser doorverwezen worden naar de eerste externe hostname uit de lijst.

webServer.invalidHostnameAction Actie die moet worden ondernomen indien een ongeldige hostname wordt opgegeven:

• none (allow connection)

• redirect (redirect to valid hostname)

• error (refuse all requests using invalid hostname)

• disconnect (close connection immediately)

locations Bevat de gegevens in verband met de directory- en bestandslocaties die gebruikt zullen worden.

AditoDir De hoofdmap van Adito.

conf (waarde is optioneel) De configuratiemap van Adito. Indien dit de map “conf” is binnen de hoofdmap, dan mag dit veld leeggelaten worden.

db (waarde is optioneel) De databasemap van Adito. Is dit de map “db” binnen de hoofdmap, dan mag dit veld leeggelaten worden.

SqlImportfilesDir De map waarin de SQL-bestanden zitten die zullen worden ingelezen en uitgevoerd door de installer.

CertificateSigningRequestDir (waarde is optioneel)

De directory waarin het certificate signing request zal worden bewaard. Bij een leeg veld is dit in de hoofddirectory.

CertificateSigningRequestName (waarde is optioneel)

De naam voor het certificate signing request. Indien dit veld leeg blijft, wordt de naam server-certificate gekozen.

Administrators (tag is optioneel)

Bevat de namen van de administrators.

name (tag en waarde zijn optioneel)

De naam van een administrator.

Components Toont welke componenten al dan niet moeten worden geïnstalleerd.

keystore (als tag leeg is dan wordt automatisch true gekozen)

Geeft aan of de keystore (al dan niet opnieuw) moet worden aangemaakt.

• true

• false

Page 54: Integratie van Adito in aXsGUARD Gatekeeper Christophe ...lib.ugent.be/fulltxt/RUG01/001/418/814/RUG01-001418814_2010_000… · Masterproef Toegepaste informatica 2009-2010 10 Integratie

Masterproef Toegepaste informatica 2009-2010 55

Integratie van Adito in aXsGUARD Gatekeeper

Bijlage II Voorbeeld config-bestand

<?xml version="1.0" encoding="UTF-8"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="config.xsd"> <WebServer> <KeystorePassphrase>aditopas</KeystorePassphrase> <port>443</port> <keyStoreType>JKS</keyStoreType> <protocol>https</protocol> <disableCertificateWarning>false</disableCertificateWarning> <RedirectPort>80</RedirectPort> <certificatename>private key</certificatename> <bindAddress>192.168.56.101</bindAddress> </WebServer> <proxies> <host></host> <password></password> <port>1080</port> <nonHosts></nonHosts> <user></user> </proxies> <certificate> <password>aditopas</password> <commonName>192.168.56.101</commonName> <e-mail>[email protected]</e-mail> <country>Belgium</country> <state>Vlaanderen</state> <localityName>Mechelen</localityName> <organizationName>TestOrganisatie</organizationName> <OrganizationUnitName>TestOrganisatieUnit</OrganizationUnitName> </certificate> <ExplorerProperties> <security.userDatabase>unixAuth</security.userDatabase> <smtp.startOnStartup>false</smtp.startOnStartup> <security.privateKeyMode>disable</security.privateKeyMode> <security.maskPersonalAnswers>false</security.maskPersonalAnswers> <security.administrators>suadmin</security.administrators> <webServer.validExternalHostnames></webServer.validExternalHostnames>

<webServer.invalidHostnameAction> none

</webServer.invalidHostnameAction> </ExplorerProperties> <locations> <AditoDir>/ub/java/adito</AditoDir> <conf>/ub/java/adito/conf/</conf> <db>/ub/java/adito/db/</db> <SqlImportfilesDir>SQLA</SqlImportfilesDir> <CertificateSigningRequestDir></CertificateSigningRequestDir> <CertificateSigningRequestName></CertificateSigningRequestName> </locations> <Administrators><name>sysadmin</name></Administrators> <Components><keystore>true</keystore></Components> </config>