Calle 73 # 7-31, Piso 2 Bogotá D.C., Colombia
+57 1 5185353
www.renata.edu.co
Federación de identidad RENATA
Versión 2
Febrero 19 de 2019
Red Nacional Académica de Tecnología Avanzada - RENATA
Calle 73 # 7-31, Piso 2 Bogotá D.C., Colombia
+57 1 5185353
www.renata.edu.co
Introducción
La infraestructura de autenticación y autorización (AAI) es uno de los diferenciadores clave entre las
organizaciones nacionales de investigación y educación en red (NREN) y otros proveedores de red. Su
provisión ayuda al desarrollo y la entrega de servicios mejorados a todos los usuario.
A medida que aumenta la demanda de los investigadores, los proyectos de investigación y la colaboración
internacional se convierte en la norma, la necesidad de que las NREN proporcionen un entorno efectivo y
seguro es inevitable.
La siguiente guía le indicará como dar valor agregado a sus usuarios con la federación de identidad de
Colombia (Colfire) mediante el proceso de autenticación Single Singn-On y Shibboleth, el cual es un
paquete de software de código abierto y basado en estándares para el inicio de sesión único en la web a
través o dentro de los límites de la organización. Shibboleth comenzó como un proyecto de Internet2. El
paquete de software Shibboleth consta de muchos componentes, algunos de los cuales se describen en
otras secciones de este documento.
Calle 73 # 7-31, Piso 2 Bogotá D.C., Colombia
+57 1 5185353
www.renata.edu.co
Antes de Iniciar
RENATA pone a disposición de sus afiliados una plantilla desarrollada por su equipo de ingeniería, con el
fin de facilitar el proceso de instalación (para descargar la plantilla haga click aqui.)
Debe tener en cuenta la siguiente información a la hora de virtualizar:
• Extensión del archivo: .ova
• Arquitectura: 64 bits
• Sistema operativo: Ubuntu 16.04.4 LTS
• Memoria RAM: 1GB
• Espacio en disco: 80GB
• Cantidad de Procesadores: 2
Una ves que instale nuestra solución en su infraestructura, tenga en cuenta lo siguiente:
• Datos de acceso:
o Usuario: soporte
o Password: Renata.2018
• Una vez haya ingresado al servidor, modifique el direccionamiento y los DNS con los datos
asignados por el equipo de redes de su institución
• Modifique el hostname del servidor "Idp"
• Modifique el archivo /etc/hosts
sudo vim /etc/hosts
127.0.1.1 idp.example.org idp
(Reemplace idp.example.org con su Full Qualified Domain Name)
• Recuerde, que necesita una clave / certificado TLS que usará para proteger su conexión HTTP (S)
del navegador en el puerto 443.
Suponiendo que planea usar el IdP para el soporte de SAML, necesitará:
• La URL de entityID que desea utilizar para nombrar su IdP (el instalador sugerirá una de su
nombre de host, pero puede que esta no sea una buena opción).
• El subdominio DNS de segundo o tercer nivel para agregar a cualquier atributo de "ámbito", a
menudo el mismo que el dominio de correo electrónico de su organización.
• una fuente de metadatos de SAML para los proveedores de servicios que su IdP necesita para
respaldar (esto podría provenir de una "federación" de organizaciones a las que se haya unido,
directamente de los propietarios de SP, o creadas y mantenidas a mano)
Calle 73 # 7-31, Piso 2 Bogotá D.C., Colombia
+57 1 5185353
www.renata.edu.co
El proceso de instalación sugerirá o generará la siguiente información para usted:
• ID de la entidad del IdP (que puede anular como se indicó anteriormente)
• pares separados de clave / certificado autofirmados para:
o firma de mensaje
o asegurar las conexiones del servicio web, generalmente en el puerto 8443
o Cifrado de datos por otros sistemas para descifrado por el IdP
• una clave secreta y un archivo de versión clave para proteger las cookies y otros datos
producidos por el IdP para su propio uso (este es un almacén de claves Java especial de tipo
"JCEKS")
• algunos metadatos de muestra iniciales que describen el IdP para ser utilizados por los socios SP,
una vez que se revisa y complementa
• un conjunto predeterminado de archivos de configuración de IdP basados en esta información
Calle 73 # 7-31, Piso 2 Bogotá D.C., Colombia
+57 1 5185353
www.renata.edu.co
Instalación
El IdP es una aplicación web estándar de Java basada en la especificación Servlet 3.0 y debe ejecutarse en
su mayor parte en cualquier contenedor de servlets compatible, pero el soporte oficial se proporciona solo
para Jetty y Tomcat. Jetty es la opción recomendada y utilizada por los miembros principales del equipo
en sus entornos de producción.
Los contenedores para los cuales tenemos instrucciones de instalación específicas se muestran en el paso
1 a continuación, incluidos algunos que oficialmente no admitimos. El material específico de cualquier
contenedor se proporciona como una conveniencia, y no es un sustituto de la propia documentación del
contenedor.
1. Prepare su contenedor Servlet. Los implementadores de Linux pueden desear echar un vistazo a
IdPLinuxNonRoot , que documenta una forma de usar puertos privilegiados. Algunos
contenedores, como Jetty, incluyen alternativas. Los siguientes enlaces son a ejemplos
(imperfectos) proporcionados por el proyecto o por los implementadores. La siguiente lista no
refleja los contenedores y versiones específicos que admitimos, que está explícita y solo
disponible en la página Requisitos del sistema .
• Jetty 9.2
• Jetty 9.3
• Apache Tomcat 8.0
2. Descargue el último paquete de software del proveedor de identidad (el archivo zip tiene
terminaciones de línea de Windows, las terminaciones de línea de Unix tarball).
3. Desempaque el archivo que descargó en una ubicación conveniente. No será necesario después
de la instalación.
4. Cambie al directorio de distribución recién creado, shibboleth-identityprovider-VERSION
5. Ejecute ./bin/install.sh (en sistemas que no sean de Windows) o . \ Bin \ install.bat (en sistemas
de Windows).
6. El directorio de instalación que proporcione se denominará a lo idp.home a lo largo de esta
documentación.
7. Implemente el archivo IdP WAR, ubicado en idp.home / war / idp.war .
Calle 73 # 7-31, Piso 2 Bogotá D.C., Colombia
+57 1 5185353
www.renata.edu.co
Jetty 9.3 (contenedor Servlet)
La plantilla suministrada por RENATA, cuenta con una distribución instalada de jetty (distribution-
9.3.11.v20160721), por lo anterior iniciaremos con la configuración del servicio Shibboleth:
Creación de los certificados auto firmados (opcional) En caso de que su institución no cuente con certificados digitales para el dominio del servicio actual, usted podrá generarlos de la siguiente manera:
sudo su - #password: Renata.2018 openssl req -x509 -newkey rsa:4096 -keyout /root/certificates/idp-key-server.key -out /root/certificates/idp-cert-server.crt -nodes -days 1095
*En caso contrario, por favor ubique los certificados con los que cuenta la inStitución en la carpeta "/root/certificates", como se muestra a continuación.
sudo su - #password: Renata.2018 mkdir /root/certificates mv /tmp/idp-cert-server.crt /root/certificates mv /tmp/idp-key-server.key /root/certificates mv /tmp/DigiCertCA.crt /root/certificates chmod 400 /root/certificates/idp-key-server.key chmod 644 /root/certificates/idp-cert-server.crt chmod 644 /root/certificates/DigiCertCA.crt
Instalación IDP A continuación los pasos para instalar nuestro identity provider:
Suba al nivel root sudo su - #password: Renata.2018
Cambie al directorio de distribución predefinido por RENATA cd /usr/local/src/ tar -xvf shibboleth-identity-provider-3.2.1.tar.gz cd shibboleth-identity-provider-3.2.1/
Ejecute install.sh ./bin/install.sh
Ingrese los siguientes datos durante la instalación
• Installation Directory: [/opt/shibboleth-idp]
• Hostname: idp.[DominioInstitución]
• SAML EntityID: [https://idp.DominioInstitución /idp/shibboleth]
• Attribute Scope: [localdomain]
• Backchannel PKCS12 Password: [defina el credenciales para el certificado]
Calle 73 # 7-31, Piso 2 Bogotá D.C., Colombia
+57 1 5185353
www.renata.edu.co
• Cookie Encryption Key Password: [defina las credenciales de encripción]
Una vez finalizada la instalación deberíamos obtener algo como:
• Importe las librerías JST para visualizar el status del IDP cd /opt/shibboleth-idp/edit-webapp/WEB-INF/lib wget https://build.shibboleth.net/nexus/service/local/repositories/thirdparty/content/javax/servlet/jstl/1.2/jstl-1.2.jar cd /opt/shibboleth-idp/bin ; ./build.sh -Didp.target.dir=/opt/shibboleth-idp
• Cambie el propietario para habilitar al usuario Jetty acceder a los siguientes directorios: cd .. chown -R jetty logs/ metadata/ credentials/ conf/ system/ war/
Instrucciones de configuración
Configure SSL en Apache2 (Jetty front-end)
1. Modifique los siguientes parámetros del archivo /etc/apache2/sites-available/default-ssl.conf:
vim /etc/apache2/sites-available/default-ssl.conf
Calle 73 # 7-31, Piso 2 Bogotá D.C., Colombia
+57 1 5185353
www.renata.edu.co
<IfModule mod_ssl.c> SSLStaplingCache shmcb:/var/run/ocsp(128000) <VirtualHost _default_:443> ServerName idp.example.org:443 ServerAdmin [email protected] DocumentRoot /var/www/html ... SSLEngine On SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH" SSLHonorCipherOrder on # Disable SSL Compression SSLCompression Off # OCSP Stapling, only in httpd/apache >= 2.3.3 SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off # Enable HTTP Strict Transport Security with a 2 year duration Header always set Strict-Transport-Security "max-age=63072000;includeSubDomains;preload" ... SSLCertificateFile /root/certificates/idp-cert-server.crt SSLCertificateKeyFile /root/certificates/idp-key-server.key SSLCertificateChainFile /root/certificates/DigiCertCA.pem ... </VirtualHost> </IfModule>
2. Active los módulos proxy_http, SSL y headers de Apache2
a2enmod proxy_http ssl headers alias include negotiation a2ensite default-ssl.conf service apache2 restart
3. Configure Apache2 para abrir el puerto 80 de forma local:
vim /etc/apache2/ports.conf
# If you just change the port or add more ports here, you will likely also # have to change the VirtualHost statement in # /etc/apache2/sites-enabled/000-default.conf
Calle 73 # 7-31, Piso 2 Bogotá D.C., Colombia
+57 1 5185353
www.renata.edu.co
Listen 127.0.0.1:80 <IfModule ssl_module> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule>
4. Configure el Apache2 para redireccionar todo a https:
vim /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80> ServerName "idp.example.org" Redirect "/" "https://idp.example.org/" </VirtualHost>
Configure Jetty
1. Suba al nivel root
sudo su -
2. Cree el archivo de configuración para IdP
vim /etc/apache2/sites-available/idp.conf
<IfModule mod_proxy.c> ProxyPreserveHost On RequestHeader set X-Forwarded-Proto "https" ProxyPass /idp http://localhost:8080/idp retry=5 ProxyPassReverse /idp http://localhost:8080/idp retry=5 <Location /idp> Require all granted </Location> </IfModule>
3. Habilite el sitio
cd /etc/apache2/sites-available/ ; a2ensite idp.conf service apache2 restart
4. Configure el descriptor de contexto para IdP
vim /opt/jetty/webapps/idp.xml
<Configure class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="war"><SystemProperty name="idp.home"/>/war/idp.war</Set>
Calle 73 # 7-31, Piso 2 Bogotá D.C., Colombia
+57 1 5185353
www.renata.edu.co
<Set name="contextPath">/idp</Set> <Set name="extractWAR">false</Set> <Set name="copyWebDir">false</Set> <Set name="copyWebInf">true</Set> </Configure>
5. Reinicie Jetty
service jetty restart
Conecte el openLDAP al IdP para permitir la autenticación de los usuarios
vim /opt/shibboleth-idp/conf/ldap.properties
1. Solución LDAP + STARTTLS:
idp.authn.LDAP.authenticator = bindSearchAuthenticator idp.authn.LDAP.ldapURL = ldap://ldap.example.org: 389 idp.authn.LDAP.useStartTLS = true idp.authn.LDAP.useSSL = false idp.authn.LDAP.sslConfig = certificateTrust idp.authn.LDAP.trustCertificates =% {idp.home} /credentials/ldap-server.crt idp.authn.LDAP.baseDN = ou=personas,dc=ejemplo,dc=org idp.authn.LDAP.userFilter = (mail={user}) idp.authn.LDAP.bindDN = cn=admin,dc=example,dc=org idp.authn.LDAP.bindDNCredential = ### LDAP_ADMIN_PASSWORD ###
2. Solución LDAP + TLS:
idp.authn.LDAP.authenticator = bindSearchAuthenticator idp.authn.LDAP.ldapURL = ldaps://ldap.example.org:636 idp.authn.LDAP.useStartTLS = false idp.authn.LDAP.useSSL = true idp.authn.LDAP.sslConfig = certificateTrust idp.authn.LDAP.trustCertificates =% {idp.home} /credentials/ldap-server.crt idp.authn.LDAP.baseDN = ou=personas,dc=ejemplo,dc=org idp.authn.LDAP.userFilter = (uid = {usuario}) idp.authn.LDAP.bindDN = cn=admin,dc=example,dc=org idp.authn.LDAP.bindDNCredential = ### LDAP_ADMIN_PASSWORD ###
3. Solución LDAP simple
idp.authn.LDAP.authenticator = bindSearchAuthenticator idp.authn.LDAP.ldapURL = ldap: //ldap.example.org: 389
Calle 73 # 7-31, Piso 2 Bogotá D.C., Colombia
+57 1 5185353
www.renata.edu.co
idp.authn.LDAP.useStartTLS = false idp.authn.LDAP.useSSL = false idp.authn.LDAP.baseDN = ou=personas,dc=ejemplo,dc=org idp.authn.LDAP.userFilter = (uid = {usuario}) idp.authn.LDAP.bindDN = cn=admin,dc=example,dc=org idp.authn.LDAP.bindDNCredential = ### LDAP_ADMIN_PASSWORD ###
4. Tenga en cuenta los parámetros resaltados a continuación, ubicados al final del archivo
idp.attribute.resolver.LDAP.ldapURL = %{idp.authn.LDAP.ldapURL}
idp.attribute.resolver.LDAP.baseDN = %{idp.authn.LDAP.baseDN:undefined}
idp.attribute.resolver.LDAP.bindDN = %{idp.authn.LDAP.bindDN:undefined}
idp.attribute.resolver.LDAP.bindDNCredential = %{idp.authn.LDAP.bindDNCredential:undefined}
idp.attribute.resolver.LDAP.useStartTLS = %{idp.authn.LDAP.useStartTLS}
idp.attribute.resolver.LDAP.trustCertificates = %{idp.authn.LDAP.trustCertificates:undefined}
idp.attribute.resolver.LDAP.searchFilter = (mail=$requestContext.principalName)
idp.attribute.resolver.LDAP.returnAttributes = cn,mail
**(Si decide utilizar la Solución 3, debe eliminar (o comentar) el siguiente código de su archivo de
attribute-resolver.xml:
vim /opt/shibboleth-idp/conf/attribute-resolver.xml
</ dc : FilterTemplate > <! - <dc: StartTLSTrustCredential id = "LDAPtoIdPCredential" xsi: type = "sec: X509ResourceBacked"> <sec: Certificate>% {idp.attribute.resolver.LDAP.trustCertificates} </ sec: Certificado> </ dc: StartTLSTrustCredential> -> </ resolver : DataConnector >
5. Enriquezca los registros de IdP con el error de autenticación ocurrido en LDAP
vim /opt/shibboleth-idp/conf/logback.xml
<! - Registra mensajes relacionados con LDAP -> <logger name="org.ldaptive" level="${idp.loglevel.ldap:-WARN}" /> <! - Inicia sesión en la autenticación de usuario LDAP -> <logger name="org.ldaptive.auth.Authenticator" level="INFO"/>
Calle 73 # 7-31, Piso 2 Bogotá D.C., Colombia
+57 1 5185353
www.renata.edu.co
6. Defina qué atributos puede administrar su IdP en su archivo de "resolución de atributos". Aquí
puede encontrar el atribute-resolver.xml proporcionado por RENATA como ejemplo:
wget https://www.renata.edu.co/idp-conf/attribute-resolver.xml -O /opt/shibboleth-idp/conf/attribute-resolver-RENATA-V3.xml
cambie la línea del archivo services.xml
vim /opt/shibboleth-idp/conf/services.xml
< value >% {idp.home} /conf/attribute-resolver.xml</ value >
Debe convertirse en
< value >% {idp.home}/conf/attribute-resolver-RENATA-V3.xml </ value >
7. Traducción de los mensajes IdP en español
Obtenga los archivos de traducción y ubíquelos en el directorio: /opt/shibboleth-idp/messages
cd /opt/shibboleth-idp/messages mv authn-messages.properties authn-messages.properties.old mv consent-messages.properties consent-messages.properties.old mv error-messages.properties error-messages.properties.old wget -O authn-messages.properties https://wiki.shibboleth.net/confluence/download/attachments/21660022/authn-messages_es.properties?version=1&modificationDate=1464677334063&api=v2 wget -O consent-messages.properties https://wiki.shibboleth.net/confluence/download/attachments/21660022/consent-messages_es.properties?version=1&modificationDate=1464677322809&api=v2 wget -O error-messages.properties https://wiki.shibboleth.net/confluence/download/attachments/21660022/error-messages_es.properties?version=1&modificationDate=1464677312884&api=v2
Reinicie el servicio Jetty
service jetty restart
Calle 73 # 7-31, Piso 2 Bogotá D.C., Colombia
+57 1 5185353
www.renata.edu.co
8. Habilite el soporte de SAML2 cambiando idp-metadata.xml y deshabilitando el soporte en
desuso de SAML v1.x:
vim /opt/shibboleth-idp/metadata/idp-metadata.xml
En la sección <EntityDescriptor"> agregue:
- xmlns:mdrpi="urn:oasis:names:tc:SAML:metadata:rpi" - xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
En la sección <IDPSSODescriptor>: – de la lista "protocolSupportEnumeration" elimine: - urn:oasis:names:tc:SAML:1.1:protocol - urn:mace:shibboleth:1.0 – Elimine el endpoint: <ArtifactResolutionService Binding="urn:oasis:names:tc:SAML:1.0:bindings:SOAP-binding" Location="https://idp.example.org:8443/idp/profile/SAML1/SOAP/ArtifactResolution" index="1"/> (y modifique el "index value" of del siguiente a “1”) – Elimine el endpoint: <NameIDFormat>urn:mace:shibboleth:1.0:nameIdentifier</NameIDFormat> – Añada debajo de la línea: <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat> ésta línea: <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</NameIDFormat> (porque el IdP instalado con esta guía libera los ID de nombre de SAML persistentes) - Elimine el endpoint: <SingleSignOnService Binding="urn:mace:shibboleth:1.0:profiles:AuthnRequest" Location="https://idp.example.org/idp/profile/Shibboleth/SSO"/> - Elimine todos los ":8443" de la URL actual (ya que el puerto no se va a usar) <AttributeAuthorityDescriptor> Section: – De la lista "protocolSupportEnumeration" reemplace el valor de: - urn:oasis:names:tc:SAML:1.1:protocol con - urn:oasis:names:tc:SAML:2.0:protocol - Elimine el comentario de: <AttributeService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://idp.example.org/idp/profile/SAML2/SOAP/AttributeQuery"/> - Elimine el endpoint:
Calle 73 # 7-31, Piso 2 Bogotá D.C., Colombia
+57 1 5185353
www.renata.edu.co
<AttributeService Binding="urn:oasis:names:tc:SAML:1.0:bindings:SOAP-binding" Location="https://idp.example.org:8443/idp/profile/SAML1/SOAP/AttributeQuery"/> - Elimine todos los ":8443" de la URL actual (ya que el puerto no se va a usar)
9. Obtenga su metadata en la siguiente URL
https://idp.example.org/idp/shibboleth
10. Configure el IdP para recuperar los metadatos de la federación Colfire, agregando los siguientes
proveedores de metadatos.
cd /opt/shibboleth-idp/conf vim metadata-providers.xml
<MetadataProvider id="ELCIRA-SP" xsi:type="FileBackedHTTPMetadataProvider" metadataURL="https://nrenadmin.redclara.net/Metadata-Elcira/metadata-elcira-sps.xml" backingFile="%{idp.home}/metadata/metadata-elcira-sps.xml"> <MetadataFilter xsi:type="ChainingFilter" xmlns="urn:mace:shibboleth:2.0:metadata"> <MetadataFilter xsi:type="EntityRoleWhiteList" xmlns="urn:mace:shibboleth:2.0:metadata"> <RetainedRole>md:SPSSODescriptor</RetainedRole> </MetadataFilter> </MetadataFilter> </MetadataProvider> <MetadataProvider id="FedClaradev" xsi:type="FileBackedHTTPMetadataProvider" metadataURL="https://nrenadmin.redclara.net/Metadata-dev/metadata-sps-dev.xml" backingFile="%{idp.home}/metadata/metadata-sp-FedCLARA-dev.xml"> <MetadataFilter xsi:type="ChainingFilter"> <MetadataFilter xsi:type="EntityRoleWhiteList"> <RetainedRole>md:SPSSODescriptor</RetainedRole> </MetadataFilter> </MetadataFilter> </MetadataProvider>
11. Recupere la metadata de forma local
cd /opt/shibboleth-idp/metadata/ wget https://nrenadmin.redclara.net/Metadata-dev/metadata-sps-dev.xml wget https://nrenadmin.redclara.net/Metadata-Elcira/metadata-elcira-sps.xml chown jetty:root metadata-elcira-sps.xml
Calle 73 # 7-31, Piso 2 Bogotá D.C., Colombia
+57 1 5185353
www.renata.edu.co
chown jetty:root metadata-sps-dev.xml
12. Vuelva a cargar el servicio con ID shibboleth.MetadataResolverService para recuperar los
metadatos de la federación:
cd /opt/shibboleth-idp/bin ./reload-service.sh -id shibboleth.MetadataResolverService
13. Configure el archivo attribute-filter.xml, para liberar los atributos obligatorios de los recursos
predeterminados por RENATA.
wget https://www.renata.edu.co/idp-conf/attribute-filter.xml -O /opt/shibboleth-idp/conf/attribute-filter.xml
Calle 73 # 7-31, Piso 2 Bogotá D.C., Colombia
+57 1 5185353
www.renata.edu.co
14. Vuelva a cargar el servicio con ID shibboleth.AttributeFilterService para actualizar la
configuración de los filtros:
cd /opt/shibboleth-idp/bin ./reload-service.sh -id shibboleth.AttributeFilterService
Realice pruebas de acceso a nuestros servicios con las siguientes URLs 1
Reemplace los segmentos resaltados con la URL de su IdP:
https://dev1.redclara.net/Shibboleth.sso/Login?entityID=https:// idp.example.org/idp/shibboleth&target=https://dev1.redclara.net/joomla4_new/joomla4/index.php/es/frontpage/?nren=RENATA%26nren_container_url=https://www.renata.edu.co/colaboratorio/index.html https://sivic.redclara.net/Shibboleth.sso/Login?entityID=https://idp.example.org/idp/shibboleth&target=https://sivic.redclara.net/sivic/vc-espresso.php?nren=RENATA&lang=es https://filesender.redclara.net/simplesaml/module.php/core/as_login.php?AuthId=default-sp&ReturnTo=https%3A%2F%2Ffilesender.redclara.net%2Ffilesender%2Findex.php%3Fs%3Dupload%26lang%3Des%26tpl%3DBLUESKY%26nren%3DRedCLARA&saml:idp=https://idp.example.org/idp/shibboleth
1 Antes de ejecutar las pruebas, deberá notificar a la mesa de ayuda RENATA con el fin autorizar en nuestro sistema, el idp que acaba de configurar.
Top Related