Il software Shibboleth è un sistema di Single Sign On (o SSO), cioè un servizio che permette un'autenticazione centralizzata, cioè demandata a un server centrale e non alla risorsa locale cui si cerca di accedere.
Questa configurazione permette che la password venga richiesta una sola volta, anche quando si deve accedere a diverse risorse poste su server diversi, ma gestiti dallo stesso Identity Provider.
- Familiarità con il sistema operativo locale, inclusa la modalità di installazione del software (su alcuni sistemi UNIX, ciò può significare la compilazione di pacchetti dal codice sorgente o l'utilizzo del pacchetto fornito da ITS)
- Configurazione del server Web locale (Apache, IIS, ecc.)
- Conoscenza di base di SSL, incluso come generare una chiave e CSR
- Conoscenza di base dei documenti XML
Single Sign-On è composto da tre componenti:
- L'Identity Provider (IdP) è responsabile dell'autenticazione dell'utente e fornisce le informazioni sull'utente al Service Provider (SP). È la parte *server* gestita dall'organizzazione che conserva le informazioni sugli utenti. È quello gestito dall'ASIT;
- Il *fornitore di servizi* (SP) è responsabile della protezione di una risorsa online e del collegamento con l'IdP (Identity Provider) per ottenere informazioni (attributi) sull'utente che vuole autenticarsi. È la parte *client*, quella che dovrete installare e configurare. È anche l'argomento di questa guida;
- Il Discovery Service (DS) aiuta il Service Provider (SP) a scoprire il provider di identità (IdP) dell'utente. Può trovarsi ovunque sul Web e non è necessario in tutti i casi. Unipd non ne fa uso, pertanto verrà ignorato.
Il diagramma seguente mostra l'interazione tra l'utente, l'IdP, e l'SP:
In questa pagina verrà considerata la configurazione probabilmente più diffusa, che vede Apache HTTP server come server web e "Shibboleth SP" come software di Service provider.
Le istruzioni che seguono consentono di installare e configurare una versione minimale funzionante di Service Provider, collegata all'IdP di Ateneo.
Software che verrà installato
NTP
I server che eseguono Shibboleth devono avere l'ora di sistema sincronizzata per evitare errori di sfasamento dell'orologio.
Si consiglia pertanto di installare ntp o utilizzare un altro meccanismo di sincronizzazione dell'ora.
Shibboleth SP3
Le istruzioni per il download e l'installazione sono disponibili nella pagina di installazione del wiki di Shibboleth Project . Dovrai seguire le informazioni nella sezione per Native Service Provider. Segui le istruzioni specifiche per la tua piattaforma; le opzioni del sistema operativo disponibili sono Linux , Mac OSX e Windows . Quando hai finito di installare Shibboleth, avrai il demone shibd e il modulo mod_shib Apache (se usi Apache) installati nel tuo ambiente host.
(Debian, Ubuntu e derivate)
[sudo] apt install ntp apache2 shibboleth-sp-utils libapache2-mod-shib
in alternativa scaricare i file sorgenti da
https://shibboleth.net/downloads/service-provider/latest/
e procedere con l'installazione manuale.
Configurazione "passo a passo"
Riferimenti e casella di posta elettronica
Per prima cosa va definita una persona/ufficio di riferimento e va fornita una casella di posta elettronica (meglio se di gruppo) che sia sempre presidiata.
In caso di variazioni di questa email, o delle persone di riferimento, queste vanno tempestivamente comunicate all'Asit.
DNS
Scegli un nome per il tuo servizio e registralo nel DNS (di Ateneo)
EntityID
Definisci la tua EntityID. Consigliamo la forma:
URL https://$(hostname -f)/shibboleth
cioè un nome derivato dal FQDN associato al servizio che non cambierà nel tempo.
Questo attributo definisce il tuo SP
NOTA Modificare il valore di entityID invalida i metadata dell'SP, e blocca la funzionalità di SSO.
Certificato digitale
L'SP richiede un certificato digitale (diverso da quello che il server web usa per le connessioni https) che normalmente è un self signed, con tempo di scadenza di molti anni; il motivo per il quale è bene che la scadenza sia molto avanti nel tempo è che quando il certificato scade il tuo servizio non può più utilizzare il servizio di SSO, fino a quando viene installato un nuovo certificato (che deve essere comunicato anche all'IdP, dal momento che causa una variazione dei metadati dell'SP, che devono quindi essere aggiornati nell'IDP).
NOTA La scadenza del certificato crea una situazione di difficile risoluzione, perché un sito che gestiva perfettamente l'autenticazione, smette improvvisamente di funzionare, senza alcun motivo apparente, e senza nessun intervento sulla configurazione
Per crearlo si usa il comando shib-keygen
(man shib-keygen
per approfondire, in generale, le opzioni di default dovrebbero andare bene)
Il comando viene utilizzato per generare la coppia di chiavi. Per impostazione predefinita, il certificato pubblico verrà creato in /etc/shibboleth/sp-cert.pem
e la chiave privata in /etc/shibboleth/sp-key.pem
.
In opzione si possono creare due certificati diversi, uno per il 'signing' e uno per 'encryption':
sudo shib-keygen -h
$(hostname -f) -e https://$(hostname -f)/shibboleth -y 30 -n sp-signing -f
sudo shib-keygen -h $(hostname -f) -e https://$(hostname -f)/shibboleth -y 30 -n sp-encrypt -f
La proprietà e i permessi dei certificati deve essere configurata in modo che l'utente del demone shibd
possa leggerli.
In Debian: chown _shibd:_shibd sp-{key,cert}.pem ; chmod 600 sp-key.pem ; chmod 644 sp-cert.pem
Configurazione
Shibboleth2.xml
Contiene la configurazione iniziale del SP (in /etc/shibboleth/shibboleth2.xml
, se non diversamente specificato).
- Modifica l'attributo entityID che si trova nell'elemento
<ApplicationDefaults>
con uno appropriato.
<ApplicationDefaults entityID="https://$(hostname -f)/shibboleth"
REMOTE_USER="shib_maildip shib_mailstud shib_id eppn subject-id pairwise-id persistent-id"
cipherSuites="DEFAULT:!EXP:!LOW:!aNULL:!eNULL:!DES:!IDEA:!SEED:!RC4:!3DES:!kRSA:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1">
-
REMOTE_USER è la variable che viene utilizzata da Apache: dovrebbe rappresentare lo username o comunque un identificativo univoco dell'utente.
-
Stabilisci a quale IdP (produzione o test, mai entrambi!) far puntare il tuo servizio. Per farlo va modificata la proprietà
entityID
nell'elemento<SSO>
.
IdP di produzione
<SSO entityID="https://shibidp.cca.unipd.it/idp/shibboleth">
SAML2
</SSO>
oppure IdP di test
<SSO entityID="https://shibidpdev.cca.unipd.it/idp/shibboleth">
SAML2
</SSO>
Nota che questa proprietà (entityID) ha lo stesso nome di proprietà di quella menzionato sopra, ma funziona al contrario. Questa impostazione definisce l'IdP da utilizzare, mentre quella nel primo passaggio indica l'SP che stai configurando
- Collega i metadata dell'IdP utilizzando uno o più elementi
<MetadataProvider>
.
Ci sono più opzioni:
- - Ti scarichi (o ottieni in qualche modo) i metadata dell'IdP, li copi in locale in
/etc/shibboleth
(sconsigliata) - - Se il tuo server può accedere all'IdP via rete, indichi a Shibboleth come raggiungere i metadata dell'IdP:
<MetadataProvider type="XML" validate="true" url="https://shibidp.cca.unipd.it/idp/shibboleth" backingFilePath="unipd-metadata.xml" maxRefreshDelay="7200"> </MetadataProvider>
- - Se il tuo server non può raggiungere direttamente l'IdP, ma può usare un proxy, va configurato l'elemento TransportOption provider, con il nome e la porta del proxy:
<MetadataProvider type="XML" validate="true" url="https://shibidp.cca.unipd.it/idp/shibboleth" backingFilePath="unipd-metadata.xml" maxRefreshDelay="7200">
<TransportOption provider="CURL" option="10004">MIO_PROXY.unipd.it:port</TransportOption>
</MetadataProvider>
- Inserisci i certificati generati al passaggio precedente:
<CredentialResolver type="File" use="signing" key="sp-signing-key.pem" certificate="sp-signing-cert.pem"/> <CredentialResolver type="File" use="encryption" key="sp-encrypt-key.pem" certificate="sp-encrypt-cert.pem"/>
NOTA Modificare i certificati invalida i metadata dell'SP, e blocca la funzionalità di SSO.
Virtual Host
Nel caso dei virtual host, può essere comodo mantenere la stessa configurazione shibboleth di base, variando solo alcune configurazioni specifiche per ogni sito.
Per farlo si ricorre alla direttiva ApplicationOverride
<ApplicationOverride id="IDUNIVOCO" entityID="ENTITYIDUNICO"> <CredentialResolver type="File" use="signing" key="SITO-key.pem" certificate="SITO-cert.pem"/> <CredentialResolver type="File" use="encryption" key="SITO-key.pem" certificate="SITO-cert.pem"/> </ApplicationOverride>
All'interno di ApplicationOverride, si possono inserire quasi tutte le direttive che si possono inserire all'interno di shibboleth2.xml, o anche nessuna.
Configurazione di Apache
All'interno del file di configurazione del virtual host, va richiamato l'ID Univoco dell'ApplicationOverride:
<Location /secure> ........ ShibRequestSetting applicationId IDUNIVOCO
HOWTO Install and Configure a Shibboleth SP v3.x on Debian-Ubuntu Linux ........ </Location>
Shibboleth Configuration Check
Dalla CLI, eseguire il seguente comando per controllare se Shibboleth Service Provider riesce a caricare la configurazione di default senza errori: sudo shibd -t
È importante che l'ultima riga dell'output sia:overall configuration is loadable, check console for non-fatal problems
quindi riavviare il servizio:systemctl restart shibd.service
Shibboleth Quick Test
-
(Re-) Start il web server e accedi all'URL: `https://TUO_SERVIZIO_SP.unipd.it/Shibboleth.sso/Session`.
Il web server (or meglio il demone Shibboleth) dovrebbe restituire una pagina che dice: ` A valid session was not found.`
- Generatore dei propri metadata da passare all'IDP accedendo all’url (tali metadata vanno verificati):
https://TUO_SERVIZIO_SP.unipd.it/Shibboleth.sso/Metadata
- Verifica del funzionamento dell’autenticazione accedendo all’url:
https://TUO_SERVIZIO_SP.unipd.it/Shibboleth.sso/Login
- Una volta effettuata l’autenticazione verificare la creazione della sessione all’url:
https://TUO_SERVIZIO_SP.unipd.it/Shibboleth.sso/Session
controllando la presenza dei metadati richiesti all’IdP correttamente compilati. - Per chiudere la sessione utilizzare l’url:
https://TUO_SERVIZIO_SP.unipd.it/Shibboleth.sso/Logout
Shibboleth Secure Folder Test
Test di una cartella protetta da shibboleth nel web server
- Creare la cartella `/secure` dentro `/var/www/html`
- Definire in apache l'accesso per la cartella `/secure`:
<Location /secure> Authtype shibboleth ShibRequireSession On require valid-user </Location>
- Verificare che per accedere all’url `https://TUO_SERVIZIO_SP.unipd.it/secure` venga richiesta l’autenticazione Shibboleth
Importante
Controllare SEMPRE i metadata prima di inviarli
I metadata generati sono un ottimo punto di partenza e spesso non richiedono modifiche manuali; tuttavia controllare:
- che l'entityID del servizio corrisponda a quanto definito
- che sia presente l'elemento <KeyDescriptor use="encryption"> oppure l'elemento <KeyDescriptor> privo dell'attributo "use"
Verificare la propria installazione
Verificare che la configurazione del servizio sia utilizzabile, tramite ad esempio il servizio https://samltest.id/; se non funziona, non funzionerà nemmeno la registrazione presso l'Identity Provider di Ateneo
Guida a samltest.id
A questo link trovate una breve guida all'uso di samltest.id per controllare la propria configurazione.
Single Logout
Il "Single LogOut" riguarda la "disconnessione" dal servizio di SSO; ciò significa che questo logout ha effetto su TUTTI i servizi sotto Single Sign On di Ateneo a cui sei collegato. Un esempio: sei collegato al sito di helpdesk e a quello di webmail (con autenticazione SSO). Se effettui il logout dal servizio di helpdesk, vieni "scollegato" anche da quello di webmail; il logout locale, invece, riguarda il solo servizio sul quale effettui il logout.
Il logout globale, o "Single LogOut" è stato ufficialmente implementato su Shibboleth solo di recente, ma noi abbiamo costruito una nostra implementazione, le informazioni sono qui sotto:
Supponendo che:
- il tuo SP abbia indirizzo: https://tuosp.dip.unipd.it
- l'IDP abbia indirizzo: https://shibidp.cca.unipd.it
- la pagina a cui vuoi spedire l'utente dopo il logout ha indirizzo: https://tuosp.dip.unipd.it/logout.php
il link per il single logout è il seguente:
https://shibidp.cca.unipd.it/ssologout/logout.jsp?returl=https://tuosp.dip.unipd.it/Shibboleth.sso/Logout?return%3Dhttps%3A%2F%2Ftuosp.dip.unipd.it%2Flogout.php
Si nota che nell'ultima parte si utilizzano caratteri quali %3D, %3A, ecc.ecc.: si tratta della versione "URL encoded" dei caratteri che normalmente compongono l'URL (%3A è ":", %2F è "/").
https://shibidp.cca.unipd.it/
returl=https://tuosp.dip.
return%3Dhttps%3A%2F%2Ftuosp.
Nota: Dal punto di vista SAML l'importante e' rimuovere i cookie dell'IDP e dell'SP.
Richiesta di integrazione nell’IDP di Ateneo
Una volta completati gli step precedenti, va inoltrata una richiesta per il collegamento del proprio SP all’IDP di Ateneo.
Per prima cosa va aperto un ticket nell’Helpdesk di Ateneo, nella coda: AREA SERVIZI INFORMATICI E TELEMATICI - ASIT::UFFICIO INFRASTRUTTURA SISTEMI E TELECOMUNICAZIONI::_Single Sign On
.
A seguito della richiesta verrà inviato un link con un codice personalizzato “usa e getta”, che rimanda a un modulo che va compilato con alcune informazioni di base:
- Breve descrizione della finalità servizio;
- Email dei riferimenti tecnici e amministrativi per il Service Provider;
- L’entityID dell’SP. Deve essere lo stesso presente nei metadata;
- Una copia dei metadata;
- L’ambiente in cui si vuole inserire l’SP (può essere Produzione o Test);
- L’elenco degli attributi che si vuole ricevere dall’IDP.
Una volta compilato e inviato il modulo si verrà informati, via ticket, dell’avvenuta integrazione.
Per richieste di supporto è attiva la casella di posta helpdesk.sso@unipd.it
Informazioni in breve
url metadata ed entityID IDP produzione: https://shibidp.cca.unipd.it/idp/shibboleth
url metadata ed entityID IDP test: https://shibidpdev.cca.unipd.it/idp/shibboleth
Scope: @unipd.it
Federazioni di appartenenza: IDEM, eduGain
Link utili
- Sito ufficiale (documentazione e download): https://shibboleth.net/
- Guida GARR all'installazione e configurazione di un SP 3.x in ambiente Debian/Ubuntu: HOWTO Install and Configure a Shibboleth SP v3.x on Debian-Ubuntu Linux
- Wiki di Shibboleth: https://wiki.shibboleth.net
- Demo Shibboleth: https://www.switch.ch/aai/demo/
- Mailing list: https://shibboleth.net/community/lists.html
- Service Provider di test: https://shibsp.cca.unipd.it/secure/attributi.cgi
- Concetti di base: https://wiki.shibboleth.net/confluence/display/CONCEPT
- Test della propria configurazione: https://samltest.id/
Link utili nel service provider | |
Link | Significato |
https://tuoserver/Shibboleth.sso/Login | Effettua il login con Single Sign On |
https://tuoserver/Shibboleth.sso/Logout | Effettua il logout locale |
https://tuoserver/Shibboleth.sso/Session | Visualizza informazioni sulla sessione SSO attiva |
https://tuoserver/Shibboleth.sso/Metadata | Visualizza i metadata del service provider |