Instalación ShibbolethSP

En esta guia se describe la instalación de Shibboleth SP en un equipo con Debian8 y Apache 2.4. La instalación se realizó en el host sp1.seciu.edu.uy, se debe ajustar el nombre al que corresponda.

1. Agregar repositorio

La version de Shibboleth SP disponible en los repositorios de debian es bastante obsoleta. El repositorio de SWITCH tiene una version mas actualizada.

apt-get install curl
curl -k -O http://pkg.switch.ch/switchaai/SWITCHaai-swdistrib.asc
apt-key add SWITCHaai-swdistrib.asc
apt-get install shibboleth

2. Habilitar un Virtual Host con HTTPS

En forma obligatoria un SP debe ejecutar con HTTPS. Si no se tiene hablitado se puede crear un Virtual Host de la siguiente manera:

a2enmod ssl 
cp default-ssl shibsp1
a2ensite shibsp1

3. Verificacion de estado

El SP tiene una pagina de estado

Para verificar el estado se puede correr el siguiente comando:

curl -k https://127.0.0.1/Shibboleth.sso/Status

Por defecto solo permite el acceso a la pagina de estado desde localhost. Para habilitar el acceso desde otro equipo, se puede agregar la IP desde la que se quiere acceder. Para esto, editar /etc/shibboleth/shibboleth2.xml, y agregar la ip en el elemento Handler. Ejemplo:

1 <Handler type="Status" Location="/Status" acl="127.0.0.1 ::1 164.73.129.60"/>

Ante cualquier cambio en la configuración de Shibboleth se debe reiniciar el proceso con los siguientes comando:

service shibd stop
service shibd start

Luego accediendo a la dirección https://sp1.seciu.edu.uy/Shibboleth.sso/Status se puede ver una página xml con información del SP.

4. Genero claves

shib-keygen -f -u _shibd -h sp1.seciu.edu.uy -y 3 -e https://sp1.seciu.edu.uy/shibboleth -o /etc/shibboleth/

5. Configuracion de entityID

en shibboleth2.xml

Setear identificador de la entidad: entityID. Ejemplo:

1     <ApplicationDefaults entityID="https://sp1.seciu.edu.uy/shibboleth" 
2                        REMOTE_USER="eppn persistent-id targeted-id">

Ajustes en elemento Sessions:

Poner handlerSSL="true", y agregar propiedades seguras para cookies en cookieProps. Ejemplo:

1       <Sessions lifetime="28800" timeout="3600" relayState="ss:mem" 
2              checkAddress="false" handlerSSL="true" cookieProps="; path=/; secure; HttpOnly">

Luego se debe reiniciar el proceso de Shibboleth.

Para verificar la configuración se puede ejecutar el siguiente comando:

shibd -t.

La salida esperada es la siguiente:

overall configuration is loadable, check console for non-fatal problems

6. Definir y cargar una fuente de metadata

Obtener metadata del IdP, ej:

https://login.udelar.edu.uy/idp/shibboleth

Se adjunta al final la metadata del IdP de Udelar.

Guardarla en el directorio metadata, si no exsite crearlo.

/etc/shibboleth/metadata/metadata-idp1.xml

Registrarla en el SP, para esto referenciar en shibboleth2.xml

 1 <MetadataProvider type="XML" path="/etc/shibboleth/metadata/metadata.xml" ></MetadataProvider>
 

7. Configurar Inicio de Sesión

Se debe configurar elemento SSO dentro del archivo shibboleth2.xml para que use el provedor de identidad:

 1 <SSO entityID="https://cas2.seciu.edu.uy/idp/shibboleth" 

8. Configuración del archivo attribute-map.xml

Shibboleth SP extrae los atributos del Assertion SAML que le envia el IdP, y almacena los valores en variables del servidor web. El mapeo entre los atributos recibidos y las variables se define en el archivo attribute-map.xml.

Se puede utilizar el que viene por defecto, luego se van descomentando o agregando los atributos que se utilicen.
Al final se adjunta un ejemplo de archivo attribute-map.xml

9. Enviar Metadata de su SP para registro

Debe obtener su metadata y contactarse con Seciu para su registro.

La metadata del SP se puede obtener de: https://sp1.seciu.edu.uy/Shibboleth.sso/Metadata

10. Configuracion de Apache para proteger un recurso

En Apache, se recomienda setear correctamente el ServerName y también setear "UseCanonicalName On".
Tambien se recomienda fuertemente utilizar el "worker" MPM.

Referencia: https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPApacheConfig

Al instalar el modulo, se agrega mods-available/shib2.load, donde se carga el modulo.

Luego se debe crear el archivo conf-enabled/shib.conf con las directivas apropiadas:

  1 
 2 # Ensures handler will be accessible.
 3 #
 4 <Location /Shibboleth.sso>
 5   Satisfy Any
 6   Allow from all
 7 </Location>
 8 
 9 #
10 # Used for example style sheet in error templates.
11 #
12 <IfModule mod_alias.c>
13   <Location /shibboleth-sp>
14     Satisfy Any
15     Allow from all
16   </Location>
17   Alias /shibboleth-sp/main.css /usr/share/shibboleth/main.css
18 </IfModule>
19 
 

Para agregar un recurso (Location) protegido, agregar en shib.conf o en el virtual host:

  1 
 2 # You MUST enable AuthType shibboleth for the module to process
 3 # any requests, and there MUST be a require command as well.
 4 
 5 <Location /secure>
 6   AuthType shibboleth
 7   ShibRequestSetting requireSession 1
 8   require shib-session
 9 </Location>
 

Ejemplos de reglas para control de acceso:
https://www.switch.ch/aai/guides/sp/access-rules/

Por ultimo se debe habilitar la configuracion con el siguiente comando:

a2enconf shib