Sperimentazioni di sicurezza A.A. 2009-2010
OpenID
Speaker:
Luca Maria Aiello, PhD student
Università degli Studi di Torino, Computer Science Department
Corso Svizzera, 185 – 10149, Torino, Italy
[email protected]
Sperimentazioni di Sicurezza, A.A. 2009/2010
Cos’è OpenID?
o OpenID è un protocollo per l’autenticazione
utente basato sul principio del Single Sign On
• Progettato per essere utilizzato nell’ambito di
servizi web
• Un utente può riutilizzare la stessa identità
digitale per accedere a diversi servizi
o Ideato da Bradley Fitzpatrick (creatore di
LiveJournal) nel 2005
o Attualmente alla versione 2.0
o Sito ufficiale: http://openid.net
Sperimentazioni di Sicurezza, A.A. 2009/2010
Schema protocollare generale
o OpenID Provider (OP), Relying Party (RP), User Agent (UA)
o Passi:
• L’utente inserisce uno User-Supplied Identifier sul RP tramite lo UA.
• Normalizzazione
• youropenid.com  http://youropenid.com
• Discovery
• Association (shared secret tra OP e RP)
• RP redirige UA verso OP con una richiesta di autenticazione
• OP stabilisce se l’utente è autorizzato o meno
• OP redirige UA verso RP
• RP verifica le informazioni ottenute
Sperimentazioni di Sicurezza, A.A. 2009/2010
Architettura e protocollo
Sperimentazioni di Sicurezza, A.A. 2009/2010
Alcuni Identity Provider…
Visitare http://openiddirectory.com per un elenco esteso
Sperimentazioni di Sicurezza, A.A. 2009/2010
Come ottenere un OpenID?
Sperimentazioni di Sicurezza, A.A. 2009/2010
Creazione di un identificatore OpenID
o OpenID provider
• http://www.myopenid.com
o Seguire la procedura guidata “Sign Up For An OpenID”
• Obiettivo: ottenere un identificatore del tipo
http://vashthestampede.myopenid.com
• Possibilità di inserire informazioni aggiuntive (Cognome, Nome,
Sesso, Eta’, etc…)
• Diverse “Persona” (da utilizzare in differenti servizi)
o Una volta ottenuto un OpenID, testarlo presso un servizio abilitato
• Provate http://www.ziki.com
Sperimentazioni di Sicurezza, A.A. 2009/2010
Obiettivo del laboratorio
o Sviluppare un sito web minimale che effettui un controllo degli
accessi tramite OpenID, anziché con username e password
• Integrazione con un OpenID consumer
• Interazione con un OpenID provider
• Uso della OpenID delegation
Sperimentazioni di Sicurezza, A.A. 2009/2010
Identity provider
o La configurazione di rete del laboratorio (firewall) non consente al
sito web disponibile sulla rete locale di interagire con un OpenID
provider al di fuori della rete dipartimentale
o Installeremo un semplicissimo identity provider interno
• phpMyId, una semplice implementazione in PHP di un identity
provider
• Single-user
• Dipendenze minimali
• Nessun database
• Download: http://siege.org/projects/phpMyID (versione 0.9)
Sperimentazioni di Sicurezza, A.A. 2009/2010
Configurazione phpMyID (1)
o Potete installare localmente il provider
o Posizionare il pacchetto nella document root
o Lanciare http://sito:port/phpMyID/MyID.config.php per
controllarne l’installazione
o Scelti username e password
• echo -n 'username:realm:password' | openssl md5
o Inserire il valore ottenuto nel campo auth_password
o Configurare (opzionale) i dati sul profilo
• ‘nickname’, ‘email’,’fullname’ ,’dob’, ‘gender’, ‘postcode’,
‘country’, ‘language’, ‘timezone’;
o Configurare le eventuali features opzionali
o Per maggiori info vedere il README
Sperimentazioni di Sicurezza, A.A. 2009/2010
Configurazione phpMyID (2)
<?php
// IF YOU HAVE NOT DONE SO, PLEASE READ THE README FILE FOR DIRECTIONS!!!
/**
* phpMyID - A standalone, single user, OpenID Identity Provider
*
* @package phpMyID
* @author CJ Niemira <siege (at) siege (dot) org>
* @copyright 2006-2008
* @license http://www.gnu.org/licenses/gpl.html GNU Public License
* @url http://siege.org/projects/phpMyID
* @version 2
*/
/**
* User profile
* @name $profile
* @global array $GLOBALS['profile']
*/
$GLOBALS['profile'] = array(
# Basic Config - Required
'auth_username'
=> 'test',
'auth_password' => '37fa04faebe5249023ed1f6cc867329b',
Sperimentazioni di Sicurezza, A.A. 2009/2010
Configurazione phpMyID (3)
# Optional Config - Please see README before setting these
# 'microid'
=>
array('[email protected]', 'http://delegator.url'),
# 'pavatar'
=>
'http://your.site.com/path/pavatar.img',
# Advanced Config - Please see README before setting these
# 'allow_gmp'
=>
false,
# 'allow_test'
=>
false,
# 'auth_realm'
=>
'phpMyID',
# 'force_bigmath' =>
false,
# 'idp_url'
=>
'http://your.site.com/path/MyID.config.php',
# 'lifetime'
=>
1440,
# 'paranoid'
=>
false, # EXPERIMENTAL
# Debug Config - Please see README before setting these
# 'debug'
=>
false,
# 'logfile'
=>
'/tmp/phpMyID.debug.log',
);
Sperimentazioni di Sicurezza, A.A. 2009/2010
Configurazione phpMyID (4)
/**
* Simple Registration Extension
* @name $sreg
* @global array $GLOBALS['sreg']
*/
$GLOBALS['sreg'] = array (
# 'nickname'
=> 'Joe',
# 'email'
=> '[email protected]',
# 'fullname'
=> 'Joe Example',
# 'dob'
=> '1970-10-31',
# 'gender'
=> 'M',
# 'postcode'
=> '22000',
# 'country'
=> 'US',
# 'language'
=> 'en',
# 'timezone'
=> 'America/New_York'
);
require('MyID.php');
?>
Sperimentazioni di Sicurezza, A.A. 2009/2010
Configurazione phpMyID (5)
o Per testare la corretta configurazione
• http://yourdomain.com/path/to/MyID.config.php?openid.mode=login
o Per effettuare il log out
• http://yourdomain.com/path/to/MyID.config.php?openid.mode=logout
Sperimentazioni di Sicurezza, A.A. 2009/2010
Consumer
o Utilizzeremo PHP-OpenID
• Sviluppato da JanRain
• Può essere usato anche come provider
• Download: http://openidenabled.com/php-openid (versione
2.1.3)
o Potete utilizzare qualunque altra libreria consumer a vostro
piacimento
• Alcuni pacchetti “open”: http://wiki.openid.net/Libraries
• Esistono implementazioni in diversi linguaggi di
programmazione…
Sperimentazioni di Sicurezza, A.A. 2009/2010
Installazione e prova del consumer
o Copiare la directory consumer nel sottoalbero dei documenti
pubblici di Apache
o Copiare la directory Auth nella cartella consumer
o Accedere alla pagina Consumer/index.php
o Specificare il proprio URL nel form
Sperimentazioni di Sicurezza, A.A. 2009/2010
Delegation
o Può essere comodo rendere indipendente il proprio identificatore
dal particolare Identity provider in uso
o Si sceglie come identificatore l’URL del sito web personale
o Nella pagina dell’URL, si aggiungono le direttive openid.server e
openid.delegate
<html>
<head>
<title>Wolfwood's Blog</title>
<link rel="openid.server“ href=“http://www.myopenid.com/server”>
<link rel="openid.delegate" href=“http://wolfwood.myopenid.com”>
</head>
<body>
V: That cross is awfully heavy!
N: That's because it's filled with mercy…
</body>
</html>
Sperimentazioni di Sicurezza, A.A. 2009/2010
Consumer e provider alternativi
o Esistono altri provider scritti in PHP:
• http://wiki.openid.net/Run_your_own_identity_server
o Un altra libreria consumer è whobar, della Sxip corp.
• Pensata per sistemi Unix-Linux ma funziona anche su Windows
con qualche piccola modifica
• http://code.sxip.com/whobar/
o Potete utilizzare la combinazione di provider e consumer che
preferite
o Esistono anche pacchetti scritti in linguaggi differenti da PHP
Sperimentazioni di Sicurezza, A.A. 2009/2010
OpenID e HTTPS
o Provate a utilizzare https affinché la password inviata all’OpenID
provider sia cifrata con una chiave di sessione
• Semplice configurazione di Apache…
Sperimentazioni di Sicurezza, A.A. 2009/2010
Sperimentazioni di sicurezza A.A. 2009-2010
OpenID
Grazie per l’attenzione!
Speaker:
Luca Maria Aiello, PhD student
Università degli Studi di Torino, Computer Science Department
Corso Svizzera, 185 – 10149, Torino, Italy
[email protected]
Sperimentazioni di Sicurezza, A.A. 2009/2010
©2009 by Luca Maria Aiello. Permission to make digital or hard copies of part or all of
this material is currently granted without fee provided that copies are made only for
personal or classroom use, are not distributed for profit or commercial advantage, and
that new copies bear this notice and the full citation.
Sperimentazioni di Sicurezza, A.A. 2009/2010
Scarica

slides - Luca Maria Aiello