Koppeling van het elektronisch zorgplan van LISTEL aan eHealth L. Drijkoningen a, b, M. Rymen b a Departement IWT, Katholieke Hogeschool Limburg, 3590 Diepenbeek, Belgium b Faculteit Industrieel Ingenieur, Katholieke Hogeschool Limburg, Xios Hogeschool Limburg, KU Leuven, Universiteit Hasselt, 3590 Diepenbeek, Belgium
Abstract Tijdens deze bachelorproef is het huidig authenticatieschema van het e-zorgplan van LISTEL aangepast zodat er via de elektronische identiteitskaart ingelogd kan worden. Hiervoor wordt de connectie gelegd met eHealth, de overheidsinstantie die instaat voor de bevordering van de elektronische dienstverlening in de gezondheidszorg. Om deze connectie op te zetten wordt Shibboleth gebruikt, een service die ontworpen is voor Single-Sign on toepassingen. In dit geval werkt deze service aan de hand van een Service provider bij LISTEL en een Identity provider bij eHealth.
gebruikers, die geen gebruik kunnen maken van een Belgische eID. 1.
Introductie
Vanuit de vzw LISTEL kwam de vraag om in hun e-zorgplan een integratie te voorzien met het eHealth-platform. Hierdoor kan er in de achterliggende applicatie worden gecontroleerd of een gebruiker gekend is binnen eHealth en wat zijn precieze rol is (dokter, kinesist, …). Voor de gebruiker zelf betekent dit, dat hij of zij kan aanmelden met behulp van een elektronische identiteitskaart (eID). Zodoende hoeft de gebruiker geen gebruikersnaam en paswoord meer moet onthouden. Voor LISTEL zelf betekent dit een verhoogde veiligheid bij het gebruik van het platform. De moeilijkheid in dit project is in de eerste plaats het leggen van de connectie tussen het LISTEL-platform en het eHealth-platform. Hiervoor moet de authorisatiemethode van het LISTELplatform worden aangepast. Moeilijkheid hierbij is dat de gebruikers niet met hun rijksregisternummer in de database staan. Ook zijn er buitenlandse
2.
LISTEL
2.1. Wat is LISTEL [1] LISTEL vzw is het Limburgs provinciaal overlegplatform. Het Samenwerkingsinitiatief Eerste Lijnsgezondheidzorg (SEL), de Geïntegreerde Dienst voor Thuisverzorging (GDT) zorgregio Genk en zorgregio Hasselt hebben opdrachten die vervuld moeten worden. Zij kunnen voor de realisatie van een aantal opdrachten rekenen op de ondersteuning van de Plaatselijke Overlegplatforms (POP). SEL/GDT Genk en Hasselt waken over de kwaliteit van het overleg rond de patiënt waarbij de patiënt en zijn mantelzorger (mz) samen met de betrokken zorg- en hulpverleners (zvl en hvl) de zorgen op elkaar afstemmen.
2.2. Situatieschets 4. Momenteel heeft LISTEL een website waarop aangemeld moet worden met gebruikersnaam en wachtwoord. Om een gebruikersnaam te bemachtigen moet er een aanvraag worden ingediend bij LISTEL.
3.
eHealth [2]
3.1. Inleiding eHealth is een overheidsinstantie met als doelen om de onderlinge elektronische dienstverlening en informatie-uitwisseling bevorderen en de informatieveiligheid waarborgen. Elke Belg is geregistreerd bij eHealth. Dit wil zeggen dat ook elke Belg kan inloggen. De manier waarop dit gebeurd is door middel van het Belgische eID Deze manier van inloggen staat ook ter beschikking van partners doormiddel van een Shibboleth verbinding. Het proces is heel eenvoudig. De gebruiker gaat naar de pagina om in te loggen, steekt zijn eID in een kaartlezer die met een pc verbonden is en geeft zijn pincode in. Wat hier achter de schermen gebeurt, is een aanvraag van de gebruiker naar de Service Provider. Deze gaat op zijn beurt een authenticatie-aanvraag sturen naar de Identity Provider en krijgt een antwoord terug. Aan de hand van dit antwoord kan de Service Provider beslissen of de gebruiker al dan niet wordt ingelogd. 3.2. Voordeel voor LISTEL Het hele inloggebeuren vindt plaats achter de schermen en zo heeft de gebruiker er geen last van. Ook is het mogelijk om te verifiëren welke functie een gebruiker heeft want op eHealth worden alle dokters, apothekers en burgers bijgehouden. Dit spaart niet alleen een hoop werk uit voor de LISTEL medewerkers, maar zorgt ook voor een verbeterde veiligheid van het platform. Om deze twee redenen is het de ideale manier om een login te maken voor LISTEL.
Shibboleth
4.1. Opzet [3][4] Shibboleth is een open-source project en onderdeel van het Shibboleth Consortium [3]. De hoofddoelen van Shibboleth zijn: - Authenticatie binnen federaties. Federaties zijn verenigingen of organisaties met eenzelfde doel (bv. volksgezondheid); - Toegangscontrole op basis van attributen. Deze attributen kunnen gegevens van de gebruiker bevatten (bv. Naam, voornaam, …); - Privacy management; - Een framework voor meerdere federaties; - Een gestandaardiseerde woordenschat voor attribuutwaarden. Het Shibboleth-gebeuren bestaat uit 2 hoofdonderdelen, namelijk: De Service Provider (SP) en de Identity Provider (IDP). 4.2. Service Provider De Service Provider (SP) is het onderdeel dat bij de partners staat. Wanneer een gebruiker wenst gebruik te maken van Shibboleth dient er een aanvraag verzonden te worden naar de Service Provider. Van hieruit kan de aanvraag verstuurd worden richting de federatie en dus naar de IDP. Deze aanvraag kan volgens verschillende profielen gebeuren zoals: SAML1.1 en SAML2.0. Wanneer de gebruiker toegang probeert te verkrijgen tot een beschermd deel zal er dus een aanvraag worden verzonden naar de SP. Als er geen sessie bestaat wordt het SSO-proces (Single-Sign On) gestart. Nu wordt er een authenticatieaanvraag, samen met de gebruiker, doorgestuurd naar de IDP. Als de gebruiker terug komt met de respons van de IDP zal de respons gevalideerd worden en er zal een sessie aangemaakt worden. Samen met deze sessie worden er ook een reeks attributen meegegeven, die daarna eventueel kunnen gebruikt worden voor lokale login. Een voorbeeld hiervan is een rijksregisternummer. Dat kan als attribuut worden meegegeven. Op basis hiervan kan dan een lokale authenticatie gebeuren. Meer over attributen is te vinden in hoofdstuk 6.3.
4.3. Identity Provider De Identity Provider (IDP) wordt voorzien door de federatie. Deze gaat de aanvraag vanuit de SP ontvangen en de gebruiker authentiseren. De IDP staat direct in verbinding met de database van eHealth en kan dus verifiëren of de gebruiker mag inloggen. Wanneer de gebruiker geauthentiseerd is wordt de aanvraag samen met de gebruiker terug gezonden naar de SP. 4.4. SAML [5][6] SAML staat voor Security Assertion Markup Language en is een, op XML gebaseerd, standaard dataformaat voor uitwisseling van authenticatie en autorisatie tussen domeinen. Eenvoudig gezien is SAML een template om te definiëren hoe data verzonden wordt in bepaalde toepassingen. Er zijn twee standaarden die het meest gebruikt worden voor de gegevensoverdracht, namelijk SAML1.1 en SAML2. De voornaamste toepassing van SAML is het vergemakkelijken van Single-Sign-On procedures zoals Shibboleth. Er zijn 3 hoofdonderdelen in het SAML gebeuren, namelijk: de gebruiker, de Service Provider en de Identity Provider. De gebruiker kan een service aanvragen aan de Service Provider, deze kan dan aan de Identity Provider een “identity assertion” aanvragen en op basis hiervan de service aan de gebruiker toekennen of niet. 4.4.1. SAML1.0 Dit is de eerste SAML versie die werd aangenomen als standaard door de OASIS (Organization for the Advancement of Structured Information Standards) in 2002. Deze standaard vloeide voort uit de opdracht om een XML framework te definiëren voor de uitwisseling van authenticatie en autorisatie informatie. 4.4.2. SAML1.1 [7] SAML1.1 is een kleine vernieuwing op SAML1.0 die aangenomen werd in 2003. De verandering ten opzichte van SAML1.0 zijn echter niet zo groot en bestaan voornamelijk uit kleine aanpassingen die zorgen voor een efficiëntere werking.
4.4.3. SAML2.0 [8] SAML2.0 is de opvolger van SAML1.1 maar desondanks zijn ze niet onderling compatibel. Enkele grote verschillen tussen SAML1.1 en SAML2.0 zijn: • Ondersteuning voor W3C XML encryptie; • Vereenvoudigde terminologie; • Nieuwe SAML protocollen. (Single Logout) 4.5. Toegangscontrole op basis van attributen Wanneer er aan authenticatie en/of autorisatie wordt gedaan via Shibboleth wordt er ook een lijst met attributen terug gegeven naar de service provider. Deze attributen kunnen dan worden uitgefilterd en opgevangen door de server waarop de website draait om zo, bijvoorbeeld doormiddel van PHP, gebruikt te worden om de gebruiker lokale rechten toe te kennen.
5.
Installatie
Een eerste zaak waar rekening mee gehouden moet worden, is dat je Shibboleth niet kan installeren op een standaard web hosting pakket. Er is een Virtual Private Server (VPS), een ‘dedicated server’, of een eigen onderhouden server voor nodig zodat de nodige programma’s geïnstalleerd kunnen worden. Verder dient de verbinding tussen de eigen server en de externe server beveiligd te gebeuren. Daarvoor is nood aan een SSL-certificaat, hetgene zelf kan worden gemaakt, of kan worden aangekocht bij een externe firma. 5.1. Serverinstallatie [9] Deze serverconfiguratie is uitgewerkt voor het besturingssysteem Ubuntu Server 12.04 LTS. Dit besturingssysteem kan gratis worden gedownload op de website van Ubuntu.1 5.1.1. Ubuntu installatie Het installeren van Ubuntu op zich is vrij gemakkelijk en verloopt volgens de stappen die men kan vinden op de website van Ubuntu2.
1 2
http://www.ubuntu.com/download/server http://www.ubuntu.com/download/help/install
Na de installatie van het Ubuntu-systeem kan de server best een volledige upgrade/update worden gegeven. Dit kan door aan te melden op de server met de gekozen gebruikersnaam en wachtwoord en daarna in de commandoterminal de volgende commando’s uit te voeren: sudo apt-get update && sudo apt-get dist-upgrade Deze commando’s zullen naar een paswoord vragen, dat onzichtbaar is bij het intypen. Na het uitvoeren van de updates dient het systeem opnieuw opgestart te worden. Dit kan met behulp van het commando: sudo reboot Laat hierna het systeem de volledige reboot doorlopen, de server is nu up-to-date. 5.1.2. Installatie Apache2, MySQL & PHP Het volgende wat dient te gebeuren is de installatie van de Apache2-server, een MySQLmodule en de installatie van de PHP-module. Dit wordt gedaan met behulp van de volgende commando’s: sudo apt-get install apache2 php5-mysql libapache2mod-php5 mysql-server Tijdens de installatie van de MySQL-server zal om een root-paswoord worden gevraagd. Dit kan worden ingesteld naar keuze. Om deze MySQL-installatie te beheren kan gebruik worden gemaakt van PHPMyAdmin. Dit programma kan worden geïnstalleerd met behulp van volgend commando: sudo apt-get install phpmyadmin 5.1.3. Firewall Vervolgens dient er ook een firewall geconfigureerd te worden om de server te beschermen tegen aanvallen van buitenaf. Hiervoor wordt ‘Uncomplicated Firewall’ gebruikt. [10] Standaard staat deze uitgeschakeld, inschakelen wordt gedaan met behulp van het commando:
De firewall staat nu actief. Het volgende wat dient te gebeuren is het openen van poorten die wel gebruikt mogen worden van buitenaf. Dit kan met het volgende commando (hier gebruikt voor de SSH-poort): sudo ufw allow 22 De poorten die dienen worden opengezet zijn: 20 (FTP), 22 (SSH), 80 (HTTP) & 443 (HTTPS). 5.1.4. SSH SSH wordt geconfigureerd zodat de server van op afstand kan worden beheerd. Hiervoor wordt ‘openSSH Server’ gebruikt. Deze kan worden geïnstalleerd met behulp van het volgende commando: sudo apt-get install openssh-server De server kan nu van op afstand worden beheerd met behulp van SSH. Op een Windowssysteem heb je hiervoor het programma Putty3 nodig, op Macintosh OS X en Linux is deze mogelijkheid standaard aanwezig in de terminal. 5.1.5. HTTPS [11] De HTTPS-service, die dient om de communicatie met de server te versleutelen, wordt toegevoegd aan de Apache-server door de module ‘mod_ssl’ te activeren. Dit kan worden gedaan met behulp van het volgende commando: sudo a2enmod ssl Om een https-connectie te kunnen opzetten is ook een certificaat en een sleutel nodig. De installatiemethode hiervoor is te vinden in hoofdstuk 4.1.6. Om de Apache2 te configureren voor SSL dient het volgende commando te worden uitgevoerd: sudo a2ensite default-ssl
sudo ufw enable
3
http://www.chiark.greenend.org.uk/~sgtatham/putty/ download.html
De standard locaties voor de certificaten en de sleutels zijn respectievelijk: /etc/ssl/certs & /etc/ssl/private Deze certificaten en sleutels kunnen ook in een andere map worden geplaatst. Dit kan door de files ‘SSLCertificateFile’ & ‘SSLCertificateKeyFile’ van de Apache2-server juist aan te passen. Nu Apache2 juist is geconfigureerd voor HTTPS moet Apache2 opnieuw worden gestart om de nieuwe instellingen toe te passen. Dit kan met het commando: sudo /etc/init.d/apache2 restart 5.1.6. SSL-certificaat [12] Een SSL-certificaat zorgt voor de authenticatie van de server en berust op het principe van asymmetrische cryptografie. Dit principe houdt in dat er wordt gebruikgemaakt van 2 aparte sleutels: een ‘public-key’ om de informatie te coderen, en een ‘private-key’ om de informatie te decoderen. Een certificaat is een methode om een ‘publickey’ en andere informatie over een server en de organisatie achter de server te delen. Twee soorten certificaten zijn mogelijk: een zelf geschreven certificaat en een certificaat ondertekend door een Certification Authority (CA). Een dergelijke CA is een betrouwbare, externe firma die confirmeert dat de informatie in het certificaat accuraat is. Voor deze Bachelorproef is er een zelfondertekend certificaat gebruikt. Het probleem hiermee is dat dit in de meeste gevallen niet wordt herkend door browsers als zijnde betrouwbaar. Daarom wordt in productie-omgevingen best gekozen voor een CA-ondertekend certificaat. Een zelf-ondertekend certificaat kan worden gemaakt door volgend commando uit te voeren: openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt Na het ingeven van het wachtwoord zal het certificaat worden gemaakt en opgeslagen in de file ‘server.crt’.
Het installeren van een zelf-ondertekend of een certificaat door een CA afgeleverd kan met het uitvoeren van volgend commando: sudo cp server.crt /etc/ssl/certs sudo cp server.key /etc/ssl/private Voor de installatie van een CA-certificaat is een goede handleiding beschikbaar op de website van Ubuntu [12]. 5.2. Installatie LISTEL-platform Om het LISTEL-platform over te plaatsen naar de nieuwe VPS zijn de volgende zaken nodig: - Een back-up van de huidige webpagina’s die kan worden teruggeplaatst. - Een back-up van de huidige database. Om te starten, moet de back-up van de webpagina’s teruggeplaatst worden. Dit moet gebeuren op de VPS in de map /var/www. Deze map wordt door Apache als default-map voor de websitebestanden aanzien. Daarna moet de back-up van de database worden teruggeplaatst. Hiervoor dient men naar PHPMyAdmin te gaan, alwaar een nieuwe database moet worden aangemaakt. In deze database kan dan de back-up van het origineel worden teruggeplaatst. Als laatste dient dan nog de nieuwe connectie tussen de webpagina’s en de database worden ingesteld. Dit kan in de file ‘dbgegevens2.inc.php’ die zich in de map ‘includes’ bevindt. 5.3. Installatie van Shibboleth [13] Voor de installatie van Shibboleth is een goede handleiding ter beschikking van SWITCH4. 5.3.1. SWITCH Repository SWITCH host een aangepaste versie van de Shibboleth SP voor Ubuntu 12.04LTS. Om deze repository toe te voegen aan de sources waarmee je ‘Sudo Apt-get’ kan doen, dien je volgende commando’s uit te voeren: 1. Downloaden van Repository Key: 4
SWITCH beheert de .ch en .li top-level domeinen voor Zwitserland en Liechtenstein. SWITCH beheert ook de netwerken tussen universiteiten en researchinstellingen in Zwitserland en de connecties naar buitenlandse universiteitsnetwerken.
sudo curl -k -O http://pkg.switch.ch/switchaai/SWITCHaaiswdistrib.asc 2.
Controle van de Repository Key
sudo apache2ctl configtest De output moet dan zijn: Syntax OK
gpg --with-fingerprint SWITCHaai-swdistrib.asc
Als laatste dient de webserver opnieuw worden opgestart waarna de controle op de Shibbolethmodule kan worden gecontroleerd op het adres https://jouw.hostnaam.be/Shibboleth.sso/Session . Er zou dan een returnpage moeten komen met als inhoud:
Deze moet overeenkomen met: 294E 37D1 5415 6E00 FB96 D7AA 26C3 C469 15B7 6742 3.
Repository Key aan Ubuntu toevoegen:
sudo apt-key add SWITCHaai-swdistrib.asc 4.
5.
Repositry toevoegen: Maak het bestand ‘/etc/apt/sources.list.d/SWITCHaaiswdistrib.list’ aan en voeg op de eerste regel: ‘deb http://pkg.switch.ch/switchaai/ubuntu precise main’ toe. Doe een update van de repository:
sudo apt-get update 5.3.2. Installatie en controle van Shibboleth SP Na het toevoegen van de repository key kan de Shibboleth SP makkelijk worden geïnstalleerd door het uitvoeren van het commando: sudo apt-get install shibboleth Het resultaat hiervan is dat er een aantal mappen worden aangemaakt: - /etc/shibboleth De configuratiemap van Shibboleth - /var/log/shibboleth De map waarin logs worden weggeschreven - /etc/init.d De map waarin de startscripts zich bevinden. De configuratie van Shibboleth op de server kan worden gecontroleerd met volgend commando: sudo shibd -t De laatste lijn van de output moet dan zijn: overall configuration is loadable, check console for non-fatal problems Daarna kan ook best de Apache2-configuratie worden gecontroleerd met het commando:
A valid session was not found. Dit bericht toont aan dat de Shibboleth-module is geladen en kan communiceren met het shibdproces. 6.
Configuratie Shibboleth – eHealth
6.1. Registratie bij eHealth [14] Om de applicatie bij eHealth te registreren moet de file “eHealth I.am – Registration.doc”, te vinden in de bijlagen, worden ingevuld en teruggezonden naar eHealth. Enkel de hoofdstukken ‘2. Service Provider’ en ‘3.1 IDP’ zijn belangrijk ter registratie van de applicatie. Onder ‘2. Service provider’ moeten de volgende gegevens worden ingevuld: Organisatie Name: naam van de applicatie Homepage: Homepage van de applicatie ContactPerson Name: naam van contactpersoon Email: email van contactpersoon Sp Authentication EntityID: moet een unieke naam hebben, die zo kan worden geregistreerd bij eHealth om zich kenbaar te maken. X.509 Certificate: dient om berichten naar de IDP te versleutelen. Als je niet meerdere IDP’s gebruikt, kan je dit veld leeg laten.
Onder ‘3.1 IDP’ moet je de gegevens invullen om de relatie tussen de lokale service provider en de externe identity provider op een veilige manier te doen verlopen. ‘3.1.1 SP configuration’: hierin moet worden aangegeven welk profiel de service provider gebruikt ter uitwisseling van authenticatieen autorisatiegegevens tussen de service provider en de identity provider. In het geval van de Shibbolethinstallatie, in deze paper beschreven, dient te worden gekozen voor SAML 2.0-POST, omdat de hele Shibboleth-configuratie op dit profiel is gebaseerd. ‘3.1.2.1 Service 1’: hierin dienen nog een aantal parameters worden ingevuld ter registratie van de LISTEL-service bij eHealth. Identification URN: unieke identificatie voor de applicatie, voor in het centraal user-management van eHealth. AssertionConsumerServiceLocation: URL waar de service provider het antwoord van de IDP verwacht. In deze installatie van de vorm: http://homepage.dom/Shibboleth.sso/SAML/POST Authentication Wizard: uitzicht bepalen van de login-module. Login Look & Feel: keuze tussen het eHealth-uitzicht of een embedded type.
6.2. Configuratie Shibboleth [15] 6.2.1. Apache-configuratie Eerst en vooral moet de Apacheserver kennis hebben van de aanwezigheid van de Shibbolethinstallatie. Ook dient geweten te zijn dat Shibboleth als authenticatiemethode voor de applicatie moet worden gebruikt. Dit kan door het bestand /etc/apache2/mods-available/shib2.conf aan te maken en daar volgende code in te plaatsen:
AuthType shibboleth ShibRequestSetting requireSession on ShibUseHeaders On require shibboleth ‘ShibUseHeaders On’ zorgt ervoor dat de nodige attributen beschikbaar worden gesteld als http-header, waardoor ze voor authenticatie kunnen gebruikt worden. Van zodra dit in orde is dient de Apacheserver te worden herstart door middel van het commando: /etc/init.d/apache2 restart
ServiceName (NL): nederlandstalige servicenaam
Daarna dient ook de Shibboleth-service te worden herstart, dit kan door middel van het commando:
Languages: Talen voor de loginmodule
/etc/init.d/shibd restart
AuthenticationLevel: Keuze van loginmogelijkheden. Dit kan met de eID, de Fedict Token of een paswoord.
6.3. Attributen
Skip choice authenticationMethod: als er slechts kan worden ingelogd met behulp van de eID, kan de keuze voor een authenticatiemethode worden overgeslagen. Profile Options: welke personen kunnen zich aanmelden met behulp van de eHealth-IDP. Skip choice profile: als alleen burger kan worden gekozen kan je de profielkeuze overslaan. Attribute resolution Certified Attribute URIs: hoeft niet te worden ingevuld.
Als eerste moet daarvoor ‘\etc\shibboleth\attribute-map.xml’ worden aangepast. De identiteitsinformatie van de gebruiker zal namelijk worden ingepakt in SAML-attributen. Standaard zal een Shibboleth-SP al deze attributen wegfilteren. Zo moet geen ongewenste/onnodige informatie worden verwerkt. Daarom moeten de attributen die nodig zijn worden gespecifieerd in deze configuratiefile. Een volledig overzicht van alle beschikbare attributen is te vinden in [9].
Een voorbeeld van een dergelijke attributenlijst:
Deze attributenlijst zorgt ervoor dat het rijksregisternummer en de achternaam van een persoon beschikbaar worden voor de applicatie. Dit kan gemakkelijk worden aangevuld met andere attributen uit [16]. Het id van een dergelijk attribuut is vrij te kiezen. De SP zal deze gebruiken als namen voor de http-headers. De naam van een attribuut wordt ontvangen door de SP vanuit de IDP. Wanneer er geen match is tussen de namen van de attributen, worden ze niet weergegeven. Nameformat is afhankelijk van het SAMLprofiel dat wordt gebruikt in de Shibbolethinstallatie. Als volgende moet de file ‘\etc\shibboleth\attribute-policy.xml’ worden aangepast. Dit is een file die ervoor zorgt dat waarden uit attributen, die de SP ontvangt van de IDP, worden gefilterd. Dit mag niet worden verwisseld met het filteren van de attributen zelf. De standaard-file van de installatie mag worden leeggemaakt en worden vervangen door de regels die nodig zijn voor het eHealth-platform:
Deze policy-instelling zorgt ervoor dat geen enkele waarde wordt gefilterd uit de ontvangen attributen. Dit door de instelling ‘ANY’ bij xsi:types en de wildcard bij de attributeID. 6.4. Shibboleth2.xml Als laatste moet ook nog de hoofdconfiguratie file ‘\etc\shibboleth\shibboleth2.xml’ worden aangepast. Deze file zorgt samen met de Apacheconfiguratie voor een protectie van de web applicatie. De file begint met een opening van <SpConfig> Hier moet meteen in worden meegegeven welk SAML-profiel wenst gebruikt te worden voor de communicatie tussen de service provider en de identity provider. Daarna wordt de sectie <ApplicationDefaults> geopend. Hierin wordt de configuratie met betrekking tot protocol-gedrag, sessie-policy, foutbehandeling en attribuutbehandeling gedefinieerd. Alle aanvragen naar een server met Shibboleth worden behandeld met de instellingen die in deze <ApplicationDefaults> gebeuren. De meeste standaardinstellingen van deze sectie zijn bruikbaar onder de meeste omstandigheden. Naargelang de identity provider waarmee men wil werken, zijn er vaak specifiekere aanpassingen nodig. De volgende sectie in de file is de <Sessions>sectie. Hierin wordt de sessie-behandeling van de applicatie gedefinieerd en kan ook worden meegegeven hoe lang een sessie mag duren en wanneer een time-out optreedt. Hier moet ook de entity-ID van de IDP worden
opgegeven zodat de service Provider weet waar hij de identity provider kan vinden. De configuratie van het gewenste SAML-profiel wordt ook meegegeven in de opening van de sectie. Na de <Sessions>-sectie zijn er binnen de <ApplicationDefaults>-sectie nog een aantal belangrijke te configureren secties. Een eerste sectie daarbij is de <Errors>-sectie. Deze geeft aan wat er moet gebeuren wanneer er een fout optreedt bij het gebruik van de Service Provider. Daarnaast is er de <MetadataProvider>. Daarin wordt de metadata-locatie twee keer geconfigureerd. Eén keer online, dit wordt gedaan om gemakkelijk updates in de metadatafile te ontvangen. Eén keer is er een lokale locatie, dit is een backup-optie, voor wanneer de online-service niet blijkt te werken. Het reloadinterval duidt aan om de hoeveel tijd de online metadata moet worden vernieuwd. Daarnaast kan ook nog de
worden gevonden. Die regelt hoe de SAMLresponses moeten worden uitgepakt. De regelt de toegang tot andere databronnen om extra identiteitsinformatie, die niet door de IDP wordt meegegeven, op te halen. Ook kan de worden teruggevonden. Deze regelt welke regels moeten worden toegepast voor de filtering van attribuutinformatie. Als laatste onderdeel van <ApplicationDefaults> kan nog de sectie worden gevonden. Deze configureert de publieke sleutel en het certificaat dat de SP gebruikt om zichzelf kenbaar te maken bij de IDP’s. Deze sleutel en certificaat houden echter geen verband met de SSL/TLS support van web servers. Dit paar zorgt ervoor dat de verzender van de berichten kan worden gecontroleerd, alsook voor een verificatie van de data-integriteit. Na de <ApplicationDefaults> staan er nog twee secties in de <SPConfig>. Een eerste sectie is de sectie <SecurityPolicyProvider>. Deze file geeft aan welke beveiligingsregels moeten worden in acht genomen bij de informatie-uitwisseling tussen de eHealth-IDP en de LISTEL-SP. Een tweede sectie is de . Deze geeft de plug-in weer die moet worden gebruikt om de content van het <Sessions>-gedeelte uit te kunnen lezen en om te zetten. De basis-configuratie voor Shibboleth die werd gebruikt voor deze bachelorproef is de volgende:
<SPConfig xmlns="urn:mace:shibboleth:2.0:native:sp:config" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata " clockSkew="1800">
<ApplicationDefaults entityID="https://bp.martijnrymen.be/shibboleth" REMOTE_USER="urn:be:fgov:person:ssin urn:be:fgov:person:professinoal:type-code urn:be:fgov:person:firstName"
<Sessions lifetime="28800" timeout="3600" checkAddress="false" relayState="ss:mem" handlerSSL="false"> <SSO entityID="http://idp.smalsmvm.be/shibboleth">SAML2 Local <Errors supportContact="[email protected]" logoLocation="/shibboleth-sp/logo.jpg" styleSheet="/shibboleth-sp/main.css"/>
De belangrijkste aanpassing die hierin dient te gebeuren voor de uiteindelijke integratie van de LISTEL-applicatie, is het aanpassen van de entityID. Deze zorgt namelijk dat de service provider bij de eHealth-IDP kan worden herkend.
7.
Herwerking LISTEL-loginprocedure
<MetadataProvider type="XML" uri="https://wwwint.ehealth.fgov.be/R2/idp/profile/ Metadata/SAML " backingFilePath="bpelo-listelcitizen.xml" reloadInterval="180000"/> <SecurityPolicyProvider type="XML" validate="true" path="security-policy.xml"/>
Figure 1 Flowchart login-procedure Wanneer een gebruiker de pagina van LISTEL laadt, zal er gekeken worden of er een Shibbolethsessie aanwezig is. Als dit niet het geval is, betekent dit dat de gebruiker de pagina voor de eerste keer laadt en dus nog moet inloggen. De gebruiker kan nu kiezen tussen het inloggen met zijn/haar eID of inloggen met zijn/haar gebruikersnaam en paswoord. Als er gekozen wordt voor de methode met het eID dan zal Shibboleth inwerking treden en zal de loginprocedure via eHealth met eID gestart worden. Als deze procedure succesvol is, dan wordt de gebruiker teruggezonden naar de beginpagina van LISTEL. Op dit moment bestaat er wel een Shibboleth sessie, dus er zal een andere weg gevolgd worden. Eerst wordt gekeken of het SSID (rijksregisternummer) gekend is in de database van LISTEL. Als dit het geval is betekent dat, dat de gebruiker gekend is bij LISTEL en dat er dus een sessie mag worden aangemaakt, de gebruiker wordt ingelogd en kan gebruik maken van het LISTEL platform. Wanneer de SSID niet gekend is zal er gevraagd worden om de gebruikersnaam en het paswoord van de gebruiker. Als de gebruiker gekend is bij LISTEL en zijn gegevens correct ingeeft, zal het SSID aan zijn gegevens worden toegevoegd. De volgende keer kan hij/zij dus onmiddellijk ingelogd worden zonder eerst zijn/haar gebruikersnaam en paswoord in te geven.
Als de gebruiker echter niet gekend is bij LISTEL en bijgevolg dus ook geen gebruikersnaam heeft, zal de gebruiker worden doorverwezen naar de registratiepagina.
$records= mysql_fetch_array($result); $result = mysql_query(" UPDATE $tabel SET logindatum='$HuidigUur', ipadres='".$_SERVER['REMOTE_ADDR']."' WHERE ssid ='".$ssid."'") or die ("Coundn't execute query.");
7.1. Praktische uitbouw loginprocedure In de PHP-pagina’s moet eerst en vooral een herwerking gebeuren van het moment waarop de SQL-query voor de login mag worden uitgevoerd. Daar er nu wordt gereageerd wordt op de POST-actie van het login-formulier, moet er nu bij het laden van de pagina nagaan of er een Shibboleth sessie bestaat. Dit gaat een if-statement zijn dat gaat controleren of er een Shibboleth-sessie-id aanwezig is in de globale $_SERVER variabele. Als hieraan is voldaan, wordt gecontroleerd of een gebruiker in de database aanwezig is met een SQL-query. Dit alles is mogelijk door de bestaande query te nemen en hierin login en paswoord te vervangen door SSID.
return true; } else { return false; } } if (probeerDezeSSID("logins", $ssid)) { $ingelogd = true; … }
if(isset($_SESSION["HTTP_SHIB_SESSION_ID"])) {
else if (probeerDezeSSID("hulpverleners", $ssid))
$ssid = $_SESSION["HTTP_SHIB_PERSON_ID"];
{ $ingelogd = true;
function probeerDezeSSID($tabel, $ssid) { …
… }
} $query = " SELECT ssid, login, paswoord, logindatum, id, $extraKolommen, voornaam, naam, email FROM $tabel WHERE actief = 1 AND ssid ='".$ssid."' $where"; $result = mysql_query($query) or die(mysql_error()); if (mysql_num_rows($result)<>0 ) {
De records die uit de database worden gehaald kunnen dan worden gebruikt om te controleren of een persoon gekend is binnen LISTEL en om wie het gaat. Deze controle gebeurt ook aan de hand van een if-statement. Wanneer er echter geen sessie is, en de if dus niet wordt uitgevoerd, zal er gewacht worden op de POST van het login-formulier zoals in de huidige versie. De aanpassing die hier moet gebeuren is het ‘updaten’ van de SSID in de records van de gebruiker.
if(isset($_SESSION["HTTP_SHIB_SESSION_ID"]){ $result = mysql_query(" UPDATE $tabel SET logindatum='$HuidigUur', ipadres='".$_SERVER['REMOTE_ADDR']."', ssid='".$_SESSION["HTTP_SHIB_PERSON_ID"]."' WHERE login='".addslashes(htmlspecialchars($_POST['logi n']))."' AND paswoord ='".$paswoord."'") or die ("Coundn't execute query."); } else{ $result = mysql_query(" UPDATE $tabel SET logindatum='$HuidigUur', ipadres='".$_SERVER['REMOTE_ADDR']."' WHERE login='".addslashes(htmlspecialchars($_POST['logi n']))."' AND paswoord ='".$paswoord."'") or die ("Coundn't execute query."); }
8.
Conclusie
Mits er gebruik kan worden gemaakt van up-todate handleidingen van de kant van eHealth en de contactgegevens van de verantwoordelijke duidelijk gekend/aangegeven zijn, is het mogelijk om deze integratie op een snelle en vlotte manier af te handelen. Echter in deze proef was dat niet het geval. Nadat de VPS in orde was, verliep de configuratie ervan en de installatie van Shibboleth vrij vlot. Echter, de configuratie voor de link met het eHealthplatform verliep een pak stroever. Dit had niet alleen te maken met het feit dat eerst verouderde handleidingen beschikbaar waren en er een lange tijd verstreek voordat de juiste contactpersoon gekend was. Ook het feit dat eHealth net in een overgangsfase zat door een upgrade van hun IDP, speelde parten. Deze roll-out was nog niet gebeurd en dat was ook de reden waarom de nieuwere handleidingen een tijdje op zich lieten wachten.
Dankwoord De resultaten van deze bachelorproef kwam tot stand met de hulp van dhr. Kris Aerts (promotor van deze bachelorproef), dhr. Luc Coenegracht (docent ICT op de KHLim), voor de initiële uitleg over de Shibboleth-technologie, dhr. Joep Driesen (ICTS KU Leuven), die hulp bood met de standard-configuratie van Shibboleth. Een bijzonder woordje van dank gaat uit naar dhr. Frederik Libert (Lead Architect eHealth development), die vanuit eHealth nodige informatie en configuratie bezorgde, en Anick, Kristel en Wendy van LISTEL, om te duiden hoe zij de login-procedure voor het LISTEL-platform zagen. Ten slotte ook graag een dankwoordje aan familie en vrienden voor hun steun tijdens deze periode.
Referenties [1]Beschrijving en structuur LISTEL (http://listel.be/nl/algemeen/structuur). (Toegang 18 februari 2013). [2] Beschrijving eHealth platform (https://www.ehealth.fgov.be/nl/over-het-ehealthplatform). (Toegang 18 februari 2013). [3] Shibboleth (http://shibboleth.net). (Toegang 18 februari 2013). [4] SWITCH (http://www.switch.ch/aai/about/shibboleth/index.ht ml). (Toegang 18 februari 2013). [5] SAML (http://en.wikipedia.org/wiki/Security_Assertion_Ma rkup_Language). (Toegang 16 april 2013). [6] SAML2.0 (http://docs.oasis-open.org/security/saml/v2.0/sstcsaml-approved-errata-2.0.html). (Toegang 16 april 2013). [7] J. Hughes et al., “Technical Overview of the OASIS Security Assertion Markup Language (SAML) V1.1.OASIS Committee Draft”, May 2004. Document ID sstc-saml-tech-overview-1.1-cd. (http://www.oasisopen.org/committees/download.php/6837/sstc-samltech-overview-1.1-cd.pdf). (Toegang 16 april 2013). [8] Difference between SAML 1.1 & 2.0 (http://saml.xml.org/differences-between-saml-2-0and-1-1). (Toegang 16 april 2013). [9] How to setup a dedicated web server for free (http://net.tutsplus.com/tutorials/php/how-tosetup-a-dedicated-web-server-for-free/). (Toegang 6 februari 2013). [10] Firewall (https://help.ubuntu.com/8.04/serverguide/firewall.ht ml). (Toegang 6 februari 2013). [11] HTTPD Apache2 Web Server (https://help.ubuntu.com/10.04/serverguide/httpd.ht ml). (Toegang 6 februari 2013). [12] Certificates (https://help.ubuntu.com/10.04/serverguide/certificat es-and-security.html). (Toegang 6 februari 2013).
[13] Shibboleth Service Provider (SP) 2.5 Installation Guide (https://www.switch.ch/aai/docs/shibboleth/SWITC H/2.5/sp/deployment/index.html?os=ubuntu). (Toegang 7 februari 2013). [14] Libert, F. (2013). “eHealth I.AM – Registration”. Brussel, België: eHealth. [15] Libert, F. (2013). “eHealth I.AM – SP Shibboleth”. Brussel, België: eHealth. [16] Libert, F. (2013). “eHealth I.AM – Federation Attributes”. Brussel, België: eHealth.