Federated Authentication Benchmarking Framework



Vergelijkbare documenten
INSTALLATIE EXCHANGE CONNECTOR

Security web services

KraamZorgCompleet OnLine instellen en gebruiken. Voor Android tablet of telefoon

Intramed OnLine instellen en gebruiken. Voor Android tablet of telefoon

VPN Remote Dial In User. DrayTek Smart VPN Client

Single Sign-On in ZIVVER met Microsoft ADFS

HDN DARTS WEB AUTHENTICATIE

Single Sign-On in ZIVVER met Microsoft ADFS

SAML & FEDERATED IDENTITIES. The Single Sign-on provider

Handleiding Magento - Yuki

Implementatiekosten en baten van SURFconext. Versie: 0.5 Datum: 06/06/2013 Door: Peter Clijsters

DE IDENTITEITSKAART EN FIREFOX

icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous

Werken op afstand via internet

Installeer Apache2: Landstede februari 2009 versie 3 1 Bertil Hoentjen

Proware Cloud Webbuilder Versie 2.30

Intramed OnLine instellen en gebruiken. Voor Android tablet of telefoon

DigiD SSL. Versie Datum 16 augustus 2010 Status Definitief

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise

SSL VPN. In deze handleiding zullen wij onderstaande SSL mogelijkheden aan u uitleggen. - SSL VPN account/groep creëren.

Handleiding Magento - Asperion

Index. Auteur: André van den Nouweland Datum: 17 oktober 2017 Betreft: SAML voor authenticatie/autorisatie

SURFconext Cookbook. Het koppelen van Alfresco aan SURFconext. Versie: 1.0. Datum: 8 december admin@surfnet.nl

Handleiding Magento - Factuursturen

Intramed OnLine instellen en gebruiken. Voor Mac OSX

HANDLEIDING DMS Plugin Installatie, configuratie & werking

SSL VPN. In deze handleiding zullen wij onderstaande SSL mogelijkheden aan u uitleggen. - SSL VPN account/groep creëren.

eid Routeringsvoorziening OpenID Connect

KraamZorgCompleet OnLine instellen en gebruiken. Voor Mac OSX

Single Sign-On in ZIVVER met Microsoft Azure AD

Externe toegang met ESET Secure Authentication. Daxis Versie 2.0

HANDLEIDING EXTERNE TOEGANG CURAMARE

uw inloggegevens de procedure bij het inloggen in Teleboekhouden 7.2 het beheer van het gebruikersaccount

Toegang tot RIZIV-webtoepassingen via ehealth

Handleiding installatie Rental Dynamics

Installatiehandleiding B3P GIS Suite v3.6

De FAS (Federal Authentication Service) Peter Strick SmartCities IDM workshop 07/05/2009

HANDLEIDING SMTP DIENST BEDRIJVENWEB NEDERLAND B.V.

Technische nota AbiFire5 Rapporten maken via ODBC

Installatie- en gebruikshandleiding Risicoverevening. 11 april 2007 ZorgTTP

De controlekaart volledige werkloosheid

Installatie SQL: Server 2008R2

VPN Remote Dial In User. DrayTek Smart VPN Client

Wijzigen van een acquiring certificaat in ideal Advanced Zo werkt het

Installatie van sqlserver

SSL VPN Smart-VPN app voor ios

Mijn HVW-dossier. Veel voorkomende vragen en problemen

SURFconext Cookbook. Het koppelen van LimeSurvey aan SURFconext. Versie: 1.0. Datum: 4 december admin@surfnet.nl

Met een LightSwitch applicatie een OData service uit de Windows Azure Marketplace consumeren

Gebruik van cryptografie voor veilige jquery/rest webapplicaties. Frans van Buul Inter Access

Temperatuur logger synchronisatie

DrICTVoip.dll v 2.1 Informatie en handleiding

Handleiding Magento - Reeleezee

Handleiding Installatie en Gebruik Privacy- en Verzend Module Stichting Farmaceutische Kengetallen

Er zijn diverse andere software platformen en providers die werken met SIP, maar in dit voorbeeld gaan we uit van de volgende software:

Technische nota AbiFire Rapporten maken via ODBC

Software Requirements Specification

5/5 Red Carpet. 5/5.1 Inleiding

De SAP Cloud Connector 2.0 maakt SAPUI5 ontwikkeling via de WEB-IDE mogelijk met data uit je eigen backend systeem.

Single Sign-On in ZIVVER met Okta

Installatie. Klik vervolgens op OK om verder te gaan met de installatie. Om verder te gaan met de installatie kunt op op Volgende klikken.

Claims-based authenticatie in SharePoint 2010

Smart-VPN app voor ios

Naam: Sander van Schie Datum: Klas: SBICO-IB2 Doel: Uitleg Toegang tot vcloud Doelgroep: Nieuwe cursisten Versie: 1.0.0

Inhoud KAS-WEB: HANDLEIDING IDG OPERATOR

Handleiding DocProof ELA

VISMA TELEBOEKHOUDEN. Gewijzigde inlogprocedure Teleboekhouden 7.2. VISMA TELEBOEKHOUDEN Versie 7.2

SURFFEDERATIE HANDLEIDING AD FS 2.0

API...1 Identificatie...1 Opties...2 Acties...3 Webserver...6 Heartbeat...6 Buffer groottes...8

Delft-FEWS & Web Services

1 Inleiding. 3 Handmatig... invoeren zaken basis 4 Verwerken... zaken 5 Afhandelen... van zaken. 7 Uitgebreidere... zaak opties

Intramed OnLine instellen en gebruiken. Voor Mac OSX

DE ELEKTRONISCHE IDENTITEITSKAART (EID)

Handleiding Inloggen met SSL VPN

Technisch Ontwerp VISSIM-PPA Koppeling

Installatie en configuratie documentatie

Net2 Anywhere - Installatie

Procedure activeren van de MFA applicatie op een mobiele telefoon

Installatiehandleiding Privacy- en Verzendmodule DIS voor Windows, Mac OS en Linux

React en React Native voor websites en apps

SURFconext Cookbook. Het koppelen van Wordpress aan SURFconext. Versie: 1.0. Datum: 7 november admin@surfnet.nl

HANDLEIDING HOSTED EXCHANGE 2007 (PC-EN)

SenBox Handleiding. Versie: juli

Aan de slag met het adres van uw nieuwe Website

ZN Handleiding GERRIT token gebruik

Installatie instructie

Registreren Inloggen - Profiel beheren

Handleiding 3CX Centrale. Handleiding 3CX Centrale. Pagina 1. 12Connect 03/2011 versie2.1

Oracle Application Server Portal Oracle Gebruikersgroep Holland Oktober 2003

Installatie handleiding Reinder.NET.Optac

Databroker invoer NHR datasets 2018 Pacemaker- en ICD registratie. Definitief / 21 augustus 2018 / versie

KraamZorgCompleet OnLine instellen en gebruiken. Voor ipad of iphone

Handleiding ALGEMENE HANDLEIDING VWORKSPACE. Versie: 1.2. Datum: 10 april Eigenaar:

Aanmelden Na installatie wordt de service automatisch gestart en kunt u meteen aanmelden van op afstand:

Hoe kan ik extern werken?

Handleiding voor het installeren van Tomcat7

Hoe kan ik extern werken?

Transcriptie:

Scriptie ingediend tot het behalen van de graad van PROFESSIONELE BACHELOR IN DE ELEKTRONICA-ICT Federated Authentication Benchmarking Framework Tom Dierckx en Ward Gubbi Departement Wetenschappen en Techniek Opleiding Elektronica-ICT Academiejaar 2014-2015 Interne promotor: Yves Masset Externe promotor: Maarten Wouters Versie: 11 juni 2015

Dankwoord Allereerst zouden wij de docenten van de opleiding Elektronica-ICT van de Artesis Plantijn Hogeschool willen bedanken voor de ondersteuning de voorbije jaren. Zonder hun hulp was het tot vorm komen van deze scriptie nooit mogelijk geweest. Ook willen we iedereen bij IS4U bedanken om ons de mogelijkheid te geven stage te lopen in hun bedrijf en voor de goede ondersteuning tijdens het uitwerken en verwezelijken van dit document. Antwerpen, 11 juni 2015 Tom Dierckx en Ward Gubbi i

Abstract Er bestaan verschillende authenticatie methodes, elk met zijn eigen sterktes en zwaktes. Een groot probleem is het kunnen definiëren welke het snelst en meest performant is. Er is een grote nood naar een framework dat de mogelijkheid geeft om verschillende authenticatietype s te vergelijken en hier direct feedback op te geven. We kozen ervoor de volledige authenticatieprocedure te simuleren, alsof het in een browser zou uitgevoerd worden. Door de procedure te volgen die een normale gebruiker moet doorgaan kunnen we resultaten verkrijgen die overeenkomen met de realiteit. Daarnaast werken we de trage reactietijd van een gebruiker volledig weg. Elke authenticatie methode is appart geschreven en dan gebundeld in een overkoepelend framework. ii

Inhoudsopgave Dankwoord Abstract i ii 1 Inleiding 4 1.1 Testomgeving.................................. 5 1.2 Framework.................................... 5 2 Bespreking 7 2.1 Authenticatie- en authorisatiemechanismen................... 7 2.1.1 Gebruikersnaam en wachtwoord..................... 8 2.1.2 SAML 2.0................................ 9 2.1.3 OAuth 2.0................................ 17 2.1.4 eid.................................... 20 2.2 Testomgeving.................................. 22 2.2.1 OpenAM................................. 22 2.2.2 eid.................................... 30 2.3 Framework.................................... 31 2.3.1 Gebruikers interface........................... 32 2.3.2 Data logging............................... 34 2.3.3 HTML Extractie............................. 40 2.3.4 Gebruikersnaam en wachtwoord..................... 42 2.3.5 SAML 2.0................................ 44 2.3.6 OAuth 2.0................................ 46 2.3.7 eid.................................... 48 3 Resultaten 50 3.1 Doelstellingen.................................. 50 3.1.1 Basisdoelstellingen............................ 50 3.1.2 Extra Doelstellingen........................... 50 iii

INHOUDSOPGAVE iv 3.2 Behaalde resultaten............................... 50 3.2.1 Problemen en oplossingen........................ 51 3.2.2 Niet behaalde doelstellingen....................... 51 3.2.3 SAML studie............................... 51 4 Besluit 53 A Handleiding 54 B eid authenticatie 61

Lijst van figuren 2.1 SAML SP-Initiated SSO: POST/POST.................... 10 2.2 SAML SP-Initiated SSO: Redirect/POST.................... 11 2.3 SAML SP-Initiated SSO: POST/Artifact.................... 12 2.4 SAML SP-Initiated SSO: Redirect/Artifact................... 13 2.5 SAML IdP-Initiated SSO: Artifact........................ 14 2.6 SAML IdP-Initiated SSO: POST......................... 15 2.7 SAML Voorbeeld................................. 16 2.8 OAuth Protocol Flow.............................. 17 2.9 OAuth Voorbeeld................................ 19 2.10 eid Certificate-based authentication....................... 20 2.11 2-way SSL authentication............................ 21 2.12 Policy Agent................................... 23 2.13 SAML: Federation................................ 25 2.14 SAML: WebAgent SSO............................. 26 2.15 OAuth: Authorization Server.......................... 27 2.16 OAuth: Client registratie............................. 28 2.17 OAuth: Client Authenticatie Module...................... 29 2.18 Gebruikers interface............................... 32 2.19 Settings-venster................................. 33 2.20 Kibana...................................... 38 2.21 Kibana: Methodes................................ 38 2.22 Kibana: Bindings................................. 39 2.23 Kibana: Dashboard............................... 39 2.24 Toestemmingspagina............................... 47 3.1 SAML SP-Initiated SSO: POST/POST.................... 52 v

Verklarende woordenlijst Acroniemen eid Elektronische Identiteitskaart HTTP Hypertext Transfer Protocol IETF Internet Engineering Task Force IdP Identity Provider OASIS Organization for the Advancement of Structured Information Standards SAML Security Assertion Markup Language SOAP (oorspronkelijk) Simple Object Access Protocol SP Service Provider SSL Secure Sockets Layer SSO Single sign-on SLO Single logout TLS Transport Layer Security 1

LIJST VAN FIGUREN 2 Verklaringen Asymmetrische cryptografie Een overkoepelende term voor codering waarbij gebruik gemaakt wordt van 2 sleutels. Een om te vercijferen (Public Key) en een andere om te oncijferen (Private Key). Certificate authority of certificaatautoriteit (CA) Een instantie (vaak een derde) die digitale certificaten verleent aan verscheidene partijen. Dit met het oog op identiteitsverificatie. eid (soms ook BeID)[1]. Elektronische identiteitskaart voor Belgen. De kaart wordt uitgegeven aan Belgen ouder dan 12 jaar. De kaart bevat naast de identiteitsgegevens een authenticatie- (om je identiteit te kunnen bevestigen) en een handtekeningscertificaat (om een elektronische handtekening te kunnen plaatsen, vanaf 18 jaar), deze zijn beveiligd met een pincode. Er bestaan ook varianten voor kinderen (kids-id) jonger dan 12 en vreemdelingen (vreemdelingenkaart) die in België verblijven. Federated identity Maakt het mogelijk voor gebruikers om zich op meerdere websites en identity management systemen in te loggen met dezelfde gebruikersgegevens. Dit maakt ook SSO mogelijk. Authenticatie door middel van Federated Identity noemen we Federated Authentication Enkele gebruikte technologieën zijn SAML, OAuth, OpenID, Microsoft Azure Cloud Services en Windows Identity Foundation Enkele bekende implementaties zijn: Microsoft Account, Google, Yahoo!, Twitter, Amazon, Mozilla Persona, PayPal.[3] Fedict Federale Overheidsdienst Informatie- en Communicatietechnologie, verantwoordelijke voor de uitwerking van de ICT-diensten van de federale overheid. Hieronder valt ondermeer de technische ontwikkeling van de eid en bijhorende toepassingen. HTTP Request Binnen HTTP zijn verscheidene request methodes gedefinieerd, deze worden gebruikt voor de communicatie tussen client en server. De meest gebruikte methode s zijn de GET methode en de POST methode. Ze staan respectievelijk in voor het aanvragen en indienen van data. Key of sleutel Benaming voor de gegevens die nodig zijn om een data te versleutelen en/of een versleutelde boodschap te ontcijferen. Dit geldt zowel voor digitale als analoge encryptie. Keystore Bevat private keys en de certificaten met bijhorende public keys. OAuth Een open IETF-standaard voor autorisatie. De ontwikkeling ligt in handen van een werkgroep binnen de IETF.

LIJST VAN FIGUREN 3 Open standaard Een standaard dat door de ontwikkelaar rechtenvrij aangeboden wordt. Private Key Eén van de twee sleutels gebruikt bij asymmetrische cryptografie. Deze zal niet overgedragen worden naar andere partijen. Public Key Een sleutel die bij cryptografie zal uitgedeeld worden aan alle partijen. SAML Een op XML gebaseerde open OASIS-standaard voor het uitwisselen van authenticatie- en autorisatiegegevens. SOAP Protocol om gestructureerd informatie van webservices uit te wisselen in een computer netwerk, gebruikmakend van het XML Infoset-formaat. Bij SAML wordt het gebruikt om data om SAML assertions over te brengen zonder gebruik te maken van een User Agent. SSO Maakt het mogelijk om met één aanmeldsessie toegang te verkrijgen tot meerdere applicaties en resources. SLO Maakt het mogelijk een SSO sessie stop te zetten en uit te loggen op alle betrokken applicaties. Truststore Bevat certificaten van andere partijen die je vertrouwt, en waarmee je communicatie verwacht. User Agent Computerprogramma dat netwerkfuncties uitvoert voor een gebruiker. Een van de bekendste voorbeelden is een webbrowser.

Hoofdstuk1 Inleiding Er zijn meerdere tools en software programma s op de markt die testen kunnen uitvoeren op de performantie van een bepaalde server configuratie en de verwerking van de load op een website. IS4U is een bedrijf gespecialiseerd in Identity & Access Management en Security Services (penetration testing). In het domein van Access Management hadden ze echter geen manier om te testen welke authenticatie het meest performant is. Het is belangrijk dit te weten bij het uitrollen van een authenticatietype op een omgeving. Op de markt zijn er geen of weinig tools te vinden die zich specifiek op dit probleem toespitsen. Dus hier kwam het idee tot een project vandaan. Er is nood aan een framework die verschillende authenticatietypes kan simuleren en hier vergelijkende feedback over kan geven. Deze framework moet ook toespitsen op de uitbreidingen die mogelijk zijn op de verschillende Federated authenticatie mogelijkheden. Het probleem voor IS4U is dat er steeds vaker een snellere response moet zijn van authenticatiemethode. Wat men dus specifiek wenst is een framework dat verschillende authenticaties kan uitvoeren op een server. Dit framework moet hier dan een aantal statistieken over bijhouden en een conclusie weergeven. Dit bijvoorbeeld in grafieken die kunnen weergeven wat de sterktes zijn van iedere authenticatiemethode. 4

HOOFDSTUK 1. INLEIDING 5 1.1 Testomgeving Uiteraard is het onmogelijk om een framework te schrijven zonder deze praktisch te kunnen testen. Door gebruik te maken van het OpenAM platform is het mogelijk op een korte periode een Federated authenticatie te simuleren, daarnaast was dit ook de voorkeur van stagebedrijf IS4U. We hebben dit ook volledig zelf proberen te doen met af en toe een beetje hulp vanuit IS4U. De voorziende documentatie over OpenAM die online aanwezig was is voldoende om dit grotendeels zelf te doen. Ook is dit voor onze kennis ingaande de authenticatiemechanisme interessanter. OpenAM werd geïnstalleerd op een Apache Tomcat server draaiend in een CentOS Linux distributie (een Red Hat derivaat). Aangezien we meerdere Federated authenticatietypes zullen behandelen hebben we 2 instanties van OpenAM nodig die op elkaar geconfigureerd zijn. Dus 2 servers, een die de Gebruikersauthenticatie zal afhandelen en een die de resources zal aanbieden. We creëren zo het principe van Identity Provider (IdP) en Service Provider (SP). Een gebruiker zal toegang wensen tot een resource, eigendom van de SP, deze zal aan de IdP vragen de persoon te authenticeren. Aangezien wij met log files in standaard JSON formaat werken is het mogelijk deze op verschillende manieren uit te lezen. Vanuit IS4U kwam de opmerking gebruik te maken van een ELK stack. Een combinatie van Elasticsearch, Logstash en Kibana. Het opzetten van deze 3 systemen heeft ons wat tijd gekost. Maar deze geven een duidelijk overzicht. En zijn dus essentieel om onze logging tool duidelijk te maken. 1.2 Framework Het programmeren volgens de object oriented structuur is voor ons zeer belangrijk. Om hierin een overzicht te bewaren is het framework opgesplitst in de verschillende authenticatiemechanismen die we zullen testen. De authenticatietypes die getest zullen worden, naar wens van het stagebedrijf, zijn de volgende: ˆ Gebruikersnaam en wachtwoord ˆ SAML 2.0 ˆ OAuth 2.0 ˆ eid

HOOFDSTUK 1. INLEIDING 6 Deze zullen de core van het framework zijn. Hiernaast is er nog een nood aan een aantal dingen. Een duidelijke user interface die voor de gebruiker de vele aanpasbare parameters makkelijk instelbaar maken. Er moet hier een balans gemaakt worden tussen het automatisch afwerken en wat de gebruiker kan instellen. Een manier om data te vergaren en in een uniforme manier op te slaan. Dit mede om de gebruiker de vrijheid te geven zelf de representatie van de gegevens te kunnen kiezen. Hierboven zijn er nog een aantal extra s op de authenticatiemethodes die we hebben toegevoegd. Zo is er bij het testen op SAML de mogelijkheid om verschillende bindings toe te voegen. Deze zullen de flow van data tussen de verschillende servers beïnvloeden.

Hoofdstuk2 Bespreking Het komende hoofdstuk zullen alle aspecten van het geschreven framework in diepgang worden bespreken. Ook zal er dieper ingegaan worden op de werking van verschillende authenticatiemethodes. De kennis over het vloeien van pakketten tussen servers tijdens het authenticatieproces is uitermate belangrijk om de simulatie met succes te voltooien. 2.1 Authenticatie- en authorisatiemechanismen Om een volledige simulatie te bekomen was een diepgaande studie nodig. Dit vooral over de Federated (OAuth en SAML) authenticatie- en authorisatiemechanismen. In de komende punten zullen we de werking van de te gebruiken mechanisme in diepgang bekijken. 7

HOOFDSTUK 2. BESPREKING 8 2.1.1 Gebruikersnaam en wachtwoord Authenticatie met gebruikersnaam en wachtwoord is een van de meest gebruikte manieren op het internet. In principe is de opzet simpel: controleren of de ingevoerde gebruikersnaam voorkomt in een database en controleren of het bijhorende wachtwoord gelijk is met wat ingegeven is. Gebruikelijk zijn een gebruikersnaam en wachtwoord enkel geldig voor een bepaalde dienst. Wil je op een andere dienst (zoals een andere website van een andere ontwikkelaar) aanmelden, dan zal je een nieuwe gebruikersnaam en wachtwoord kunnen aanmaken. Men kan op verschillende diensten identieke (onafhankelijke) accounts maken (met dezelfde credentials), maar hierdoor is men een makkelijk doelwit voor hackers. De manier waarop omgegaan wordt met de inloggegevens van de gebruiker, is niet gestandaardiseerd. Zodoende zijn er vele verschillende implementaties mogelijk. De uitwerking is bij ons zeer primitief en had ook niet zo een grote prioriteit. In onze testopstelling maken we gebruik van de standaard loginpagina van OpenAM als referentie. Op deze pagina is een form aanwezig die een POST zal uitvoeren met gebruikersnaam en wachtwoord in een form. De server zal de POST ontvangen, controleren of de credentials bij hem gekend zijn en of ze toegang hebben tot de gevraagde resource. Als de credentials toegang geven tot de resource, zal er met een response op de POST gereageerd worden. Deze bevat de gevraagde resource en stelt een cookie in. Deze cookie wordt gebruikt om te voorkomen dat de gebruiker elke keer opnieuw moet aanmelden bij het aanvragen van de resource.

HOOFDSTUK 2. BESPREKING 9 2.1.2 SAML 2.0 Security Ayssertion Markup Language (SAML) is een OASIS-standaard [7], gebaseerd op XML, gebruikt voor het uitwisselen van authenticatie- en autorisatiegegevens tussen verschillende partijen (in het bijzonder een Identity Provider (IdP) en een Service Provider (SP)). Er zijn vele mogelijkheden om SAML te implementeren. We bespreken de toegepaste, browsergebaseerde, methodes die beschikbaar zijn in OpenAM 12. We bespreken 4 SP-initiated methodes en 2 IdP-initiated methodes. Dataoverdracht tussen SP en IdP gebeurt door middel van SAML assertions. Deze assertions bevatten authenticatie- en/of autorisatiedata. In het volgende hoofdstuk bespreken we hoe deze assertions kunnen worden doorgegeven. ˆ HTTP-POST: de server zal een html pagina genereren met hierop een form en POST die automatisch naar de juiste URL. Zo kunnen er SAML assertions van SP naar IdP (of omgekeerd) gestuurd worden. Deze gaan altijd via de client s browser. ˆ HTTP-REDIRECT: de SAML assertion wordt als parameter toegevoegd aan de redirect URL op SP naar IdP (of omgekeerd). Gebeuren ook via de client s browser. ˆ SOAP: de SAML assertion zal niet passeren via de client maar wordt rechtstreeks uitgewisseld tussen de servers zelf. 2.1.2.1 Service Provider-initiated Een gebruiker (gebruikmakend van een User Agent) wenst toegang tot een resource op de SP. De SP controleert of de gebruiker reeds geauthenticeerd is. Indien dit niet het geval is, zal er een single sign-on (SSO)-sessie opgezet worden met de IdP. Hoe dat proces verloopt kan variëren. Er zijn meerdere mogelijkheden om de sessie te initiëren naar de IdP en om de autorisatiedata correct naar de SP te sturen. Na het aankomen op de SP zijn er 2 mogelijkheden (bij OpenAM 12) om de SAML Request van SP naar IdP te krijgen. ˆ HTTP-POST ˆ HTTP-REDIRECT Hierna komt men toe op de pagina waar men zijn aanmeldingsgegevens kan valideren: de zogenaamde loginpagina. Na het valideren moet de SAML Response terug bij de SP geraken. Hiervoor zijn er de volgende 2 mogelijkheden: ˆ HTTP-POST ˆ HTTP-ARTIFACT (SOAP) Deze geven gecombineerd 4 verschillende manieren om de SAML Request en response door te geven via de gebruiker. Al deze combinaties zijn dieper beschreven in de dit hoofdstuk.

HOOFDSTUK 2. BESPREKING 10 2.1.2.1.1 HTTP-POST request en response De gebruiker probeert toegang te verkrijgen tot een beveiligde resource van de SP zonder dat hij is ingelogd. De gebruiker heeft geen account op de SP, maar wel een Federated account op de IdP. De SP stuurt een authenticatie request naar de IdP. Zowel de request als de response SAML assertions worden via de browser van de gebruiker verzonden door middel van HTTP-POST. Figuur 2.1: SP-Initiated SSO: POST/POST [8] 1. De gebruiker doet een GET Request naar een resource op de SP. Hierop draait een webagent. Deze agent controleert of de gebruiker is ingelogd, wanneer dit niet zo blijkt te zijn, zal deze een SAML Request opstellen. 2. De User Agent van de gebruiker krijgt een pagina met een form door. Deze form bevat een SAML Request, gericht aan de IdP. Deze SAML Request bevat de vraag om SSO te initiëren. De User Agent zal deze form met een POST doorgeven aan de IdP. 3. De IdP handelt met de gebruiker de authenticatie af. 4. Er wordt eventueel extra informatie van de gebruiker opgehaald, indien dit in de request gevraagd werd. 5. Eens de authenticatie geslaagd is, zal er wederom een form worden opgesteld, ditmaal gericht aan de SP. Deze bevat een SAML Response. De User Agent POST deze form naar de SP. Eens de SAML uitwisseling geslaagd is, zal de gebruiker toegang krijgen tot de betrokken Resources op de SP.

HOOFDSTUK 2. BESPREKING 11 2.1.2.1.2 HTTP-REDIRECT request en HTTP-POST response De SP stuurt een HTTP redirect bericht naar de IdP met de authenticatie request. De IdP zal via HTTP POST een SAML response met assertion terugsturen naar de SP. Figuur 2.2: SP-Initiated SSO: Redirect/POST [8] 1. De gebruiker doet een GET Request naar een resource op de SP hierop draait een webagent. Deze agent controleert of de gebruiker is ingelogd, wanneer dit niet zo blijkt te zijn, zal deze een SAML Request opstellen. 2. De User Agent krijgt een redirect naar de IdP. De redirect URL bevat de SAML request. 3. De IdP handelt met de gebruiker de authenticatie af. 4. Er wordt eventueel extra informatie van de gebruiker opgehaald, indien dit in de request gevraagd werd. 5. Eens de authenticatie geslaagd is, zal er een form worden opgesteld, gericht aan de SP, met de SAML Response. De User Agent POST deze form naar de SP. Eens de SAML uitwisseling geslaagd is, zal de gebruiker toegang krijgen tot de betrokken Resources op de SP.

HOOFDSTUK 2. BESPREKING 12 2.1.2.1.3 HTTP-POST request en Artifact response De SP stuurt via HTTP POST een authenticatie request naar de IdP. De response zal via een redirect van de IdP naar de SP worden gestuurd, deze bevat een SAML artifact. Figuur 2.3: SP-Initiated SSO: POST/Artifact [8] 1. De gebruiker doet een GET Request naar een resource op de SP hierop draait een webagent. Deze agent controleert of de gebruiker is ingelogd, wanneer dit niet zo blijkt te zijn, zal deze een SAML Request opstellen. 2. De User Agent van de gebruiker krijgt een pagina met een form door. Deze form bevat een SAML Request, gericht aan de IdP. Deze SAML Request bevat de vraag om SSO te initiëren. De User Agent zal deze form met een POST doorgeven aan de IdP. 3. De IdP handelt met de gebruiker de authenticatie af. 4. Er wordt eventueel extra informatie van de gebruiker opgehaald, indien dit in de request gevraagd werd. 5. De IdP stuurt de User Agent terug naar de SP door middel van een redirect en geeft een SAML Artifact mee in de response. 6. De Assertion Consumer Service van de SP gebruikt het artifact om rechtstreeks contact op te nemen met de IdP door middel van een Artifact Resolve. 7. De Artifact Resolution Service van de IdP zoekt de SAML Response die bij het gegeven artifact hoort. Deze wordt rechtstreeks teruggestuurd aan de SP in een Artifact Response door middel van SOAP.

HOOFDSTUK 2. BESPREKING 13 Eens de SAML uitwisseling geslaagd is, zal de gebruiker toegang krijgen tot de betrokken Resources op de SP. 2.1.2.1.4 HTTP-Redirect request en Artifact response De SP stuurt een HTTP redirect bericht naar de IdP met de authenticatie request. De response zal via een redirect van de IdP naar de SP worden gestuurd, deze bevat een SAML artifact. Figuur 2.4: SP-Initiated SSO: Redirect/Artifact [8] 1. De gebruiker doet een GET Request naar een resource op de SP hierop draait een webagent. Deze agent controleert of de gebruiker is ingelogd, wanneer dit niet zo blijkt te zijn, zal deze een SAML Request opstellen. 2. De User Agent krijgt een redirect naar de IdP. De redirect URL bevat de SAML request. 3. De IdP handelt met de gebruiker de authenticatie af. 4. Er wordt eventueel extra informatie van de gebruiker opgehaald, indien dit in de request gevraagd werd. 5. De IdP stuurt de User Agent terug naar de SP door middel van een redirect en geeft een SAML Artifact mee in de response. 6. De Assertion Consumer Service van de SP gebruikt het Artifact om rechtstreeks contact op te nemen met de IdP door middel van een Artifact Resolve. 7. De Artifact Resolution Service van de IdP zoekt de SAML Response die bij het gegeven Artifact hoort. Deze wordt rechtstreeks teruggestuurd aan de SP in een Artifact Response. Eens de SAML uitwisseling geslaagd is, zal de gebruiker toegang krijgen tot de betrokken Resources op de SP.

HOOFDSTUK 2. BESPREKING 14 2.1.2.2 Identity Provider-initiated De gebruiker is aangemeld op de IdP en wenst toegang tot de SP. We bespreken de 2 gebruikte methodes. 2.1.2.2.1 Artifact binding De IdP stuurt een SAML artifact naar de SP doormiddel van een HTTP redirect. gebruikt dit artifact om de bijhorende SAML response te bekomen van de IdP. De SP Figuur 2.5: IdP-Initiated SSO: Artifact [8] 1. De gebruiker logt in op de IdP. 2. De gebruiker wenst toegang tot een beveiligde resource op de SP, maar is daar niet ingelogd. 3. Er wordt eventueel extra informatie van de gebruiker opgehaald. 4. De IdP genereert een assertion en maakt een artifact. Het artifact wordt via de User Agent gestuurd naar de SP door middel van een redirect. 5. De Assertion Consumer Service van de SP gebruikt het Artifact om rechtstreeks contact op te nemen met de IdP door middel van een Artifact Resolve. 6. De Artifact Resolution Service van de IdP zoekt de SAML Response die bij het gegeven Artifact hoort. Deze wordt rechtstreeks teruggestuurd aan de SP in een Artifact Response. Eens de SAML uitwisseling geslaagd is, zal de gebruiker toegang krijgen tot de betrokken Resources op de SP.

HOOFDSTUK 2. BESPREKING 15 2.1.2.2.2 HTTP-POST binding De IdP stuurt via HTTP POST een SAML assertion naar de SP. Figuur 2.6: IdP-Initiated SSO: POST [8] 1. De gebruiker logt in op de IdP. 2. De gebruiker wenst toegang tot een beveiligde resource op de SP, maar is daar niet ingelogd. 3. Er wordt eventueel extra informatie van de gebruiker opgehaald. 4. De IdP stelt een form op, gericht aan de SP, met de SAML Response. De User Agent POST deze naar de SP. Eens de SAML uitwisseling geslaagd is, zal de gebruiker toegang krijgen tot de betrokken Resources op de SP.

HOOFDSTUK 2. BESPREKING 16 2.1.2.3 Voorbeeld Een praktisch voorbeeld is authenticeren met MediaID op de website (in dit geval De Morgen). Dit is een Service Provider Initiated voorbeeld. Figuur 2.7: Voorbeeld: De Morgen & MediaID

HOOFDSTUK 2. BESPREKING 17 2.1.3 OAuth 2.0 OAuth 2.0 (Open Authorization) is een standaard voor autorisatie. De ontwikkeling ligt in handen van een werkgroep binnen de Internet Engineering Task Force (IETF). OAuth geeft gebruikers (de Resource Owner) de mogelijkheid om toegang tot hun privégegevens op een Resource Server veilig te delen met een derde (de Client), zonder hun gebruikersnaam en wachtwoord te moeten delen. Het geeft de mogelijkheid om een Autorisatieserver Access Tokens uit te laten geven aan een Client, met de toestemming van de gebruiker. Met die Access Token krijgt de Client toegang tot de gegevens van de gebruiker. Authenticatie ligt buiten de scope van OAuth, met de gegevens verzameld door middel van de autorisatie kan men echter wel authenticatie opzetten. Hier gaan we echter niet dieper op in aangezien er verscheidene configuraties mogelijk zijn. In de vermelde flow is de gebruiker reeds geauthenticeerd bij de Authorization Server. De meest bekende implementaties zijn die van Google, Facebook en Twitter. Figuur 2.8: Protocol Flow [6] 2.1.3.1 Client Onder client verstaan we bij OAuth de dienst die de autorisatie aanvraagt, vergelijkbaar met de SP van SAML. De gebruiker (Resource Owner) zal toegang wensen tot de client, maar de client heeft nood aan authorisatie om bepaalde gegevens te weten te komen over de gebruiker.

HOOFDSTUK 2. BESPREKING 18 2.1.3.2 Resource Owner De resource owner is dus de gebruiker wiens gegevens vereist zijn. Hij dient zijn toestemming te geven om de autorisatie te laten plaatsvinden. Hij zal een lijst krijgen met gegevens waartoe de client toegang wenst, en dient zijn akkoord te geven om verder te kunnen gaan. 2.1.3.3 Authorization Server Eens de gebruiker zijn toestemming gegeven heeft, kan de client een acces token ophalen bij de authorization server. Deze deelt Access Tokens uit, welke toegang geven tot de gevraagde gegevens van de gebruiker. 2.1.3.4 Resource Server Hierbij verstaan we de server waar de gebruikersgegevens staan. Met de verkregen Access Token kan de Client de benodigde gegevens ophalen.

HOOFDSTUK 2. BESPREKING 2.1.3.5 19 Voorbeeld Een praktisch voorbeeld is het verbinden van een mobiele applicatie, zoals Candy Crush, met Facebook. Figuur 2.9: Voorbeeld: Candy Crush

HOOFDSTUK 2. BESPREKING 20 2.1.4 eid De elektronische identiteitskaart (eid) uitgereikt door de Belgische overheid kan ook gebruikt worden om je te authenticeren, aangezien het een bewijs is van je identiteit. De effectieve manier van authenticeren is niet gestandaardiseerd, er zijn verscheidene implementaties mogelijk. De manier die wij zullen gebruiken is een 2 way-ssl authenticatie. De client zal de server authenticeren, en hier opvolgend de server de client. 2.1.4.1 eid authenticatie Op de eid is een certificaat aanwezig en de bijhorende public en private keys. Deze kunnen gebruikt worden in een TLS/SSL verbinding. Transport Layer Security (TLS) zorgt voor de mogelijkheid om een verbinding op te zetten tussen client/server die privacy en data integriteit garandeert. Deze is gebaseerd op de Public Key Infrastructure. Figuur 2.10: Certificate-based authentication met eid [4] Van de eid wordt via de pincode het certificaat en de public key gehaald. Deze wordt aan de server, die de protected resource bezit, overhandigd. De server zal dit certificaat naar de Validation Authority doorverwijzen waarna deze valideert of dit certificaat correct is. Hierna wordt aan de gebruiker de protected resource getoond.

HOOFDSTUK 2. BESPREKING 21 Onze implementatie is gebaseerd op 2 way SSL authenticatie en gaat als volgt te werk: 1. Client vraagt toegang de resource Figuur 2.11: 2-way SSL authentication [5] 2. Server stuurt zijn certificaat B door naar de client 3. Client verifieert het certificaat 4. Client stuurt eigen certificaat naar de server 5. Server verifieert het certificaat 6. Toegang tot protected resource Als we dit dan toepassen op eid, is het certificaat dat de client aanbiedt vervangen door dat van de eid. De server verifieert dat certificaat met het Belgium Root CA-certificaat[2].

HOOFDSTUK 2. BESPREKING 22 2.2 Testomgeving In het volgende hoofdstuk beschrijven we het opzetten van onze testomgeving en het opzetten van verschillende authenticatiemethodes binnenin OpenAM en Apache Tomcat. 2.2.1 OpenAM We maken gebruik van OpenAM. De verschillende mogelijkheden in deze tool op vlak van acces management maken het mogelijk snel een testomgeving op te zetten. OpenAM is opensource en te downloaden op de website van ForgeRock. Een werkende instantie van Apache Tomcat moet aanwezig zijn. 2.2.1.1 Installatie ForgeRock biedt een web applicatie in.war-format aan voor deployment in Apache Tomcat. We plaatsen deze file in de webapp folder van Tomcat. Deze zal automatisch gedeployed worden. Hierna kunnen we via de web UI van OpenAM de basisconfiguratie doen. In onze omgeving hebben we gebruik gemaakt van de eigen OpenAM User Data Store. Deze is voldoende voor onze testopstelling. Dan rest er nog een laatste configuratie om de instantie van OpenAM volledig bruikbaar te maken. OpenAM 12 implementeert een nieuwe UI voor de authenticatie- en profielpagina s. Deze is gebaseerd op JavaScript. De inhoud van de HTML pagina blijft dan ook beperkt tot Loading, de rest wordt opgebouwd met scripts waardoor de broncode niet zichtbaar is. Om de standaard UI te gebruiken, past men het volgende aan: onder Configuration Core XUI interface vinken we uit. De OpenAM installatie is nu klaar voor gebruik.

HOOFDSTUK 2. BESPREKING 23 2.2.1.2 Web Policy Agent De Web Policy Agent draait bovenop de webserver die we willen beschermen. Deze heeft de taak te controleren of de gebruiker toegang heeft tot de gevraagde resource. De flow die dan gecreëerd wordt is de volgende: Figuur 2.12: Policy Agent 1. Client vraagt toegang de beveiligde resource. 2. Webserver stuurt de request door naar de Agent. 3. Policy Agent vraagt aan OpenAM welke policy het dient toe te passen. 4. Als OpenAM toegang geeft, zal de Agent toegang toestaan. 5. Server geeft toegang tot beveiligde resource.

HOOFDSTUK 2. BESPREKING 24 Op OpenAM moet allereerst een Profile voor de Web Policy Agent gemaakt worden. 1. In de OpenAM console Access Control Realm Agents Web, hier klikken we op New. 2. Name en Password worden gebruikt door de agent om zich te valideren bij de OpenAM instantie. Server URL is naar een OpenAM instantie en Agent URL de url die beschermd is door de Agent. De werkelijke installatie van de Agent bovenop de apache HTTP server kan nu beginnen. We maken eerst een bestand aan met het wachtwoord, deze is identiek aan het wachtwoord in het profiel. Hierna kunnen we het./agentadmin install commando gebruiken om de installatie te starten.

HOOFDSTUK 2. BESPREKING 25 2.2.1.3 SAML 2.0 2.2.1.3.1 Identity & Service Provider OpenAM voorziet 4 wizards voor de IdP en SP configuratie. 2 om een hosted IdP of SP te maken (lokaal op de server) en 2 om een remote IdP of SP te registreren (van een andere server). Op de doel IdP maak je dus een Hosted IdP en registreer je een remote SP, en omgekeerd. Anders dan de standaard configuratie hebben we gebruik gemaakt van Transient Users. Dat wil zeggen dat er geen lokaal account aangemaakt wordt voor de gebruiker, hij zal daarentegen als anonieme gebruiker gekend staan op de SP. In onze testomgeving was het immers niet nodig om rekening te houden met identiteitsmanagement. Het is ook mogelijk om de Federation instellingen van de servers bij te werken, daar kunnen we bijvoorbeeld de standaard binding van de SSO en SLO instellen. Figuur 2.13: Federation

HOOFDSTUK 2. BESPREKING 26 2.2.1.3.2 SSO & SLO Aangezien SSO en SLO standaard beschikbaar zijn, dienen we slechts kleine aanpassingen te doen om deze te implementeren. De WebAgent van de SP dient geconfigureerd te worden opdat het de SSO en SLO url s gebruikt (de zogenaamde Endpoints) en niet langer de standaard OpenAM Login of Logout URL. Bij de instellingen van de betreffende WebAgent kan dit gedaan worden in het tabblad OpenAM Services. Daarnaast is het ook mogelijk een Agent Logout URL in te stellen, daarbij zal de WebAgent automatisch een logout sessie starten terwijl de gebruiker naar een normale pagina surft (zoals bijvoorbeeld logout.html). Figuur 2.14: Federation

HOOFDSTUK 2. BESPREKING 27 2.2.1.4 OAuth 2.0 2.2.1.4.1 Authorization Server Figuur 2.15: Authorization Server OpenAM voorziet een wizard voor de basisconfiguratie van de Authorization Server. Hierbij kan men enkele instellingen met betrekking tot de levensduur van de tokens aanpassen. Er wordt automatisch een policy opgezet voor de endpoints die gebruik worden voor OAuth.

HOOFDSTUK 2. BESPREKING 28 Figuur 2.16: Client registratie Eens voltooid dient er een nieuwe Client geregistreerd te worden op de Authorization Server. Daarbij wordt de scope ingesteld (de data die geautoriseerd dient de worden) en onder andere de weergavenaam die getoond zal worden op de Consent pagina.

HOOFDSTUK 2. BESPREKING 29 2.2.1.4.2 Client Figuur 2.17: Client Authenticatie Module Vervolgens kunnen we de client zelf instellen. We voegen een OAuth module toe onder de Authenticatie modules. Hierbij dienen we de Client Id en Client Secret in te voeren die we ook ingaven op de Authorization Server. Op basis van deze gegevens kan de client geïdentificeerd worden. Voor onze installatie maken we gebruik van Anonymous users, ook dit kunnen we hier instellen. Tenslotte kunnen we de WebAgent aanpassen zodat er automatisch aangemeld wordt met behulp van de OAuth module.

HOOFDSTUK 2. BESPREKING 30 2.2.2 eid Voor een volledige uiteenzetting van de installatie verwijzen we naar Bijlage B (pagina 61). Hierin overlopen we in diepgang hoe de certificaten ingesteld moeten worden op server en client niveau, en een hoe een Java client-applicatie hiermee moet werken. In grote lijnen moet het volgende gebeuren. Het certificaat van de CA van de Belgische overheid moet toegevoegd worden aan de truststore van de server. In onze omgeving is dit op een Tomcat instantie, de SSL connectie zal over poort 8443 gaan. Volgende instellingen in Tomcat zijn voor een gewone 2-way TLS/SSL verbinding met authenticatie, zonder eid. Listing 2.1: Tomcat SSL Connector <Connector p o r t= 8443 maxthreads= 150 scheme= h t t p s s e c u r e= t r u e SSLEnabled= t r u e t r u s t s t o r e F i l e= CA. k e y s t o r e t r u s t s t o r e P a s s= password k e y s t o r e F i l e= s e r v e r c e r t s i g n e d b y C A. k e y s t o r e k e y s t o r e P a s s= password c l i e n t A u t h= t r u e k e y A l i a s= www. t e s t s e t u p. be s s l P r o t o c o l= TLS /> Het certificaat dat de server zal aanbieden, wordt in de keystore gestoken. Dit is (in ons geval) een zelf gegenereerd certificaat met een eigen selfsigned CA-certificaat. Dit selfsigned CAcertificaat is bij de client in de truststore toegevoegd. Zo herkent de client of de server wel de server is. Het certificaat dat de client naar de server doorstuurt, is het Authentication-certificaat van de eid. Hiervoor is het ingeven van de pin code vereist. Om de server dit certificaat te laten accepteren, moeten we het Root CA-certificaat van de overheid toevoegen aan de truststore. We genereren een keystore met het volgende commando en het gedownloade certificaat belgiumrca2.crt. keytool importcert alias servertruststore file belgiumrca2. crt keystore rootcatrust. keystore Het is nu enkel mogelijk met gebruik van een eid toegang te krijgen tot de resources op poort 8443

HOOFDSTUK 2. BESPREKING 31 2.3 Framework Elke authenticatie methode is losstaand geschreven, ieder hebben ze een aantal standaard parameters. Dit maakt het mogelijk de verschillende blokken die gebruikt worden in de framework makkelijker te implementeren zijn. Elk authenticatieblok beschikt over een publieke bool die zal weergeven of de totale authenticatie succesvol voltooid is. Specifiekere fouten en dergelijke worden niet weergegeven in het display. Tijdens het uitvoeren van een authenticatie is er ook een logging instantie die draait. Deze zal een log file aanmaken. Hierin staat meer info over de uitgevoerde authenticatie en hoe die specifiek is uitgevoerd. De DAL klasse die in elke authenticatiemodule aanwezig is, staat in voor de volledige afwerking van de authenticatie. De volgende variabelen moeten altijd bij het aanmaken van een DAL Object aanwezig zijn: ˆ De URL van de te bereiken resource ˆ Username ˆ Password Dit afgezien van de eid authenticatie. De werking van authenticatie aan de hand van een certificaat is totaal verschillend en wordt later besproken. We hebben gebruik gemaakt van de in Java JDK standaard HttpURLConnection en HttpsUR- LConnection voor al onze netwerkcalls. Dit gaf een aantal problemen bij het uitvoeren van een POST methode om de SAML data door te geven. De POST gebeurt door een form te laden in een HTML pagina die automatisch een POST naar de juiste URL zal uitvoeren. De methodes die wij gebruikt hebben voor de netwerkcalls, kunnen echter de pagina enkel in string teruggeven. De oplossing die wij hiervoor gebruikt hebben, is het filteren op de webpagina naar de data die aanwezig is in de form. Deze zelf te encoden voor verzending en zelf toe te voegen aan een HTTP-POST met HttpURLConnection. Initieel zal er bij elke authenticatiemethode altijd een GET Request naar de te bereiken resource gedaan worden. De onderlinge werking vanaf hier varieert naargelang de authenticatiemethode. Per methode kunnen er ook een specifiek aantal publieke booleans oegd worden, dit om de correcte werking van onderlinge delen duidelijk te maken.

HOOFDSTUK 2. BESPREKING 32 2.3.1 Gebruikers interface Figuur 2.18: Gebruikers interface De gebruikersinterface werd geschreven in Java. Het basisscherm geeft de gebuiker de kans om snel van start te gaan met de authenticatie specifieke instellingen. De meer specifieke instellingen, die afhankelijk zijn van de aanbieder, zijn terug te vinden in het Settings-venster. Bij het eerste gebruik is het sowieso aan te raden om eerst een configuratie uit te voeren, daarna worden de voorkeuren van de vorige sessie echter opnieuw geladen. Men heeft steeds de mogelijkheid om manueel alle gegevens in te vullen, of om deze automatisch op te roepen vanuit de voorkeuren. Enkele instellingen worden niet opgeslagen: Request Binding, Binding, Logout Binding, threads (aantal simultane uitvoeringen) en thread offset (tijd tussen start van threads). Ook is het gebruik van meerdere accounts standaard uitgeschakeld. Onderaan is een voortgangsbalk en een log terug te vinden, deze geven extra informatie over de voortgang van het proces.

HOOFDSTUK 2. BESPREKING 33 2.3.1.1 Settings In het Settings-venster kan men (afhankelijk van de methode) de (Logout) URL en gebruikersgegevens invoeren. Bij methodes die in threads kunnen worden uitgevoerd, is het mogelijk meerdere accounts in te voeren. Bij eid kan men de standaard Truststore locatie ingeven. Al deze gegevens zullen, indien de Autofill-optie geactiveerd is, automatisch ingevuld worden in het hoofdscherm. Daarnaast zijn er nog de server gerelateerde instellingen die men binnen een zelfde omgeving niet zal aanpassen. De IDToken s (gebruikt op de server als veldnamen voor gebruikersnaam en wachtwoord), de Fields (veldnamen van andere elementen die uitgelezen en meegezonden dienen te worden). Voor OAuth zijn er de Consent Fields, dit zijn de veldnamen aanwezig op de consentpagina, en de Consentnaam en de waarde (de optie waarmee men aangeeft al dan niet akkoord te gaan met de autorisatie). Bij gebruikersnaam en wachtwoord dient men aan te geven welke pagina men zal bekomen na het inloggen. Figuur 2.19: Settings-venster

HOOFDSTUK 2. BESPREKING 34 2.3.2 Data logging Het bijhouden en weergeven van data was een essentieel deel in deze applicatie. Hoe kan een gebruiker conclusies trekken, zonder een duidelijk overzicht te krijgen? We wilden een standaard maken voor de applicatie, die natuurlijk ook op andere manieren bruikbaar is, en die verstaanbaar zou zijn voor verschillende gebruikers. We hebben als oplossing voor dit probleem gekozen voor het aanmaken van log files. Deze zijn opgebouwd in het JSON formaat aangezien wij met Logstash, Elasticsearch en Kibana willen werken, en dat in dit geval het meest compatibel is. Door gebruik te maken van log4j was dit snel te implementeren. Door per module een andere properties file voor de logger te implementeren, kunnen we verschillende directory s aanmaken. Wanneer we beginnen aan een authenticatie, wordt de juiste properties file aan de logger toegewezen. Dit gebeurt met de volgende lijn code (voor Gebruikersnaam/Wachtwoord): Listing 2.2: PropertyConfigurator: Aanpassen PropertyConfigurator P r o p e r t y C o n f i g u r a t o r. c o n f i g u r e ( A u t h e n t i c a t e. c l a s s. getresourceasstream ( / l o g i n / g u i / r e s o u r c e s / l o g g e r s / u s e r p a s s. p r o p e r t i e s ) ) ; Er zijn nog overige files aanwezig met properties voor eid, OAuth en SAML. De message bevat de tijd in millis, nodig om de volledige thread af te ronden. De level field is de indicator of de authenticatie succesvol of onsuccesvol is verlopen. Hieronder een voorbeeld van een log: { } Listing 2.3: PropertyConfigurator: Aanpassen PropertyConfigurator @message : 2474, @timestamp : 2015 05 20T15 : 0 7 : 1 4. 2 8 7 + 0 2 : 0 0, @ s o u r c e h o s t : LaptopTom, @ f i e l d s : { f i l e : A u t h e n t i c a t e. j a v a, method : s t a r t, l e v e l : DEBUG, l i n e n u m b e r : 70, c l a s s : l o g i n. A u t h e n t i c a t e, mdc : {} }

HOOFDSTUK 2. BESPREKING 35 De volgende levels zijn mogelijk in de log files en hebben een specifieke betekenis: ˆ INFO Authenticatie succesvol afgerond en sessie beëindigd ˆ DEBUG Authenticatie geslaagd maar sessie niet beëindigd ˆ WARN Authenticatie mislukt Per keer dat er een authenticatie uitgevoerd wordt, zal de log file leeg gemaakt worden en het aantal threads weggeschreven worden naar die file. Als er bijvoorbeeld 5 threads gestart worden, zullen er 5 entry s aanwezig zijn in de log file. Starten we erna echter 2, dan wordt de log file leeggemaakt en opgevuld met 2 entry s. Om een duidelijk overzicht te laten maken kwam onze stagementor met het idee om Kibana te gebruiken. Kibana maakt real time data analyse mogelijk. Door gebruik te maken van een zogenaamde ELK stack, is het mogelijk om in realtime data van onze applicatie weer te geven in Kibana. Deze stack is opgebouwd uit Elasticsearch, Logstash en Kibana. ˆ Logstash Systeem voor log verzameling, verwerking en opslag ˆ Elasticsearch Search engine met een RESTful web interface ˆ Kibana Data visualisatie werkende met Elasticsearch

HOOFDSTUK 2. BESPREKING 36 2.3.2.1 Logstash Logstash heeft de mogelijkheid om de data te verwerken die het toegestuurd kreeg. De configuratiefile ziet er als volgt uit: Input definieert waar de log files aanwezig zijn die geforward moeten worden en in welk formaat deze zijn opgeslagen. Listing 2.4: Logstash Input 1 i n p u t { 2 f i l e { 3 path => C: / U s e r s /Tom/Documents/Stage RUN/SAML/ t i m e l o g. l o g 4 codec => j s o n 5 type => SAML 6 } 7 f i l e { 8 path => C: / U s e r s /Tom/Documents/Stage RUN/ eid / t i m e l o g. l o g 9 codec => j s o n 10 type => eid 11 } 12 f i l e { 13 path => C: / U s e r s /Tom/Documents/Stage RUN/OAuth/ t i m e l o g. l o g 14 codec => j s o n 15 type => OAuth 16 } 17 f i l e { 18 path => C: \ U s e r s \Tom\Documents\Stage RUN\ u s e r p a s s / t i m e l o g. l o g 19 codec => j s o n 20 type => Gebruikersnaam en Paswoord 21 } 22 } Zoals te zien is in het voorbeeld van een log, is message gedefinieerd als een string. Dit moeten we omvormen naar een integer om bewerkingen hierop door Kibana mogelijk te maken. Dit doen we met de mutate functie die aanwezig is in logstash Listing 2.5: Logstash Filter 1 f i l t e r { 2 mutate { 3 c o n v e r t => { @message => i n t e g e r } 4 } 5 }

HOOFDSTUK 2. BESPREKING 37 Definiëren waar de data naartoe moet bij het definiëren van Elasticsearch, zal default waarden gebruiken. output { e l a s t i c s e a r c h { h o s t => l o c a l h o s t } } Listing 2.6: Logstash Output 2.3.2.2 Elasticsearch Deze hebben we in standaard configuratie laten staan. Wanneer er van ondersteunde forwarders (zoals logstash) data aangeboden wordt, zal Elasticsearch automatisch met een template indexes aanmaken. Zoeken gebeurt door een lijst van indexes af te gaan, die verwijzen naar de juiste gegevens. Na het downloaden van Elasticsearch volstaat het om de bat file te runnen van commandline: start elasticsearch.bat 2.3.2.3 Kibana Als laatste starten we de bat file van Kibana: start kibana.bat. Normaal zouden in de webinterface van Kibana nu de log files moeten verschijnen.

HOOFDSTUK 2. BESPREKING 38 Figuur 2.20: Kibana Als we dan valideren dat het message field een integer aanduiding heeft, kunnen we beginnen met het maken van de visuele weergave. De gemakkelijke UI maakt het mogelijk snel blokken te maken die implementeerbaar zijn op een dashboard. Door onder Visualize te werken met de juiste filters, is het mogelijk om te filteren op een specifiek type pakketten. Wij filteren bijvoorbeeld op authenticatie en maken dan het onderscheid tussen succes, fail en half voltooid voor elke methode. Deze slaan we op en voegen we dan toe aan het dashboard. Figuur 2.21: Methodes Aangezien het message field een integer value heeft, is het mogelijk hier berekeningen op te doen. We gebruiken de standaard AVERAGE berekening om een gemiddelde tijd per

HOOFDSTUK 2. BESPREKING 39 authenticatiemethode te berekenen. grootste gemiddelde tijd heeft. Zodoende kunnen we weergeven welke methode de Figuur 2.22: Bindings Na het combineren van een aantal grafieken krijgen we een beeld gelijkaardig aan Figuur 2.23 te zien in het live Dashboard. Wanneer we nieuwe authenticaties uitvoeren, zien we dat de grafieken zich aanpassen aan de nieuwe data. Figuur 2.23: Dashboard

HOOFDSTUK 2. BESPREKING 40 2.3.3 HTML Extractie In de applicatie is het nodig op een flexibele manier om te gaan met webpagina s en de essentie hieruit te halen. Omdat op zo goed als alle loginpagina s die we tegenkomen in form formaat zijn die via HTTP-POST verzonden zal worden, moest hiervoor een flexibele oplossing geprogrammeerd worden. De oplossing die wij hebben bedacht, is een klasse die verschillende mogelijkheden biedt. De volgende parameters moeten worden meegegeven: ˆ Parameters die uit de form gehaald moeten worden ˆ Webpagina in string formaat ˆ URL waar de pagina vandaan komt Er zijn 2 publiek aanroepbare methoden aanwezig: ˆ generateform zal alles uit de webpagina halen ˆ extractactiononly zal alleen de URL nodig voor de POST teruggeven Voor beide methoden is het nodig de volledige form uit de webpagina te filteren. Dit is altijd de eerste stap. Vanaf hier treden er variaties op. Er is geen implementatie aanwezig voor HTML script tags. Beide werken met een list met hierin alle input tags aanwezig binnenin de form. 2.3.3.1 Volledige extractie Geeft een LinkedHashmap terug. Er moet een lijst meegegeven worden met hierin de paremeters die moeten worden toegevoegd. Deze worden vergeleken met het name field van een inputtag. Als deze overeenkomen, zal deze toegevoegd worden aan een keyvalue in de LinkedHashMap. De bijhorende waarde in het value veld zal ook uit deze input gefilterd worden, en tegelijk als bijhorende value van deze key in de Hashmap opgeslagen worden. Onder de standaard key value BaseURL zal altijd de URL toegevoegd worden waarnaar de POST uitgevoerd moet worden. Hier is rekening gehouden met een aantal optredende mogelijkheden. Wanneer de POST naar hetzelfde domein gebeurt, wordt het domein niet toegevoegd. Daarom moet de URL toegevoegd worden waar de pagina vandaan komt. Automatisch zal het domein gecombineerd worden met string die erachter gezet moet worden. Wanneer de POST naar dezelfde URL gebeurt als waar de pagina van geladen is, zal deze value leeg gelaten worden. Dan moet de BaseURL value ingeladen worden met de URL waar de pagina vandaan komt. Als de POST naar een ander domein gebeurt, zal de URL die hierin staat al volledig in orde zijn en moet deze gewoon in de BaseURL value geladen worden.

HOOFDSTUK 2. BESPREKING 41 De methode geeft dan een LinkedHashmap terug met alle parameters en value s. 2.3.3.2 Action extractie Zal uit de FORM alleen filteren op de method=post en de bijhorende URL bij de action tag. Bij het extracten van de URL wordt er alsook rekening gehouden met de verschillende mogelijkheden en is het dus nodig een begin URL mee te geven waarmee deze opgebouwd kan worden. Wanneer de POST naar hetzelfde domein gebeurt, wordt het domein niet toegevoegd. Daarom moet de URL toegevoegd worden waar de pagina vandaan komt. Automatisch zal het domein gecombineerd worden met string die erachter gezet moet worden. Wanneer de POST naar dezelfde URL gebeurt als waar de pagina van geladen is, zal deze value leeg gelaten worden. Dan moet de BaseURL value ingeladen worden met de URL waar de pagina vandaan komt. Als de POST naar een ander domein gebeurt, zal de URL die hierin staat al volledig in orde zijn en moet deze gewoon in de BaseURL value geladen worden. De methode geeft dan een String terug met hierin de opgebouwde URL.

HOOFDSTUK 2. BESPREKING 42 2.3.4 Gebruikersnaam en wachtwoord Deze module is specifiek geschreven om door het posten van login credentials een sessie op te zetten met een server. De data die aan deze module moeten worden meegegeven bestaat uit het volgende: ˆ IDTokens: wat is de benaming van het veld, op de HTML pagina, voor gebruikersnaam en passwoord ˆ Credentials: De werkelijke logincredentials ˆ URL van de loginpagina ˆ URL waar we na de login terecht komen ˆ URL van de logoutpagina ˆ FORM parameters: welke overige parameters die ook nog op de pagina aanwezig kunnen zijn 2.3.4.1 Login De flow is als volgt: 1. HTTP GET Verkrijg de initieel opgevraagde webpagina 2. Verwerking Form voor POST genereren aan de hand van de webpagina 3. HTTP POST POST data naar de action URL op de initiële webpagina 4. Volg redirect Hierna volgen we de redirects naar een finalepagina 5. Controle Controle met finale URL Na het starten van deze module zal er een HTTP GET uitgevoerd worden op de URL van de loginpagina. Deze webpagina zal worden verwerkt door de formextraction klasse. De FormExtraction klasse heeft de mogelijkheid om van een webpagina, waarop een action POST aanwezig is, automatische de data te verzamelen die nodig is. Hier hebben we het over de volgende gegevens: de data die in de form aanwezig moet zijn en de URL waarnaar de POST uitgevoerd moet worden. Alle inputs binnen een form element worden in een LinkedHashmap geplaatst. Het key element is altijd de name en de value in het value veld bij deze Key. Listing 2.7: Gebruikersnaam & Wachtwoord: Form voorbeeld <input c l a s s= t e x t b o x type= password name= IDToken2 i d= IDToken2 value= > <input type= hidden name= goto value= > Zo kan er later over de LinkedHashmap gegaan worden en de key en value elementen in een form opmaak geplaatst worden. Het object van de formextraction klasse zal de webpagina na de initiële GET verwerken. Hierna zal de data die geëxtract is uit de pagina doorgegeven worden aan het POST object. Deze zal de data voor de form opbouwen en encoderen in een UTF-8 formaat. Dit door middel van een foreach over de meegegeven LinkedHashmap. Wat we uiteindelijk bekomen, is een String met hierin de volledige form. Deze is nu klaar om verzonden

HOOFDSTUK 2. BESPREKING 43 te worden. Na het verzenden van de POST en het volgen van de redirect, zal er als check het volgende gebeuren: als de URL waar we terecht moeten komen overeenkomt met de finale redirect URL, dan is de authenticatie geslaagd. 2.3.4.2 Logout De flow is als volgt: 1. Controle login Controle of de sessie nog lopende is 2. HTTP GET De logout procedure starten door de logout URL op te vragen 3. Controle controleren of sessie bij cookies verwijderd is Door een GET uit te voeren naar de logout pagina en de redirects te volgen zal de sessie uit de cookie store verwijderd worden. Allereerst zal deze methode controleren of de sessie nog werkende is en of de client nog steeds aangemeld is op de server. Hierna kan men beginnen aan de werkelijke logout. Op voorhand slaan we de cookies op. We voeren een GET uit op de logout pagina en volgen alle redirects. Als controle vergelijken we op de cookies. Indien de sessie verwijderd is uit de cookies, is het logout proces geslaagd.

HOOFDSTUK 2. BESPREKING 44 2.3.5 SAML 2.0 De SAML module bestaat uit een login en logout gedeelte. De SAML authenticatie heeft een aantal specifieke variabelen nodig: Toevoegen van de bindings voor de login en logout bij het aanmaken van het object is verplicht. De IDTokens zijn optioneel: wanneer deze niet werden toegevoegd, worden IDToken1 en IDToken2 als standaard gebruikt. Op Framework niveau is het gebruiken van de logout optioneel. Zo is het mogelijk om ook te testen met een groot aantal openstaande sessies op serverniveau. 2.3.5.1 Login Na het uitvoeren van de initiële GET, worden de ingestelde bindings aan de URL toegevoegd. Deze beïnvloeden de manier waarop de SAML assertions tussen de SP en IdP worden doorgegeven. Als DEFAULT geselecteerd is voor de request en/of response, zal er aan de URL niets toegevoegd worden. Per methode is er ook toegevoegd welke string er specifiek toegevoegd zal worden. Mogelijke instellingen voor de Operation Request Binding: ˆ POST zal de SAML request alleen doorgeven via POST van de SP naar de IdP &reqbinding=urn:oasis:names:tc:saml:2.0:bindings:http-post ˆ REDIRECT alleen via redirect &reqbinding=urn:oasis:names:tc:saml:2.0:bindings:http-redirect ˆ DEFAULT automatisch de standaard detecteren en uitvoeren Instellingen voor de Response Binding: ˆ POST SAML response alleen doorgeven via POST &binding=http-post ˆ ATIFACT verwijzing naar SAML artifact, de eigenlijke response zal via SOAP worden doorgeven van server naar server &binding=http-artifact ˆ DEFAULT automatisch de standaard detecteren en uitvoeren Na de GET Request op de URL met de juiste bindings, krijgt men de login pagina. Hier zal er automatisch een login gepost worden en verder gegaan worden met de geselecteerde Response afhandeling. De afhandeling van de 2 POSTs voor Operation en Response is hetzelfde. Opvangen van de webpagina, POST gegevens eruit filteren en data posten naar de juiste URL. Ditzelfde principe wordt ook toegepast bij het posten van de logingegevens. Als check wordt er op de initieel gegeven URL gecontroleerd of deze met de bestaande cookies in de cookiemanager nog een redirect naar een andere pagina uitvoert. Is dit niet het geval, dan is de authenticatie succesvol.

HOOFDSTUK 2. BESPREKING 45 2.3.5.2 Logout Aan de logout methode moet nog de url van de logout pagina gegeven worden. Eerst test deze of de login geslaagd was, zo niet zal er een error optreden en de logout automatisch falen. Leiden de cookies die aanwezig zijn in de cookiemanager tot een succesvolle login, dan kan de logout starten. Na het uitvoeren van een GET Request op de logout pagina, extracten we hier de redirect URL waar we de binding opties aan kunnen toevoegen. Deze bindings komen bij de SPSLOInit module van OpenAM terecht en zal de juiste afhandeling in gang zetten. Instellingen voor de binding: ˆ REDIRECT request doorgeven via redirect in url &binding=urn:oasis:names:tc:saml:2.0:bindings:http-redirect ˆ POST request doorgeven via POST &binding=urn:oasis:names:tc:saml:2.0:bindings:http-post ˆ SOAP request doorgeven van server naar server, geen SAML assertions via client &binding=urn:oasis:names:tc:saml:2.0:bindings:soap De POST methode gebeurt op dezelfde manier als het opvangen van voorgaande webpagina: data eruithalen en posten naar de juiste url. Voor de overige 2: REDIRECT en SOAP, die beide met redirect werken, hebben we de volgende methode uitgewerkt. HttpURLConnect heeft wel de mogelijkheid om de standaard redirects te volgen. Dit is echter gedeeltelijk uitgeschakeld. Door de redirect niet te volgen en de url uit de location header te halen van de response, kunnen we detecteren welke authenticatie er nu gebruikt wordt.

HOOFDSTUK 2. BESPREKING 46 2.3.6 OAuth 2.0 De flow die bij het praktisch uitvoeren van OAuth terug te vinden is als volgt: 1. HTTP GET Verkrijg de initieel opgevraagde webpagina 2. Redirect Geen toegang: redirecten naar Authorization Server 3. HTTP GET Ophalen van de login pagine 4. Verwerking Form voor POST genereren aan de hand van de webpagina 5. HTTP POST Post data naar de action URL op de webpagina 6. Volg redirect 7. HTTP GET Consent pagina: goedkeuring vragen voor de gegevens die worden doorgegeven tussen Client en Resource Server 8. HTTP POST Consent verwerken en Authorization Code uitdelen. 9. Redirect met Authorization Code 10. Toegang tot resource. Voordat men deze module kan starten, moeten er een aantal parameters meegegeven worden ˆ URL van protected resource ˆ Extra parameters die aanwezig zijn op de loginpagina ˆ Naam van de loginvelden op loginpagina ˆ Parameters op de goedkeuringspagina ˆ Overschrijven van een parameter op toestemmingspagina is mogelijk Bij het starten van de module wordt er initieel een GET naar de gebruikte start URL gedaan. De response webpagina zal in string formaat worden doorgegeven. Deze webpagina zal worden verwerkt door de formextraction klasse. De FormExtraction klasse heeft de mogelijkheid om van een webpagina waarop een action POST aanwezig is, automatisch de data te verzamelen die nodig is. Hier hebben we het over de volgende gegevens: de data die in de form aanwezig moet zijn en de URL waarnaar de POST uitgevoerd moet worden. Alle inputs binnen een form element worden in een LinkedHashmap geplaatst. Het key element is altijd de naam en de value zal het value veld bij deze Key zijn. De applicatie verwacht een loginpagina die de user credentials zal posten. We extracten uit de pagina alle inputs die vereist zijn voor de POST. Ook de hidden inputs worden toegevoegd, deze elementen moeten op voorhand meegegeven worden door de gebruiker, anders zal de applicatie deze niet overnemen.

HOOFDSTUK 2. BESPREKING 47 Na het extracten van de inputs die nodig zijn voor de POST, zullen deze in het juiste form formaat gezet worden en met een POST naar de action URL gestuurd worden. Het grote verschil met SAML is dat er nu een toestemmingspagina getoond wordt. Deze kunnen we ook door de formextracter laten afhandelen. Aangezien hier een aantal inputs op de webpagina aanwezig zijn die gepost moeten worden. Hieronder ziet men een voorbeeld van onze toestemmingspagina in de testopstelling voor OAuth. Figuur 2.24: Toestemmingspagina Op deze voorbeeldpagina zijn er nog een aantal verborgen parameters die mee gepost worden. Na het extracten van de action URL en de parameters met hun waarden kunnen we verder gaan. We posten de data naar de meegegeven URL en volgen hierna de redirects tot een finalepagina. Na een controle of de pagina waar we terechtkomen overeenkomt met de initieel opgevraagde resource, bevestigt de module naar buitenaf dat de authenticatie geslaagd is.

HOOFDSTUK 2. BESPREKING 48 2.3.7 eid HttpsUrlConnection laat toe een SSLSocketFactory in te stellen. Als deze correct gemaakt is, zal de manier van posten en getten zoals bij HttpUrlConnection grotendeels hetzelfde blijven. Listing 2.8: eid: Truststore in Java 35 // I n s t e l l e n TrustManager 36 TrustManagerFactory tmf = TrustManagerFactory. g e t I n s t a n c e ( SunX509 ) ; 37 KeyStore t r u s t k s = KeyStore. g e t I n s t a n c e ( JKS ) ; 38 39 F i l e t r u s t c e r t = new F i l e ( t r u s t d i r ) ; 40 InputStream t r u s t s t r e a m = new F i l e I n p u t S t r e a m ( t r u s t c e r t ) ; 41 t r u s t k s. l o a d ( t r u s t s t r e a m, t r u s t p a s s. tochararray ( ) ) ; 42 t r u s t s t r e a m. c l o s e ( ) ; 43 tmf. i n i t ( t r u s t k s ) ; 44 System. out. p r i n t l n ( T r u s t S t o r e added ) ; We maken allereerst de objecten van de klasse TrustManagerFactory en keystore met de juiste instanties. Voor tmf nemen we de SunX509 omdat de encoding in x509 is. Voor trustks de JKS (Java KeyStore), door gebruik te maken van de keytool van Java, is deze automatisch in JKS formaat. We laden het certificaat in een File trustcert, waarna we deze via een FileInputStream laden naar stream. Hierna roepen we de load methode aan op het keystore object en geven we stream en het wachtwoord in chararray mee. Initiëren van de TrustManagerFactory met het keystore object en het wachtwoord opnieuw in chararray. Hiermee is de TrustManager volledig ingesteld. Listing 2.9: eid: Keystore in Java 47 S e c u r i t y. a d d P r o v i d e r (new BeIDProvider ( ) ) ; 48 49 SSLContext s s l C o n t e x t = SSLContext. g e t I n s t a n c e ( SSL ) ; 50 51 KeyManagerFactory keymanagerfactory = KeyManagerFactory 52. g e t I n s t a n c e ( BeID ) ; 53 54 BeIDManagerFactoryParameters spec = new BeIDManagerFactoryParameters ( ) ; 55 spec. s e t A u t o R e c o v e r y ( true ) ; 56 spec. s e t C a r d R e a d e r S t i c k i n e s s ( true ) ; 57 keymanagerfactory. i n i t ( spec ) ; 58 SecureRandom random = SecureRandom. g e t I n s t a n c e ( BeID ) ; We wijzen de BeIDProvider aan als bron van de Keystore. Listing 2.10: eid: SLL Socket in Java 60 // v o l g e n d e commando z a l de eid aanroepen 61 s s l C o n t e x t. i n i t ( keymanagerfactory. getkeymanagers ( ), 62 tmf. gettrustmanagers ( ), random ) ;

HOOFDSTUK 2. BESPREKING 49 63 64 SSLSocketFactory s s l S o c k e t F a c t o r y = s s l C o n t e x t. g e t S o c k e t F a c t o r y ( ) ; 65 66 System. out. p r i n t l n ( s s l S o c k e t F a c t o r y. t o S t r i n g ( ) ) ; 67 68 con. s e t S S L S o c k e t F a c t o r y ( s s l S o c k e t F a c t o r y ) ; Opzetten van een SSL Socket met de Keystore (met het certificaat van de eid) en de TrustStore. Op het moment dat de SSL Socket een connectie maakt, zal er gevraagd worden naar de pincode van de kaart. Wat dan nog over blijft, is het instellen van het SSLSocketFactory bij de HttpsUrlConnection. Hierna kunnen we de standaard werking, zoals bij een niet SSL encrypted URL connectie, toepassen.

Hoofdstuk3 Resultaten 3.1 Doelstellingen 3.1.1 Basisdoelstellingen ˆ Schrijven Framework in Java ˆ Uitvoeren authenticatie/autorisatie ˆ Meerdere Authenticatie/autorisatie mechanismen ˆ Testomgeving opzetten ˆ Feedback user 3.1.2 Extra Doelstellingen Aangezien de basisfunctionaliteiten vrij snel in een werkend stadium waren, zijn er nog een extra aantal doelstellingen toegevoegd. Deze moesten een diepere studie aangaande de federated authenticatie mechanisme mogelijk maken. En zorgen voor extra gebruikersgemak. ˆ SAML Bindings ˆ Userinterface ˆ SAML SLO ˆ OAuth met Bearer/SAML token 3.2 Behaalde resultaten Er word voorgesteld dat we het framework in Java zouden schrijven. Dit omwille van de mogelijkheid om deze ook op servers te kunnen runnen. De aanvang van het project ging 50

HOOFDSTUK 3. RESULTATEN 51 aanvankelijk iets moeizamer, omdat we nog in deze omgeving thuis moesten geraken. Java en C# zijn vergelijkbaar op vlak van opbouw en verschillen alleen maar in de kleine details. Maar om de werking met Maven en Sonar in orde te krijgen was er wel wat tweaks nodig. Ook het opzetten van de testomgeving was voor ons een hele uitdaging. Onze kennis over het werken in Linux was redelijk beperkt en hebben we met vallen en opstaan vergroot. Van OpenAM hadden wij ook nog nooit gehoord. Met veel hulp van de documentatie van Forgerock en veel trial & error hebben we dit wel voltooid. Met behulp van OpenAM hebben we SAML 2.0, OAuth 2.0 en gebruikersnaam & wachtwoord kunnen implementeren. Het opzetten van 2 way SSL authenticatie heeft ons ook wel wat tijd gekost. Hier hebben we geen gebruik gemaakt van OpenAM, maar van de standaard SSL mogelijkheid in Apache Tomcat. Even een opsomming van de behaalde delen ˆ Mogelijk een authenticatie/autorisatie uit te voeren SAML 2.0 OAuth 2.0 Gebruikersnaam & wachtwoord eid ˆ Multithreading met offset ˆ Flow voor authenticatie POST is aanpasbaar door gebruiker ˆ Gebruik van logging in JSON voor flexibiliteit ˆ Weergave van data in overzichtelijke manier in ELK stack 3.2.1 Problemen en oplossingen Het grootste probleem was het tekort aan kennis en de nood om onszelf bij te scholen. Ook onderliggende kennis over compatibiliteit tussen verschillende versies van software die onderling moeten samenwerken, heeft ons meerdere malen problemen opgeleverd. OAuth wilde niet werken. Dit kwam door een misconfiguratie en had een herinstallatie nodig van de OAuth instantie. 3.2.2 Niet behaalde doelstellingen Het beëindigen van een sessie in OAuth hebben we niet tijdig kunnen implementeren. Mede door een gebrekkige documentatie over dit onderwerp door Forgerock. 3.2.3 SAML studie Omdat we een diepere studie hebben uitgevoerd van SAML 2.0, kunnen we een aantal conclusies trekken. Dit aangaande de snelheid van authenticatie met invloed van de gebruikte bindings.

HOOFDSTUK 3. RESULTATEN 52 In onze testopstelling is het gebruik maken van een ARTIFACT-POST het traagste. Dit was onverwacht en is te wijten aan een trage afhandeling tussen de servers bij het afhandelen van het Artifact. Hierop volgt de verwachte traagste POST-POST, aangezien hier een groter aantal stappen gebeuren. Figuur 3.1: SP-Initiated SSO: POST/POST

Hoofdstuk4 Besluit De kennis die wij hebben vergaard, over onder andere het programmeren in Java en het werken in een server Linux omgeving, is groot. Mede door het constant bijleren in de Java omgeving, was het nodig de code dagelijks te vernieuwen en te herschrijven naar nieuw ontdekte methodes. Ook alles wat erbij komt kijken, om een veilige manier van authenticatie op te zetten en dit stap voor stap te doorlopen, was zeer boeiend en leerrijk. We zijn zeer tevreden met het behaalde resultaat, toch is er steeds ruimte voor verbetering. Vooral bij OAuth missen we nog enkele functies: ˆ implementeren van zowel Bearer- als SAML tokens ˆ intrekken en vernieuwen van tokens ˆ logout proces Ook is het niet mogelijk om meerdere eid-authenticaties in threading uit te voeren, dit door de uitwerking binnen de libraries van Fedict. Al bij al denken we dat deze applicatie een meerwaarde kan betekenen bij het testen van verschillende authenticatiemethodes. Ook is het door de uitbreidingen toegevoegd aan SAML, mogelijk om hiervan een diepgaande studie uit te voeren en hiermee een duidelijke beslissing te kunnen maken, gestaafd met de vergaarde data. 53

BijlageA Handleiding Deze handleiding zal u bekend maken met het Federated Authentication Benchmarking Framework programma. U hebt een omgeving waar een authenticatie in gebruikt wordt. Dit framework is specifieker toegericht op federated authenticaties. Maar ook Single Sign on door een POST naar een webpagina is mogelijk. Ook is er een implementatie van eid voorzien. Door de simulatie van wat op applicatie/browser niveau gebeurd zijn de verkregen waarden vergelijkbaar. De verzameling van gegevens maakt het ook direct mogelijk de performantie van een opstelling te kunnen bepalen onder een specifieke load. Wij hopen dat u door deze tool te gebruiken een betere omgeving kan opzetten! Opstarten De applicatie is in opgebouwd in Java. Het installeren van de laatste Java versie op de computer is verreist. Het opstarten van de jar in een directory waar de gebruiker schrijfrechten op heeft is ook een vereiste. Het programma maakt een aantal file s aan en zal zonder rechten niet kunnen werken. Indien er geen schrijfrechten zijn op de locatie, zal het programma een foutmelding geven met uitleg. 54

BIJLAGE A. HANDLEIDING 55 Hoofdscherm Na opstart ziet u het venster waar de meest voorkomende aanpassingen in voorkomen. Specifiek aan de te gebruiken authenticatiemethode zullen verschillende vakken beschikbaar of niet beschikbaar worden. De belangrijkste instellingen zijn die bij Login, deze zijn afhankelijk van de gekozen methode. Onder Method kan je kiezen voor OAuth, SAML, User/Pass en eid. Bij Login dien je een URL in te geven, een Username. Voor eid dien je ook te beschikken over een eid lezer. Bij Advanced kunnen we het aantal Threads instellen en activeren, dit zorgt ervoor dat er meerdere simultane sessies gestart kunnen worden. Die Threads kunnen ook met een tussentijd gestart worden, dit stellen we in bij Thread Offset met een tijd in milliseconden. Voor OAuth, SAML en User/Pass kunnen we ook threads met meerdere accounts uitvoeren door Multiple Accounts te activeren. Tenslotte is het

BIJLAGE A. HANDLEIDING 56 mogelijk om de Binding (IdP naar SP) & Request Binding (SP naar IdP, geen invloed bij IdP initiated) in te stellen. Daarnaast kan je de logout instellingen instellen en aciveren. Voor User/Pass volstaat de URL, bij SAML kan je ook nog een binding aangeven. Indien alles is ingesteld, kan men doormiddel van de Start-knop de sessies starten. Bij het eerste gebruik dienen echter enkele platformspecifieke gegevens toegevoegd te worden. Dit kan bij Settings, te vinden onder Edit.

BIJLAGE A. HANDLEIDING 57 Settings Onder Settings kan men methode specifieke gegevens instellen. OAuth Voor OAuth dient men de IDTokens en de Fields in te geven die op de login pagina staat. Vervolgens kunnen we de Consent Fields en de Consent invullen; die staan op de Consent pagina. De naam waarde van Consent kunnen zelf ingegeven worden, zo kan men zowel met Allow als Deny testen. Tenslotte kan men een standaard URL en een lijst van gebruikers ingeven.

BIJLAGE A. HANDLEIDING 58 SAML Voor SAML dient men de IDTokens en de Fields in te geven die op de login pagina staat. Vervolgens kunnen we een standaard URL voor zowel login als logout invoeren en een lijst van gebruikers ingeven.

BIJLAGE A. HANDLEIDING 59 Login/Päss Voor Login/Pass dient men de IDTokens en de Fields in te geven die op de login pagina staat. Daarnaast hebben we ook de Landing URL nodig, dit is de eindpagina van het loginproces. Vervolgens kunnen we een standaard URL voor zowel login als logout invoeren en een lijst van gebruikers ingeven.

BIJLAGE A. HANDLEIDING 60 eid Voor eid zijn er geen verplichte gegevens. We kunnen een standaard URL invoeren, de Trustore Location aanwijzen en bijhorend wachtwoord invoeren.

BijlageB eid authenticatie Volledige beschrijving van het opzetten en programmeren hoe een 2 way ssl authentication te doen met eid. Dit op een apache tomcat server. Instellen en opzetten SSL/TLS Om een TLS/SSL 2 way authenticatie op te zetten tussen een Java client en een server, hebben we het volgende nodig: op clientside en op serverside een truststore en een keystore. Aanmaken certificaten Na uitzoeken en testen blijkt het niet mogelijk om een self signed certificaat te gebruiken zonder de truststore op clientzijde volledig uit te schakelen. Er moet dus een chain aangemaakt worden waar de rootca het certificaat van de server gaat ondertekenen. Hiervoor maken we gebruik van het tooltje XCA. Deze maakt het overzichtelijker. Om te beginnen maken we een nieuwe xdb database aan (na starten tool) File => New Database => geef naam en passwoord. Als eerste stap maken we een 3 tal private keys aan in XCA. 61

BIJLAGE B. EID AUTHENTICATIE 62 Hierna maken we in het Certificates tabblad een nieuw self signed TestsetupCA certificaat aan. Als CN stellen we CN=TestsetupCA in en Private key gebruiken we de key die we voor de root hebben aangemaakt. Bij Template for the new certificate stellen we [default] CA in. In tab Extensions bij type Certificate Authority Controleren of de Validity tijd voldoende is. We drukken op ok en het root self signed certificate zou gegenereerd moeten worden

BIJLAGE B. EID AUTHENTICATIE 63 Hierna gaan we naar het tabblad Certificate signing requests. Allereerst zullen we een certificaat aanmaken voor de server. We klikken op New Request. Source => Template for the new certificate => HTTPS_server Subject => commonname (CN) => naam server in onze setup is dat www.testsetup.be => Private key gebruiken we de key die we voor de server hebben aangemaakt. Extensions => Type => End Entity OK Rechterklik op het aangemaakte certificaat => sign Source => Signing => Use this Certificate for signing => selecteer het certificaat dat we hebben aangemaakt hier TestsetupCA => OK Source => Template for the new certificate => HTTPS_server Dan maken we een certificaat voor de client aan. We klikken op New Request. Source => Template for the new certificate => HTTPS_client Subject => commonname (CN) => deze naam is niet belangrijk omdat men hier ClientCert gebruikt => Private key gebruiken we de key die we voor de client hebben aangemaakt.

BIJLAGE B. EID AUTHENTICATIE 64 Extensions => Type => End Entity OK Rechterklik op het aangemaakte certificaat => sign Source => Signing => Use this Certificate for signing => selecteer het certificaat dat we hebben aangemaakt hier TestsetupCA => OK De volgende stap is het exporten van de 3 certificaten die nodig zijn. Allereerst hebben we een trusted certificaat van de rootca nodig. We selecteren het rootca certificaat en drukken op Export.

BIJLAGE B. EID AUTHENTICATIE 65 We selecteren DER formaat en een directory waar we voorlopig alle certificaten gaan opslaan. Hierna Exporten we de 2 certificaten die gegenereerd zijn voor de client en server. Deze zetten we in pkcs12 formaat. Dit doen we voor beide certificaten die gesigned zijn door de rootca. We hebben nu de 3 certificaten gegenereerd die we nodig hebben voor de setup van de client en tomcat.

BIJLAGE B. EID AUTHENTICATIE 66 Toevoegen certificaten serverside Om op de Tomcat connector een SSL connectie op te zetten, moeten we hier 2 dingen in configureren. De truststore en de keystore. In de truststore komt het certificaat van de RootCA. In de keystore komt het servercertificaat getekend door de RootCA. Hieronder een voorbeeld van wat wij hebben toegevoegd aan de Server.xml van tomcat in de /conf directory. Als we naar poort 8443 surfen zal er een https connectie gestart worden. <Connector port="8443" maxthreads="150" scheme="https" secure="true" SSLEnabled="true" truststorefile="/opt/tomcat/rootcatrust.keystore" truststorepass="password" keystorefile="/opt/tomcat/serverkeystore.keystore" keystorepass="password" clientauth="true" keyalias="www.testsetup.be" sslprotocol="tls"/> Om tomcat deze.keystore files te laten ontvangen, moeten we de server p12 file toevoegen aan een keystore file en de server de der file in een andere.keystore file. Hiervoor gebruiken we het keytoolcommando met de volgende context Genereren keystore van de RootCA keytool -importcert -alias servertruststore -file /root/desktop/rootcert.der -keystore rootcatrust.keystore Genereren keystore van de Server zelf keytool -v -importkeystore -srckeystore /root/desktop/servercert.p12 -srcstoretype PKCS12 - destkeystore serverkeystore.keystore De wachtwoorden die gebruikt worden bij het genereren van de.keystore files moeten ingevuld worden in de keystorpass en truststorepass velden in de <Connector port> van Tomcat. Ook het aanpassen van de directory bij truststorefile en keystorefile, naar de locatie waar we de keystore opslaan, is nodig. We herstarten de Tomcat server. Configuratie van https op de Tomcat server is nu voltooid. Browser Test HTTPS Voor deze test hebben we gebruik gemaakt van Firefox. De workflow is als volgt. Allereerst moeten we het RootCert.der file toevoegen aan de lijst van Authorities in de browser. Hierna voegen we de ClientCert.p12 toe aan My Certificates.

BIJLAGE B. EID AUTHENTICATIE 67 We testen of we verbinding krijgen met https://www.testsetup.be:8443. Firefox zal dan vragen voor de identificatie met certificaat. Als alles goed ging, krijg je nu de Tomcat pagina te zien. Als laatste controle dat de rootca werkelijk werkt, klikken we op het slotje en zien we dat de RootCA het certificaat van de server correct ondertekend heeft. SSL/TLS is nu correct geïnstalleerd op de apache tomcat server om in de java setup te werken.