Shibboleth SP amb Debian Wheezy 7.1

Objectiu:

L’objectiu d’aquesta entrada és disposar d’una màquina que executi un servei web, mitjançant apache2, on protegirem un directori mitjançant autenticació shibboleth. A aquesta màquina l’anomenarem d’ara en endavant sp. Per dur a terme aquesta tasca serà necessari disposar d’un idp que s’encarregui de l’autenticació. En aquest bloc existeix un pas a pas sobre com configurar-lo aquí. Un cop assolit el nostre objectiu podem escalar aquesta configuració a tots aquells serveis web que desitgin compartir l’autenticació en l’entorn SSO.

Requeriments previs:

El sistema operatiu que utilitzarem és Debian Wheezy versió 7.1. La instal·lació del sistema operatiu no es detallarà. Existeix una guia per a Debian Lenny 5.0 en aquest bloc que es pot utilitzar sense massa complicacions, ja que el procés d’instal·lació és gairebé calcat.

L’sp l’instal·larem com a mòdul d’apache2.

A la vegada serà necessari disposar d’algun sistema de resolució de noms, ja sigui mitjançant un servidor DNS (com ara bind) o bé mitjançant l’arxiu /etc/hosts en cada màquina on treballem. Tal i com s’indica en aquesta entrada el nom de la màquina on s’allotjarà l’sp serà sp.domain.org, alhora, com s’especificava en l’entrada anterior, el nom del proveïdor d’identitat és idp.domain.org.

Instal·lació del programari bàsic:

Partirem doncs d’un Debian Wheezy 7.1 net on treballarem amb l’usuari root.

Instal·larem els següents paquets dels repositoris oficials:

$ apt-get install ntp ccze ca-certificates
$ apt-get install libapache2-mod-shib2 libapache2-mod-php5

Aquesta darrera comanda afegirà l’apache2, cas de no tenir-lo, el mòdul shib2 per a apache2 i el dimoni shibd, entre altres dependències. Opcionalment també instal·lem l’entorn php5 per afegir contingut dinàmic en la carpeta protegida.

Abans de dur a terme cap configuració aturem el servei shibd:

$ service shibd stop

Configuració de l’apache2:

En l’entrada on explicàvem com configurar l’idp, vam preparar un certificat de seguretat per a l’sp anomenat sp.domain.org.

El primer que farem, doncs, és afegir la CA que ha generat aquests certificats per tal que la màquina hi confiï. Suposem que tenim els arxius ca.crt, sp.domain.org.crt i sp.domain.org.key en la carpeta /root:

$ cd
$ mkdir /usr/share/ca-certificates/domain.org
$ cp ca.crt /usr/share/ca-certificates/domain.org
$ dpkg-reconfigure ca-certificates

Configurem els certificats per l’apache2:

$ mkdir /etc/apache2/ssl
$ cp sp.domain.org* /etc/apache2/ssl
$ chmod 0600 /etc/apache2/ssl/sp.domain.org.key

Afegim una carpeta protegida en el servidor que utilitzi autenticació Shibboleth dins del VirtualHost predeterminat i configurem els certificats que acabem de copiar:

$ pico /etc/apache2/sites-available/default-ssl
...
	<Directory /var/www/secure>
		AuthType shibboleth
		ShibRequireSession On
		require valid-user
	</Directory>
...
	SSLCertificateFile /etc/apache2/ssl/sp.domain.org.crt
	SSLCertificateKeyFile /etc/apache2/ssl/sp.domain.org.key
....
$ a2ensite default-ssl

NOTA: Com es pot veure només posem la seguretat en l’entorn SSL, la carpeta serà accessible sense autenticació pel port 80. Es deixa la resta de la configuració per a l’usuari cas de necessitar altres requeriemts.

Afegim contingut a la ubicació protegida:

$ mkdir /var/www/secure
$ echo '<? phpinfo(); ?>' > /var/www/secure/index.php

Finalment activem el mòdul per a Shibboleth i reiniciem el servei apache2:

$ a2enmod ssl
$ a2enmod shib2
$ service apache2 restart

En aquest punt l’apache està preparat, només queda configurar el dimoni shibd per tal que s’entengui amb l’idp i s’intercanviïn la metadata corresponent.

Configurar el dimoni shibd:

El primer que farem es crear un certificat autosignat per a shibd. Aquest certificat és intern al procés amb l’idp i mai es mostrarà a l’usuari final.

$ shib-keygen -f -u _shibd -h sp.domain.org -y 3 -e https://sp.domain.org/shibboleth -o /etc/shibboleth/

A l’arxiu /etc/shibboleth/shibboleth2.xml hi ha la configuració de l’sp. S’hi han de fer tres petits canvis:

$ pico /etc/shibboleth/shibboleth2.xml
...
    <ApplicationDefaults entityID="https://sp.domain.org/shibboleth" REMOTE_USER="eppn persistent-id targeted-id">
...
            <SSO entityID="https://idp.domain.org/idp/shibboleth">
              SAML2 SAML1
            </SSO>
...
        <MetadataProvider type="XML" uri="https://idp.domain.org/idp/profile/Metadata/SAML"
              backingFilePath="idp-metadata.xml" reloadInterval="7200">
        </MetadataProvider>
...

En aquest moment tot està configurat i ja podem iniciar el dimoni shibd:

$ service shibd start

Si tot ha anat correctament el registre no mostrarà cap error:

$ tail -f /var/log/shibboleth/shibd.log | ccze

Configurar l’idp per tal que accepti aquest sp com a client vàlid:

En aquest moment s’ha de tornar a la configuració de l’idp i afegir aquest sp com a client vàlid. Aquesta configuració s’ha d’afegir sota la definició de la metada del propi idp en l’apartat ‘Metadata Configuration’ de l’arxiu relying-party.xml:

$ pico $IDP_HOME/conf/relying-party.xml
...
        <metadata:MetadataProvider id="URLMD" xsi:type="metadata:FileBackedHTTPMetadataProvider"
                          metadataURL="https://sp.domain.org/Shibboleth.sso/Metadata"
                          backingFile="/opt/shibboleth-idp/metadata/sp-metadata.xml">
        </metadata:MetadataProvider>
...

Reiniciem l’idp per tal que accepti els canvis:

$ service tomcat6 restart

Accés al recurs protegit:

En aquest punt ja podem iniciar el nostre navegador i anar a l’adreça: https://sp.domain.org/secure

NOTA: Si el certificat que estem utilitzant no és verificable en el nostre navegador rebrem l’advertència corresponent. En aquest entorn de proves el podem obviar, evidentment.

Si tot ha anat bé el navegador serà dirigit a l’adreça https://idp.domain.org/idp/Authn/UserPassword on se’ns mostrarà una pàgina on ens podrem autenticar amb qualsevol dels usuaris del directori LDAP de la organització.

Un cop duta a terme la verificació del nom d’usuari i contrasenya se’ns retornarà al domini sp.domain.org i hauríem de veure la pàgina d’informació del php. Si així ho veiem aleshores el servei SSO funciona correctament.

A l’adreça https://sp.domain.org/Shibboleth.sso/Session podem veure informació sobre la nostra sessió.

Ara només quedaria la configuració tant a l’sp com a l’idp per tal que es puguin intercanviar atributs disponibles en el directori que puguin ser d’utilitat a l’aplicació web en l’sp. Això es detallarà en el següent pas a pas.

Nota sobre la metadata:

Un dels punts més importants en la configuració dels elements d’un entorn Shibboleth és la metadata que els diferents components comparteixen. Com s’ha pogut apreciar en les configuracions, tant de l’sp com de l’idp, s’ha hagut d’afegir la ruta a través de la qual es pot accedir a la metadata de cada element. La metadata que s’ha utilitzat en aquest pas a pas és la que shibboleth genera per defecte però aquesta també es pot crear manualment per tal de afegir o treure configuracions segons es requereixi. La documentació de shibboleth és força extensa, i pesada, al respecte.

Bona sort!

Documentació:

Igual que en l’entrada anterior deixo l’enllaç a la wiki de shibboleth: https://wiki.shibboleth.net/confluence/display/SHIB2/Home