===== Idpv4x-c8 ===== ==== references ===== * https://wiki.shibboleth.net/confluence/display/IDP4/Home * https://services.renater.fr/federation/documentation/fiches-techniques/idp/migration-idp4 * https://www.switch.ch/aai/guides/idp/installation/ * https://spaces.internet2.edu/pages/viewpage.action?pageId=49841792#LinuxIdentityProviderIdPv3(Centos7)-5 * https://www.testshib.org/ * https://tecadmin.net/install-tomcat-9-on-centos-8/ ===== contexte ===== Exemple de deploiement d'un fournisseur d'IDP (V4.0.1) sur une centos8 avec les produits natifs de cette distribution ⇒ JVM openjdk 11 https://wiki.shibboleth.net/confluence/display/IDP4/SystemRequirements [root@idpx ~]# cat /etc/redhat-release CentOS Linux release 8.3.2011 ===== java 11 jdk ===== [root@idpx ~]# yum install java-11-openjdk-devel.x86_64 Installer 27 Paquets Taille totale des téléchargements : 64 M Taille des paquets installés : 246 M Installé: java-11-openjdk-devel-1:11.0.7.10-1.el8_1.x86_64 abattis-cantarell-fonts-0.0.25-4.el8.noarch dconf-0.28.0-3.el8.x86_64 gtk3-3.22.30-5.el8.x86_64 adwaita-cursor-theme-3.28.0-2.el8.noarch adwaita-icon-theme-3.28.0-2.el8.noarch at-spi2-atk-2.26.2-1.el8.x86_64 at-spi2-core-2.28.0-1.el8.x86_64 cairo-gobject-1.15.12-3.el8.x86_64 colord-libs-1.4.2-1.el8.x86_64 java-11-openjdk-1:11.0.7.10-1.el8_1.x86_64 java-11-openjdk-headless-1:11.0.7.10-1.el8_1.x86_64 lcms2-2.9-2.el8.x86_64 libepoxy-1.5.3-1.el8.x86_64 libwayland-client-1.17.0-1.el8.x86_64 libwayland-cursor-1.17.0-1.el8.x86_64 libwayland-egl-1.17.0-1.el8.x86_64 libxkbcommon-0.9.1-1.el8.x86_64 rest-0.8.1-2.el8.x86_64 xkeyboard-config-2.28-1.el8.noarch glib-networking-2.56.1-1.1.el8.x86_64 gsettings-desktop-schemas-3.32.0-4.el8.x86_64 json-glib-1.4.4-1.el8.x86_64 libgusb-0.3.0-1.el8.x86_64 libmodman-2.0.1-17.el8.x86_64 libproxy-0.4.15-5.2.el8.x86_64 libsoup-2.62.3-1.el8.x86_64 === alternatives java-11 === Passer par defaut sur java-11 si presence aussi du 1.8 avec alternatives [root@idpx ~]# alternatives --config java Il existe 2 programmes qui fournissent « java ». Sélection Commande ----------------------------------------------- *+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el8_1.x86_64/jre/bin/java) 2 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java) [root@idpex ~]# alternatives --config java Il existe 2 programmes qui fournissent « java ». Sélection Commande ----------------------------------------------- * 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el8_1.x86_64/jre/bin/java) + 2 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java) test java version [root@idpx ~]# java -version openjdk version "11.0.9.1" 2020-11-04 LTS OpenJDK Runtime Environment 18.9 (build 11.0.9.1+1-LTS) OpenJDK 64-Bit Server VM 18.9 (build 11.0.9.1+1-LTS, mixed mode, sharing) ===== tomcat ===== redhat et donc centos n'offre plus de package tomcat (ils mettent en avant JBoss) , donc on va installer un tomcat 9 en tar.gz : * https://tecadmin.net/install-tomcat-9-on-centos-8/ ==== tomcat user ==== [root@idpx ~]# useradd -m -d /opt/tomcat -U -s /bin/false tomcat ==== tomcat package tgz ==== [root@idpx ~]# wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.45/bin/apache-tomcat-9.0.45.tar.gz [root@idpx ~]# cd /opt [root@idpx opt]# tar xvfz /root/apache-tomcat-9.0.45.tar.gz [root@idpx opt]# ln -s apache-tomcat-9.0.45 tomcat [root@idpx opt]# ls -ld tomcat lrwxrwxrwx 1 root root 20 10 mai 19:49 tomcat -> apache-tomcat-9.0.45 positionnement des droits d'acces au comte tomcat [root@idpx opt]# chown -R tomcat:tomcat /opt/tomcat/ # ls -l tomcat/ total 148 drwxr-x--- 2 tomcat tomcat 4096 10 mai 16:09 bin -rw-r----- 1 tomcat tomcat 18984 30 mars 12:29 BUILDING.txt drwx------ 2 tomcat tomcat 4096 30 mars 12:29 conf -rw-r----- 1 tomcat tomcat 5587 30 mars 12:29 CONTRIBUTING.md drwxr-x--- 2 tomcat tomcat 4096 10 mai 16:09 lib -rw-r----- 1 tomcat tomcat 57092 30 mars 12:29 LICENSE drwxr-x--- 2 tomcat tomcat 4096 30 mars 12:29 logs -rw-r----- 1 tomcat tomcat 2333 30 mars 12:29 NOTICE -rw-r----- 1 tomcat tomcat 3257 30 mars 12:29 README.md -rw-r----- 1 tomcat tomcat 6898 30 mars 12:29 RELEASE-NOTES -rw-r----- 1 tomcat tomcat 16507 30 mars 12:29 RUNNING.txt drwxr-x--- 2 tomcat tomcat 4096 10 mai 16:09 temp drwxr-x--- 7 tomcat tomcat 4096 30 mars 12:29 webapps drwxr-x--- 2 tomcat tomcat 4096 30 mars 12:29 work ==== parametrage tomcat ===== acces manager [root@idpx opt]# diff /opt/tomcat/webapps/manager/META-INF/context.xml /opt/tomcat/webapps/manager/META-INF/context.xml.orig 20c20 < allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|157.19.19.13" /> --- > allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> compte admin d'acces au l'appli manager/html [root@idpx opt]# diff /opt/tomcat/conf/tomcat-users.xml /opt/tomcat/conf/tomcat-users.xml.orig 44,46d43 < < < ==== activation par systemd ==== [root@idpx opt]# vim /etc/systemd/system/tomcat.service [root@idpx opt]# cat /etc/systemd/system/tomcat.service [Unit] Description=Tomcat 9 After=network.target [Service] Type=forking User=tomcat Group=tomcat Environment="JAVA_HOME=/usr/lib/jvm/jre" Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom" Environment="CATALINA_BASE=/opt/tomcat" Environment="CATALINA_HOME=/opt/tomcat" Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid" Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC" ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh [Install] WantedBy=multi-user.target ==== start ==== [root@idpx ~]# systemctl daemon-reload [root@idpx ~]# systemctl enable tomcat.service [root@idpx ~]# systemctl start tomcat.service ===== firewall ===== [root@idpx opt]# firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="157.19.19.0/24" port port=8080 protocol=tcp log prefix="http8080" accept' success [root@idpx opt]# firewall-cmd --reload success [root@idpx opt]# firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="157.19.19.0/16" service name="http" log prefix="http" accept' success [root@idpx opt]# firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="157.19.19.0/16" service name="https" log prefix="https" accept' success [root@idpx opt]# firewall-cmd --reload success ou plus generalement firewall-cmd --zone=public --permanent --add-port=8080/tcp ==== acces tomcat ==== le serveur est maintenant accessible , exemple http://idpx.tem-tsp.eu:8080/manager/html (login/pass definit plus haut) sauf si l'adresse ip source de consultation n'est pas autorisé par le control d'acces de l'application manager , cf adresse IP dans le parametre allow : [root@idpx ~]# vim /opt/tomcat/webapps/manager/META-INF/context.xml ==== proxy et TLS via apache ===== https://tomcat.apache.org/tomcat-9.0-doc/proxy-howto.html https://tomcat.apache.org/tomcat-9.0-doc/connectors.html https://rimuhosting.com/mod_jk2_and_mod_proxy_ajp.jsp (secretRequired="false") mise en place d'un proxy pour une gestion de TLS et ports par defaut (80/443) par apache il faut installer le mod_ssl d'apache pour disposer d'https [root@idpx opt]# yum install httpd mod_ssl Total download size: 2.0 M Is this ok [y/N]: y et le configurer avec nos certificats [root@idpx certs]#grep ^SSL /etc/httpd/conf.d/ssl.conf | tail -3 SSLCertificateFile /etc/pki/tls/certs/idp.imtbstsp_eu.pem SSLCertificateKeyFile /etc/pki/tls/private/idp.imtbstsp.key SSLCertificateChainFile /etc/pki/tls/certs/chain-dc-TR1-CA2-idp-imtbstsp.pem enfin configurer le proxy-ajp pour rediriger les requetes https d'apache vers tomcat [root@idpx ~]# cat /etc/httpd/conf.d/shibboleth.conf ProxyPass /idp/ ajp://127.0.0.1:8009/idp/ retry=0 ProxyPass /manager/ ajp://127.0.0.1:8009/manager/ et l'activer coté tomcat [root@idpx opt]# vim /opt/tomcat/conf/server.xml sans l'option secretRequired="false" (cf https://rimuhosting.com/mod_jk2_and_mod_proxy_ajp.jsp ) , impossible d'acceder au manager via proxy_ajp, il faudrai mieux controler cet acces en limitant les acces proxy uniquement a 127.0.0.1 entre httpd et tomcat . lancement httpd et verification de la presence du module AJP [root@idpx opt]# systemctl start httpd.service [root@idpx opt]# httpd -M | grep ajp proxy_ajp_module (shared) acces sans le port 8080 : http://idpx.imtbstsp.eu/manager/html puis en https via le proxy-ajp sans precision du port 443 https://idpx.imtbstsp.eu/manager/html ===== shibboleth IDP ====== * source v4 : https://shibboleth.net/downloads/identity-provider/4.1.2/ * ref FR: https://services.renater.fr/federation/docs/installation/idp3/chap03 ==== download ==== telechargement de la derniere version depuis http://shibboleth.net/downloads/identity-provider/ [root@idpx opt]# mkdir shibidp-src-4.1.2 [root@idpx opt]# cd shibidp-src-4.1.2/ [root@idpx shibidp-src-4.1.2]# wget https://shibboleth.net/downloads/identity-provider/4.1.2/shibboleth-identity-provider-4.1.2.tar.gz [root@idpx shibidp-src]# tar xvfz shibboleth-identity-provider-4.1.2.tar.gz [root@idpx shibidp-src]# cd shibboleth-identity-provider-4.1.2 [root@idpx shibboleth-identity-provider-4.1.2]# ls bin conf credentials doc flows LICENSE.txt logs messages metadata system views webapp ==== install ==== * https://wiki.shibboleth.net/confluence/display/IDP4/Installation fresh install ici, attention en cas d'update ne pas tout ecraser ! [root@idpx shibboleth-identity-provider-4.1.2]# ./bin/install.sh Buildfile: /opt/shibidp-src/shibboleth-identity-provider-4.1.2/bin/build.xml install: Source (Distribution) Directory (press to accept default): [/opt/shibidp-src/shibboleth-identity-provider-4.1.2] ? Installation Directory: [/opt/shibboleth-idp] ? INFO [net.shibboleth.idp.installer.V4Install:151] - New Install. Version: 4.1.2 Host Name: [idpx.intbstsp.fr] ? idpex.imtbstsp.eu INFO [net.shibboleth.idp.installer.V4Install:549] - Creating idp-signing, CN = idpx.imtbs-tsp.eu URI = https://idpx.imtbstsp.eu/idp/shibboleth, keySize=3072 INFO [net.shibboleth.idp.installer.V4Install:549] - Creating idp-encryption, CN = idpx.imtbs-tsp.eu URI = https://idpx.imtbstsp.eu/idp/shibboleth, keySize=3072 Backchannel PKCS12 Password: Re-enter password: INFO [net.shibboleth.idp.installer.V4Install:592] - Creating backchannel keystore, CN = idpx.imtbstsp.eu URI = https://idpx.imtbstsp.eu/idp/shibboleth, keySize=3072 Cookie Encryption Key Password: Re-enter password: INFO [net.shibboleth.idp.installer.V4Install:633] - Creating backchannel keystore, CN = idpx.imtbstsp.eu URI = https://idpx.imtbstsp.eu/idp/shibboleth, keySize=3072 INFO [net.shibboleth.utilities.java.support.security.BasicKeystoreKeyStrategyTool:166] - No existing versioning property, initializing... SAML EntityID: [https://idpx.imtbstsp.eu/idp/shibboleth] ? Attribute Scope: [imtbstsp.eu] ? INFO [net.shibboleth.idp.installer.V4Install:433] - Creating Metadata to /opt/shibboleth-idp/metadata/idp-metadata.xml INFO [net.shibboleth.idp.installer.BuildWar:72] - Rebuilding /opt/shibboleth-idp/war/idp.war, Version 4.1.2 INFO [net.shibboleth.idp.installer.BuildWar:81] - Initial populate from /opt/shibboleth-idp/dist/webapp to /opt/shibboleth-idp/webpapp.tmp INFO [net.shibboleth.idp.installer.BuildWar:90] - Overlay from /opt/shibboleth-idp/edit-webapp to /opt/shibboleth-idp/webpapp.tmp INFO [net.shibboleth.idp.installer.BuildWar:99] - Creating war file /opt/shibboleth-idp/war/idp.war BUILD SUCCESSFUL Total time: 1 minute 5 seconds fichier de credentials créés [root@idpx shibboleth-identity-provider-4.1.2]# ls -l /opt/shibboleth-idp/credentials/ total 36 -rw------- 1 root root 1517 11 juin 15:18 idp-backchannel.crt -rw------- 1 root root 3399 11 juin 15:18 idp-backchannel.p12 -rw------- 1 root root 1517 11 juin 15:18 idp-encryption.crt -rw------- 1 root root 2459 11 juin 15:18 idp-encryption.key -rw------- 1 root root 1517 11 juin 15:18 idp-signing.crt -rw------- 1 root root 2455 11 juin 15:18 idp-signing.key -rw------- 1 root root 502 11 juin 15:19 sealer.jks -rw------- 1 root root 53 11 juin 15:19 sealer.kver -rw------- 1 root root 581 11 juin 15:19 secrets.properties l'arborescence d'installation doit appartenir a tomcat [root@idpx shibboleth-identity-provider-4.1.2]# chown -R tomcat /opt/shibboleth-idp/ ==== context tomcat pour l'IDP ==== see the Servlet container preparation notes https://wiki.shibboleth.net/confluence/display/IDP30/ApacheTomcat8 le fichier idp.xml permet de déployer automatiquement la brique IdP sans avoir à recopier l'archive « .war » dans le répertoire webapps/ de Tomcat. [root@idpx localhost]# cat /opt/tomcat/conf/Catalina/localhost/idp.xml quelques secondes apres grace a l'auto-deploy [root@idpx lib]# ls /opt/tomcat/webapps/idp/ css images index.jsp js META-INF WEB-INF x509-prompt.jsp définition du idp.home pour prise en charge par java/tomcat . [root@idpx conf]# grep idp /etc/systemd/system/tomcat.service Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC -Didp.home=/opt/shibboleth-idp" relance systemct et tomcat pour prise en compte [root@idpx conf]# systemctl daemon-reload [root@idpx conf]# systemctl stop tomcat.service [root@idpx conf]# systemctl start tomcat.service ==== status et jstl ==== test acces sur http://idpx.tem-tsp.eu:8080/idp/status au premier abord, cette page ne s'est pas affichée java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config org.springframework.web.servlet.support.JstlUtils.exposeLocalizationContext(JstlUtils.java:101) en effet il faut ajouter la librairie jstl (cf http://stackoverflow.com/tags/jstl/info) qui n'est pas fournie par defaut (risque de conflit avec jboss) cf aussi https://www.switch.ch/aai/guides/idp/installation/#shibbolethidp sous chapitre 6.13 IdP status URL configuration ou https://services.renater.fr/federation/docs/installation/idp3/chap02#installation_d_un_serveur_d_applications_java jstl . librairie jstl-1.2.jar pour la fonction status [root@idpx war]# cd /opt/shibboleth-idp/edit-webapp/WEB-INF/lib/ [root@idpx lib]# wget https://build.shibboleth.net/nexus/service/local/repositories/thirdparty/content/javax/servlet/jstl/1.2/jstl-1.2.jar mais install.sh echoue donc reconstruction de tout le package depuis les sources [root@idpx]# cd /opt/shibboleth-identity-provider-4.1.2/ [root@idpx] cd webapp/ [root@idpx webapp]# ls css images index.jsp js META-INF WEB-INF [root@idpx webapp]# cd WEB-INF/ [root@idpx WEB-INF]# ls classes idpui.tld jsp lib spring.tld web.xml [root@idpx WEB-INF]# cd lib/ [root@idpx lib]# wget https://build.shibboleth.net/nexus/service/local/repositories/thirdparty/content/javax/servlet/jstl/1.2/jstl-1.2.jar puis rebuild [root@idpx shibboleth-identity-provider-4.1.2]# ./bin/install.sh Buildfile: /opt/shibboleth-identity-provider-4.1.2/bin/build.xml install: Source (Distribution) Directory (press to accept default): [/opt/shibboleth-identity-provider-4.1.2] ? Installation Directory: [/opt/shibboleth-idp] ? INFO [net.shibboleth.idp.installer.V4Install:162] - Update from version 4.1.2 to version 4.1.2 INFO [net.shibboleth.idp.installer.BuildWar:103] - Rebuilding /opt/shibboleth-idp/war/idp.war, Version 4.1.2 INFO [net.shibboleth.idp.installer.BuildWar:113] - Initial populate from /opt/shibboleth-idp/dist/webapp to /opt/shibboleth-idp/webpapp.tmp INFO [net.shibboleth.idp.installer.BuildWar:92] - Overlay from /opt/shibboleth-idp/edit-webapp to /opt/shibboleth-idp/webpapp.tmp INFO [net.shibboleth.idp.installer.BuildWar:125] - Creating war file /opt/shibboleth-idp/war/idp.war BUILD SUCCESSFUL Total time: 7 seconds Pour l'acces en https au status il faut autorise l'IP source du navigateur d'admin # vim /opt/shibboleth-idp/conf/access-control.xml ... ... maintenant accessible en https://idpx.imtbstsp.eu/idp/status acces status possible en shell également [root@idpx shibboleth-idp]# /opt/shibboleth-idp/bin/status.sh ### Operating Environment Information operating_system: Linux operating_system_version: 4.18.0 operating_system_architecture: amd64 jdk_version: 11.0.11 available_cores: 32 used_memory: 144 MB maximum_memory: 910 MB ### Identity Provider Information idp_version: 4.1.2 start_time: 2021-06-11T13:36:01.576Z current_time: 2021-06-11T13:36:37.322735Z uptime: PT35.746S enabled modules: idp.authn.Password (Password Authentication) idp.admin.Hello (Hello World) installed plugins: service: shibboleth.LoggingService last successful reload attempt: 2021-06-11T13:35:43.310718Z last reload attempt: 2021-06-11T13:35:43.310718Z service: shibboleth.AttributeFilterService last successful reload attempt: 2021-06-11T13:35:45.623677Z last reload attempt: 2021-06-11T13:35:45.623677Z ... service: shibboleth.ManagedBeanService last successful reload attempt: 2021-06-11T13:35:46.160136Z last reload attempt: 2021-06-11T13:35:46.160136Z ==== NTP ==== il faut que le systeme soit a l'heure (echanges SAML horodaté ) si on utilise une VM openvz, cf VZ capabilities: http://unix.stackexchange.com/questions/68016/error-when-running-ntpd-on-openvz-host-cap-set-proc-failed-to-drop-root-privi [root@hardnode ~]# vzctl set 1033 --capability sys_time:on --save CT configuration saved to /etc/vz/conf/1033.conf ===== Configuration ===== * ref: https://services.renater.fr/federation/docs/installation/idp3/chap04 * https://wiki.shibboleth.net/confluence/display/IDP4/Configuration * https://wiki.shibboleth.net/confluence/display/IDP4/ConfigurationFileSummary depuis la version 3 la configuration est eclatée en plusieurs fichiers, il est préférable de faire un backup des originaux/distribution [root@idpx conf]# cp -p metadata-providers.xml metadata-providers.xml.dist [root@idpx conf]# cp -p relying-party.xml relying-party.xml.dist [root@idpx conf]# cp -p attribute-resolver.xml attribute-resolver.xml.dist [root@idpx conf]# cp -p attribute-resolver-ldap.xml attribute-resolver-ldap.xml.dist [root@idpx conf]# cp -p attribute-filter.xml attribute-filter.xml.dist ==== metadata federations ===== * ref fr : https://services.renater.fr/federation/docs/installation/idp3/chap04#gestion_des_meta-donnees * https://wiki.shibboleth.net/confluence/display/IDP4/MetadataConfiguration enregistrement dans la fédération de test renater , recuperation du certificats de signature des metadonnées renater . [root@idpx]# cd /opt/shibboleth-idp/credentials/ [root@idpx credentials]# /usr/bin/curl -O https://metadata.federation.renater.fr/certs/renater-metadata-signing-cert-2016.pem ajout du chargement des metadata test-renater [root@idpx conf]# tail -13 metadata-providers.xml La premiere fois on recharge tomcat pour que le téléchargement initial du fichier soit réalisé [root@idpx conf]# systemctl restart tomcat.service [root@idpx conf]# ls -ltr ../metadata/ -rw-r--r-- 1 tomcat root 14647 10 mai 22:17 idp-metadata.xml -rw-r----- 1 tomcat tomcat 6207564 10 mai 22:49 preview-sps-renater-test-metadata.xml ensuite on pourra faire un simple rechargement du service metadata pour cette federation [root@idpx conf]# /opt/shibboleth-idp/bin/reload-metadata.sh -id=RenaterTestMetadata Metadata reloaded. idp-process.log : 2021-05-10 21:50:22,183 - 127.0.0.1 - INFO [org.opensaml.saml.metadata.resolver.impl.AbstractReloadingMetadataResolver:366] - Metadata Resolver FileBackedHTTPMetadataResolver RenaterTestMetadata: Metadata from 'https://metadata.federation.renater.fr/test/preview/preview-sps-renater-test-metadata.xml' has not changed since last refresh 2021-05-10 21:50:22,216 - 127.0.0.1 - INFO [org.opensaml.saml.metadata.resolver.impl.AbstractReloadingMetadataResolver:396] - Metadata Resolver FileBackedHTTPMetadataResolver RenaterTestMetadata: Next refresh cycle for metadata provider 'https://metadata.federation.renater.fr/test/preview/preview-sps-renater-test-metadata.xml' will occur on '2021-05-10T21:35:22.161963Z' ('2021-05-10T22:35:22.161963+01:00[GMT+01:00]' local time) 2021-05-10 21:50:22,226 - 127.0.0.1 - INFO [Shibboleth-Audit.Reload:283] - 127.0.0.1|2021-05-10T20:50:22.089031Z|2021-05-10T20:50:22.225867Z||||||||||||||||||Java/11.0.9.1 ==== URL metadata idp locale ==== URL de visualisation des metadata de notre IDP * http://idpx.domain.fr/idp/shibboleth ===== authentification ====== * ref https://services.renater.fr/federation/docs/installation/idp3/chap05 * https://wiki.shibboleth.net/confluence/display/IDP4/AuthenticationConfiguration * https://wiki.shibboleth.net/confluence/display/IDP30/Authenticating+against+multiple+OU%27s ==== 4.1+ ==== depuis la 4.1, il est fait plus largement usage de fichiers .properties plutot que des fichiers de configuration .xml (ils restent malgres tout actifs/lus si upgrade) . ainsi il convient d'utiliser authn.properties pour parametrer le login Flow (à la place de authn/general-authn.xml ) en lançant le shell script bin/module.sh pour activer un module d'auth (ici simple Password) [root@idpx shibboleth-idp]# bin/module.sh -e idp.authn.Password Enabling idp.authn.Password... conf/authn/password-authn-config.xml created views/login.vm created views/login-error.vm created [OK] ==== ldap authn ==== https://wiki.shibboleth.net/confluence/display/IDP4/LDAPAuthnConfiguration shibboleth.LDAPValidator est definit comme backend par defaut: [root@idpx shibboleth-idp]# vim conf/authn/password-authn-config.xml 1er test en simple auth ldap , attention a bien activer idp.authn.LDAP.authenticator = bindSearchAuthenticator si un compte privilegié est necessaire pour se binder à l'annuaire, et au secret associé qui est par defaut dans credentials/secrets.properties [root@idpex conf]# diff ldap.properties ldap.properties.dist 6d5 < idp.authn.LDAP.authenticator = bindSearchAuthenticator 9,10c8,9 < idp.authn.LDAP.ldapURL = ldap://ldapfr.imtbstsp.eu:389 < idp.authn.LDAP.useStartTLS = true --- > idp.authn.LDAP.ldapURL = ldap://localhost:10389 > #idp.authn.LDAP.useStartTLS = true 17c16 < idp.authn.LDAP.sslConfig = certificateTrust --- > #idp.authn.LDAP.sslConfig = certificateTrust 19c18 < idp.authn.LDAP.trustCertificates = /etc/pki/tls/certs/starimtbstsp_eu.pem --- > idp.authn.LDAP.trustCertificates = %{idp.home}/credentials/ldap-server.crt 21c20 < ##idp.authn.LDAP.trustStore = %{idp.home}/credentials/ldap-server.truststore --- > idp.authn.LDAP.trustStore = %{idp.home}/credentials/ldap-server.truststore 30,31c29,30 < idp.authn.LDAP.baseDN = ou=people,ou=staff,dc=int,dc=fr < idp.authn.LDAP.subtreeSearch = true --- > idp.authn.LDAP.baseDN = ou=people,dc=example,dc=org > #idp.authn.LDAP.subtreeSearch = false 35,37c34 < idp.authn.LDAP.bindDN = uid=binduser,ou=dsa,dc=int,dc=fr < ##idp.authn.LDAP.bindDNCredential = secretNotHEre But In ../credentials/secrets.properties < --- > idp.authn.LDAP.bindDN = uid=myservice,ou=system 41c38 < idp.authn.LDAP.dnFormat = uid=%s,ou=people,ou=staff,dc=int,dc=fr --- > idp.authn.LDAP.dnFormat = uid=%s,ou=people,dc=example,dc=org === bindDN credential === l'usage d'un bindDN pour lire l'annuaire, suppose de de definir un password associé a ce compte //idp.authn.LDAP.bindDNCredential : Password to bind with during search, used by bindSearchAuthenticator, usually set via %{idp.home}/credentials/secrets.properties// [root@idpx shibboleth-idp]# grep bindDNCredential credentials/secrets.properties #idp.authn.LDAP.bindDNCredential = myServicePassword idp.authn.LDAP.bindDNCredential = SECRET [root@idpx conf]# systemctl restart tomcat.service ==== personnaliser la page de login interne ==== Avant de passer a une delagation d'authN via CAS, il est possible de personnaliser la page de login intégré a l'IDP cf: * https://wiki.shibboleth.net/confluence/display/IDP30/PasswordAuthnConfiguration * https://wiki.shibboleth.net/confluence/display/IDP4/MessagesTranslation * https://spaces.internet2.edu/pages/viewpage.action?pageId=49841792#LinuxIdentityProviderIdPv3(RHEL7)-1.CustomizetheIdP'sLoginPage * http://shibboleth.1660669.n2.nabble.com/Customising-login-page-in-IdP-v3-td7616265.html apparement en V4 le /system/messages est vide !? en v3 s'etait : # vim /opt/src/shibboleth-identity-provider-3.3.0/system/messages/messages.properties ... idp.logo = /images/etablissement-logo-site.png ... root.title = Shibboleth IdP Etablissement.fr ... mettre le logo dans le repertoire source images, curieusement un bin/install.sh a bien deployé le nouveau messages.properties mais pas le png du logo dans /var/lib/tomcat/webapps/idp/images/ que j'ai du faire à la main (cp) . en IDP v4 , lors du deploiement initial mettre l'image du logo dans les sources , permet apres un install.sh d'assurer son deploiement dans le webapps de tomcat et donc le rend bien operationnel /opt/shibidp-src/shibboleth-identity-provider-4.0.1/webapp/images/IMT_logo_RVB.jpg [root@idp4t messages]# grep idp.logo= /opt/shibboleth-idp/messages/messages_fr.properties idp.logo=/images/IMT_logo_RVB.jpg ==== Logo sur views / messages ==== ref : https://wiki.shibboleth.net/confluence/display/IDP4/ErrorHandlingConfiguration en IDP v 4.1.2 pour afficher le logo de l'etablissement dans les views (ecran d'interception) , il faut : - deposer le fichier de logo dans le repertoire - editer le fichier de porpertis des message pour y definir le parametre idp.logo - relancer le buid + stop-start de tomcat === 1) deposer le fichier logo === [root@idp4t shibboleth-idp]# ls -l edit-webapp/images/logo-imtbs-tsp.png -rw-r--r-- 1 root root 13640 30 juin 07:53 edit-webapp/images/logo-oursite.png === 2) messages.properties ==== [root@idp4t shibboleth-idp]# cat messages/messages.properties # You can define message properties here to override messages defined in # the system-supplied message file or to add your own messages. idp.logo = /images/logo-oursite.png === 3) re-build === on rebuild le war afin qu'il soit redeployer dans le webapps de tomcat [root@idp4t shibboleth-idp]# ./bin/build.sh Buildfile: /opt/shibboleth-idp/bin/build.xml build-war: Installation Directory: [/opt/shibboleth-idp] ? INFO [net.shibboleth.idp.installer.BuildWar:103] - Rebuilding /opt/shibboleth-idp/war/idp.war, Version 4.1.2 INFO [net.shibboleth.idp.installer.BuildWar:113] - Initial populate from /opt/shibboleth-idp/dist/webapp to /opt/shibboleth-idp/webpapp.tmp INFO [net.shibboleth.idp.installer.BuildWar:92] - Overlay from /opt/shibboleth-idp/edit-webapp to /opt/shibboleth-idp/webpapp.tmp INFO [net.shibboleth.idp.installer.BuildWar:125] - Creating war file /opt/shibboleth-idp/war/idp.war BUILD SUCCESSFUL Total time: 7 seconds ===== Attribute Resolver v4 ===== reference : * https://wiki.shibboleth.net/confluence/display/IDP4/AttributeResolverConfiguration le changement majeure avec la V3 est qu'il n'est plus definit dans l'attributeResolver d'encodage des attributs (façon dont sont rrepresentés les attributs d'IDP dans la protocole SAML ) , ceci est fait "automatiquement" par l'AttributeRegistryConfiguration * https://wiki.shibboleth.net/confluence/display/IDP4/AttributeRegistryConfiguration ===== debug ==== reference * https://wiki.shibboleth.net/confluence/display/IDP4/Troubleshooting forcer le failFast globalement ou sur certains module de l'IDP permet en phase d'installation / configuration de forcer l'arret de l'IDP à la premiere erreure de parametrage/configuration rencontrée et permet ainsi de se focaliser sur la source du probleme [root@idpx conf]# diff services.properties services.properties.dist 10d9 < idp.service.failFast = true ===== Attribute resolver ===== la distribution 4.x vient avec un attribute-resolver.xml minimal. Nous souhaitons profiter de plus d'attributs issue du refentiel d'ID LDAP on peux s'appuyer sur le modele examples/attribute-resolver-ldap.xml pour disposer d'une resolution d'attributs depuis l'annuaire d'etablissement . [root@idpx conf]#cp examples/attribute-resolver-ldap.xml ./attribute-resolver-ldap.xml pour utiliser ce fichier attribute-resolver-ldap.xml il faut en declarer l'usage dans services.xml en remplacement du default "attribute-resolver.xml" [root@idpx conf]# diff services.xml services.xml.dist 24,25c24 < < %{idp.home}/conf/attribute-resolver-ldap.xml il contient un exemple de DataConnector vers LDAP qui fait usage des varaibles definies dans ldap.properties nous y avons ajouter ici une liste d'attributs utiles dans nos usage de federations locales (eduPersonAffiliation supannEntiteAffectation supannAutreMail) Le parametre d'//exportAttributes// est bien praique dans le DataConnector LDAP , il permet de reprendre et definir automatiquement ces attributs par l'attribute-resolver : sur la définition d'attributs, notre annuaire ldap contenant en propre l'attribut eduPersonAffiliation , nous avons retirer les traitement "scope" (@domain) pour en faire un Simple attribut reprit tel quel : Idem pour l'EPPN qui est deja au format login@domain dans mon referentiel d'ID ldap , je le passe donc en Prescoped : ==== attribute-filter ==== on peux se contenter de reprendre et adapter si necessaire l'exemple de base attribute-filter.xml et l'etendre a tout SP (ANY) [root@idpx conf]# diff attribute-filter.xml attribute-filter.xml.dist 18,19c18 < < --- > [root@idp3 conf]# /opt/shibboleth-idp/bin/reload-service.sh -id shibboleth.AttributeFilterService Configuration reloaded. autrement on peux aussi s'appuyer sur un filtre d'attributs communs a une federation (ancienne façon de faire, maintenant Renater privilegie de consommer la liste des attributs directement dans les metadata des entités concernées) dans service.xml on declare un bean qui charge via http un filtre commun hebergé sur un site web (distribution au sein d'une federation locale) ==== AttributeRegistryConfiguration ==== depuis la version 4 de l'IDP , la definition d'attributs (chapitre prcedent) est dissociée de l'encodage , cf reference * https://wiki.shibboleth.net/confluence/display/IDP4/AttributeRegistryConfiguration un ensemble de fichiers propres a chaque classe d'object est fournit pour elargir la liste d'encodage des attributs les plus communs. ils sont chargés/importés par le fichier **conf/attributes/default-rules.xml ** ==== AttributeRegistry supann ==== pour nos usages dans la federation locale et le besoin d'attribut de type supann, nous avons etendu cette liste en ajoutant notre propre fichier de definition pour supann à la liste d'import ci-dessus Pour le moment seuls les 3 attributs qui nous importent localement ont étés déclarés, un listing complet des attributs supann * https://services.renater.fr/documentation/supann/supann2020/recommandations2020/attributs/liste_des_attributs pourra etre constitué ulterieurement si ncessaire {{ :docpublic:systemes:shibboleth:supann.xml |}} il faudra aussi s'asurer coté Service Provider de "mapper" ces attributs, non presents par defaut exemple d'ajout a l'attribute-map.xml sur un SP3 ==== schema name change v2/v3 ==== attention quand on reprend des attribute-filter maisons de la v2 vers le v3 , les schemas ont changés, exempe "basic:OR" deviens tout simplement "OR" cf https://wiki.shibboleth.net/confluence/display/IDP30/AttributeFilterLegacyNameSpaceMapping et https://wiki.shibboleth.net/confluence/display/IDP30/AttributeFilterConfiguration#AttributeFilterConfiguration-SchemaName exemple de remplacement automatique syntaxte v2 vs v3 via "vi" dans attribute-resolver.xml :1,$s/basic:AttributeRequesterString/Requester/g :1,$s/basic:AttributeValueString/Value/g :1,$s/basic:Rule/Rule/g :1,$s/saml:AttributeRequesterInEntityGroup/InEntityGroup/g :1,$s/basic:ANY/ANY/g :1,$s/basic:OR/OR/g === service.xml ==== * https://www.switch.ch/aai/guides/idp/installation/#shibbolethidp 6.2 * https://portal.nordu.net/display/SWAMID/Example+of+a+standard+attribute+filter+for+Shibboleth+IdP ==== test attributes cli ===== l'outil shell aacli.sh : * https://wiki.shibboleth.net/confluence/display/IDP4/AACLI est bien pratique pour tester la resolution d'attributs et le filtrage, exemple : [root@idpx conf]# ../bin/aacli.sh --requester=https://wikis.domain.fr/sp --configDir=conf/ --principal=test { "requester": "https://wikis.domain.fr/sp", "principal": "test", "attributes": [ { "name": "eduPersonPrincipalName", "values": [ "test@telecom.eu" ] }, { "name": "supannEntiteAffectation", "values": [ "TSP/IS" ] }, { "name": "displayName", "values": [ "Compte Test" ] }, { "name": "sn", "values": [ "STUDENT" ] }, { "name": "supannAutreMail", "values": [ "test@telecom.fr" ] }, { "name": "givenName", "values": [ "Test" ] }, { "name": "mail", "values": [ "test@telecom.eu" ] }, { "name": "eduPersonAffiliation", "values": [ "student", "member" ] } ] } ===== modules ===== ==== liste ==== lister les modules et leur etat d'activation [root@idpx bin]# ./module.sh --list Module: idp.authn.Duo [DISABLED] Module: idp.authn.External [ENABLED] Module: idp.authn.Function [DISABLED] Module: idp.authn.IPAddress [DISABLED] Module: idp.authn.MFA [DISABLED] Module: idp.authn.Password [ENABLED] Module: idp.authn.RemoteUser [DISABLED] Module: idp.authn.RemoteUserInternal [DISABLED] Module: idp.authn.SPNEGO [DISABLED] Module: idp.authn.X509 [DISABLED] Module: idp.authn.Demo [DISABLED] Module: idp.admin.Hello [ENABLED] Module: idp.admin.UnlockKeys [DISABLED] Module: idp.intercept.Consent [DISABLED] Module: idp.intercept.ContextCheck [DISABLED] Module: idp.intercept.ExpiringPassword [DISABLED] Module: idp.intercept.Impersonate [DISABLED] Module: idp.intercept.Warning [DISABLED] Module: idp.profile.CAS [DISABLED] ==== activation consent ==== activer le module de consentement : * https://wiki.shibboleth.net/confluence/display/IDP4/ConsentConfiguration * https://doku.tid.dfn.de/de:shibidp:config-tou [root@idpx bin]# ./module.sh -t idp.intercept.Consent || ./module.sh -e idp.intercept.Consent Enabling idp.intercept.Consent... conf/intercept/consent-intercept-config.xml created views/intercept/attribute-release.vm created views/intercept/terms-of-use.vm created [OK] Depuis 4.1.x ===== Upgrade ===== https://wiki.shibboleth.net/confluence/display/IDP4/Upgrading Exemple ici du passage d'une 4.1.0 en 4.1.2 recuperer les sources [root@idpx opt]# wget https://shibboleth.net/downloads/identity-provider/4.1.2/shibboleth-identity-provider-4.1.2.tar.gz sauver / backup de l'existant [root@idpx opt]# cp -a shibboleth-idp shibboleth-idp-prod-4.1.0 desarchiver et se deplacer dans l'arborescence des sources de cette nouvelle version [root@idpx opt]# tar xvfz shibboleth-identity-provider-4.1.2.tar.gz [root@idpx opt]# cd shibboleth-identity-provider-4.1.2 Lancer l'installation vers la destination de production actuelle (ici /opt/shibboleth-idp) , ainsi il sera fait un upgrade (cela garde la configuration !) [root@idpx shibboleth-identity-provider-4.1.2]# ./bin/install.sh Buildfile: /opt/shibboleth-identity-provider-4.1.2/bin/build.xml install: Source (Distribution) Directory (press to accept default): [/opt/shibboleth-identity-provider-4.1.2] ? Installation Directory: [/opt/shibboleth-idp] ? INFO [net.shibboleth.idp.installer.V4Install:162] - Update from version 4.1.0 to version 4.1.2 INFO [net.shibboleth.idp.installer.BuildWar:103] - Rebuilding /opt/shibboleth-idp/war/idp.war, Version 4.1.2 INFO [net.shibboleth.idp.installer.BuildWar:113] - Initial populate from /opt/shibboleth-idp/dist/webapp to /opt/shibboleth-idp/webpapp.tmp INFO [net.shibboleth.idp.installer.BuildWar:92] - Overlay from /opt/shibboleth-idp/edit-webapp to /opt/shibboleth-idp/webpapp.tmp INFO [net.shibboleth.idp.installer.BuildWar:125] - Creating war file /opt/shibboleth-idp/war/idp.war BUILD SUCCESSFUL Total time: 31 seconds rebuild du war [root@idpx shibboleth-idp]# ./bin/build.sh Buildfile: /opt/shibboleth-idp/bin/build.xml build-war: Installation Directory: [/opt/shibboleth-idp] ? INFO [net.shibboleth.idp.installer.BuildWar:103] - Rebuilding /opt/shibboleth-idp/war/idp.war, Version 4.1.2 INFO [net.shibboleth.idp.installer.BuildWar:113] - Initial populate from /opt/shibboleth-idp/dist/webapp to /opt/shibboleth-idp/webpapp.tmp INFO [net.shibboleth.idp.installer.BuildWar:92] - Overlay from /opt/shibboleth-idp/edit-webapp to /opt/shibboleth-idp/webpapp.tmp INFO [net.shibboleth.idp.installer.BuildWar:125] - Creating war file /opt/shibboleth-idp/war/idp.war BUILD SUCCESSFUL Total time: 6 seconds puis stop/start de tomcat afin de redeployer ce nouveau war . ===== Delegation d'authentification a CAS ===== il existe deux options principales : - module shib-cas-authn d'unicon : https://github.com/Unicon/shib-cas-authn - faire de l'authn/saml via vers un CAS en mode SAML : https://wiki.shibboleth.net/confluence/display/KB/Using+SAML+Proxying+to+another+IdP nous presentons d'abord l'option 1) ==== shib-cas-authn ==== cf readme sur l'URL: https://github.com/Unicon/shib-cas-authn recuperer les sources et desarchiver [root@idpx /opt]# wget https://github.com/Unicon/shib-cas-authn/archive/refs/tags/4.0.0.tar.gz [root@idpx /opt]# tar xvfz 4.0.0.tar.gz shib-cas-authn-4.0.0/ shib-cas-authn-4.0.0/.gitignore on recupere le web.xml vers edit-webapp où on va pouvoir le personaliser avec l'integration de ce module shib-cas-authn [root@idpx shibboleth-idp]# cp dist/webapp/WEB-INF/web.xml edit-webapp/WEB-INF/ ==== shib-cas-authn jar ==== recuperer les deux fichier .jar [root@idpx lib]# pwd /opt/shibboleth-idp/edit-webapp/WEB-INF/lib /opt/shibboleth-idp/edit-webapp/WEB-INF/lib [root@idpx lib]# wget https://github.com/Unicon/shib-cas-authn/releases/download/4.0.0/cas-client-core-3.6.0.jar [root@idpx lib]# wget https://github.com/Unicon/shib-cas-authn/releases/download/4.0.0/shib-cas-authenticator-4.0.0.jar ==== web.xml ==== on ajoute un element //// pour le traitement "ShibCas Auth Servlet" [root@idpx shibboleth-idp]# diff -ur edit-webapp/WEB-INF/web.xml dist/webapp/WEB-INF/web.xml --- edit-webapp/WEB-INF/web.xml 2021-06-02 22:02:21.834552171 +0200 +++ dist/webapp/WEB-INF/web.xml 2021-06-02 20:06:35.110728523 +0200 @@ -171,18 +171,6 @@ shibboleth_jsp /shibboleth - - - - - ShibCas Auth Servlet - net.unicon.idp.externalauth.ShibcasAuthServlet - 4 - - - ShibCas Auth Servlet - /Authn/External/* - :!: on a changé le à l'index 4 , car il y a en a deja 3 avant ! ==== activer le module external ==== si ce n'est pas deja fait, il faut activer l'usag de module "external" * https://wiki.shibboleth.net/confluence/display/IDP4/ExternalAuthnConfiguration [root@idpx shibboleth-idp]# bin/module.sh -t idp.authn.External || bin/module.sh -e idp.authn.External Enabling idp.authn.External... conf/authn/external-authn-config.xml created [OK] ==== parametrage idp.authn.flows=External ==== parametrage du webflow d'authn vers de l'External dans idp.properties en 4.0.1 , puis dans conf/authn/authn.properties en 4.1.0 ! [root@idp4mt shibboleth-idp]# diff -ur authn.properties.dist authn.properties --- authn.properties.dist 2021-06-02 22:50:05.807379051 +0200 +++ authn.properties 2021-06-03 15:43:27.972786269 +0200 @@ -3,6 +3,9 @@ # Regular expression matching login flows to enable, e.g. IPAddress|Password #idp.authn.flows = Password +#begin JP +# Regular expression matching login flows to enable, e.g. IPAddress|Password +#idp.authn.flows=Password idp.authn.flows=External # CAS Client properties (usage loosely matches that of the Java CAS Client) @@ -10,6 +13,39 @@ shibcas.casServerUrlPrefix = https://ssocas6.domain.fr/cas shibcas.casServerLoginUrl = ${shibcas.casServerUrlPrefix}/login +## Shibboleth Server Properties +shibcas.serverName = https://ourIDP.domain.fr + +# By default you always get the AuthenticatedNameTranslator, add additional code to cover your custom needs. +# Takes a comma separated list of fully qualified class names +# shibcas.casToShibTranslators = com.your.institution.MyCustomNamedTranslatorClass +# shibcas.parameterBuilders = com.your.institution.MyParameterBuilderClass + +# Specify CAS validator to use - either 'cas10', 'cas20' or 'cas30' (default) +# shibcas.ticketValidatorName = cas30 + + +# Specify if the Relying Party/Service Provider entityId should be appended as a separate entityId query string parameter +# or embedded in the "service" querystring parameter - `append` (default) or `embed` +# shibcas.entityIdLocation = append + +# Default lifetime and timeout of various authentication methods +#idp.authn.defaultLifetime = PT60M +#idp.authn.defaultTimeout = PT30M + +# Whether to populate relying party user interface information for display +# during authentication, consent, terms-of-use. +#idp.authn.rpui = true + +# Whether to prioritize "active" results when an SP requests more than +# one possible matching login method (V2 behavior was to favor them) +#idp.authn.favorSSO = false + +# Whether to fail requests when a user identity after authentication +# doesn't match the identity in a pre-existing session. +#idp.authn.identitySwitchIsError = false +#end JP + # Default settings for most authentication methods. #idp.authn.defaultLifetime = PT1H #idp.authn.defaultTimeout = PT30M @@ -88,7 +124,8 @@ # Unset if you plan to return full Java Subject from external source #idp.authn.External.addDefaultPrincipals = true # Servlet context-relative path to wherever your implementation lives -idp.authn.External.externalAuthnPath = contextRelative:external.jsp +#idp.authn.External.externalAuthnPath = contextRelative:external.jsp +idp.authn.External.externalAuthnPath = contextRelative:Authn/External copie de no-conversation-state.jsp (utile ?) [root@idpx authn]# cp /opt/shib-cas-authn-4.0.0/IDP_HOME/edit-webapp/no-conversation-state.jsp /opt/shibboleth-idp/edit-webapp/ ==== rebuild ==== apres avoir realisé les parametrages precedents, on rebuild le war [root@idpx bin]# cd /opt/shibboleth-idp/bin [root@idpx bin]# ./build.sh Buildfile: /opt/shibboleth-idp/bin/build.xml build-war: Installation Directory: [/opt/shibboleth-idp] ? INFO [net.shibboleth.idp.installer.BuildWar:103] - Rebuilding /opt/shibboleth-idp/war/idp.war, Version 4.1.0 INFO [net.shibboleth.idp.installer.BuildWar:113] - Initial populate from /opt/shibboleth-idp/dist/webapp to /opt/shibboleth-idp/webpapp.tmp INFO [net.shibboleth.idp.installer.BuildWar:92] - Overlay from /opt/shibboleth-idp/edit-webapp to /opt/shibboleth-idp/webpapp.tmp INFO [net.shibboleth.idp.installer.BuildWar:125] - Creating war file /opt/shibboleth-idp/war/idp.war BUILD SUCCESSFUL Total time: 13 seconds ===== FIXME Ancienne Doc IDPv3 FIXME ===== a suivre pour la V4 en cours de redaction ==== Enregistrement dans une federation ==== dans un premier temps dans la fédération de test Renater https://federation.renater.fr/registry ==== Test login ldap interne ==== ayant positionné par defaut le password scheme via ldap, l'usage d'un login/password de l'annuaire ldap d'etablissement configuré permet d'acceder à la ressource de test renater https://test.federation.renater.fr/test/ressource qui affiche la liste d'attributs envoyés et demande maintenant en v3 la consentement (addon uApprove en v2) Information to be Provided to Service eduPersonPrincipalName teststud@int.fr mail teststud@example.org uid teststud Ask me again at next login Ask me again if information to be provided to this service changes Do not ask me again idp-process.log : 2016-07-03 14:45:51,638 - INFO [net.shibboleth.idp.authn.impl.ValidateUsernamePasswordAgainstLDAP:139] - Profile Action ValidateUsernamePasswordAgainstLDAP: Login by 'teststud' succeeded C2016-07-03 14:51:14,116 - INFO [Shibboleth-Consent-Audit.SSO:241] - 20160703T125114Z|https://test.federation.renater.fr/test/ressource|AttributeReleaseConsent|teststud|eduPersonPrincipalName,mail,uid||true,true,true 2016-07-03 14:51:14,861 - INFO [Shibboleth-Audit.SSO:241] - 20160703T125114Z|urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect|_05d30b93263d3dbca128a0d1bdb5272d|https://test.federation.renater.fr/test/ressource|http://shibboleth.net/ns/profiles/saml2/sso/browser|https://idp3.int.eu/idp/shibboleth|urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST|_afd5c50a6363cebb0030af5e220dce18|teststud|urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport|uid,mail,eduPersonPrincipalName|AAdzZWNyZXQxvKd8LuQ9/WK6sRwUecDTulilU/xNcE1LRr2tf2P8S97xNb9mu4uVLASdS+D5MlyZAWt5NYNLGBuyVeD8n441NlUDVO7uCO8B6PxjUANyWOYmM6UOP7b9jpAC9ED70JLXoz2Bztm4VKeQ9Ia5FxgKJzh37Q==|_c861303bf16b99871bcac75ecca3703b| ==== SSO CAS ==== https://services.renater.fr/federation/docs/installation/idp3/chap08 [root@idp34 src]# wget https://github.com/Unicon/shib-cas-authn3/releases/download/3.2.3/shib-cas-authn3-3.2.3.tar [root@idp34 src]# tar xvf shib-cas-authn3-3.2.3.tar ... shib-cas-authn3-3.2.3/edit-webapp/WEB-INF/lib/cas-client-core-3.4.1.jar shib-cas-authn3-3.2.3/edit-webapp/WEB-INF/lib/shib-cas-authenticator-3.2.3.jar shib-cas-authn3-3.2.3/edit-webapp/no-conversation-state.jsp .. [root@idp34 src]# cp shib-cas-authn3-3.2.3/edit-webapp/WEB-INF/lib/shib-cas-authenticator-3.2.3.jar /opt/shibboleth-idp/edit-webapp/WEB-INF/lib [root@idp34 src]# cp -R shib-cas-authn3-3.2.3/flows/authn/Shibcas/ /opt/shibboleth-idp/flows/authn/ [root@idp34 src]# ls -ltr /opt/shibboleth-idp/flows/authn/Shibcas/ total 8 -rw-r--r-- 1 root root 2290 2 janv. 21:23 shibcas-authn-flow.xml -rw-r--r-- 1 root root 3241 2 janv. 21:23 shibcas-authn-beans.xml [root@idp34 src]# wget http://central.maven.org/maven2/org/jasig/cas/client/cas-client-core/3.5.1/cas-client-core-3.5.1.jar [root@idp34 src]# cp cas-client-core-3.5.1.jar /opt/shibboleth-idp/edit-webapp/WEB-INF/lib/ Modification du Web flow pour utiliser le plugin CAS via /opt/shibboleth-idp/conf/idp.properties [root@idp3 conf]# diff idp.properties idp.properties.dist 100,114c100 < #idp.authn.flows= Password < idp.authn.flows= Shibcas < < # CAS Client properties (usage loosely matches that of the Java CAS Client) < ## CAS Server Properties < shibcas.casServerUrlPrefix = https://cas16.int.eu/cas < shibcas.casServerLoginUrl = ${shibcas.casServerUrlPrefix}/login < < ## Shibboleth Server Properties < shibcas.serverName = https://cas16.int.eu < < # La partie ci-dessous est une fonctionnalité avancée de l'extention shib-cas en question (optionnelle) < # By default you always get the AuthenticatedNameTranslator, add additional code to cover your custom needs. < # Takes a comma separated list of fully qualified class names < # shibcas.casToShibTranslators = com.your.institution.MyCustomNamedTranslatorClass --- > idp.authn.flows= Password declaration du bean Shibcas dans general-auth.xml : [root@idp34 conf]# cd /opt/shibboleth-idp/conf/authn/ [root@idp34 authn]# cp general-authn.xml general-authn.xml.dist [root@idp3 authn]# diff general-authn.xml general-authn.xml.dist 93,98d92 < < < et reconstruction du idp.war + stop / start tomcat [root@idp3 bin]# systemctl start tomcat.service [root@idp3 bin]# /opt/shibboleth-idp/bin/build.sh Installation Directory: [/opt/shibboleth-idp] RETURN (!?) Rebuilding /opt/shibboleth-idp/war/idp.war ... ...done BUILD SUCCESSFUL # on remove tout le deploiement dans l'arboresence tomcat webapps afin d'etre sur que le nouveau idp.war remplace tout [root@idp3 bin]# rm -rf /var/lib/tomcat/webapps/idp [root@idp3 bin]# systemctl start tomcat.service un nouveau test sur https://test.federation.renater.fr/test/ressource montre bien que nous passons par CAS maintenant . ==== attribute filter ==== https://services.renater.fr/federation/docs/installation/idp3/chap10 le nombre important de SP et leur mouvement reguliers dans une large fédération comme celle de Renater impose l'usage d'automatisme pour le gestion des filtre . "Depuis 2015 et l'IDP 2.4 , Shibboleth introduit une nouvelle règle PermitValueRule de type AttributeInMetadata utilisable dans votre fichier de configuration attribute-filter.xml. Cette fonctionnalité vous permet, pour un ensemble de SPs, d'autoriser la diffusion au plus juste des attributs utilisateur, uniquement s'ils sont déclarés comme demandés par le SP dans les méta-données de la fédération. L'option onlyIfRequired permet par ailleurs de ne diffuser l'attribut que s'il est indiqué comme obligatoire." on ajoute les regles proposé sur la doc renater .... puis redeploiement [root@idp3 conf]# vim attribute-filter.xml [root@idp3 shibboleth-idp]# cd ../bin/ [root@idp3 bin]# systemctl stop tomcat.service [root@idp3 bin]# rm -rf /var/lib/tomcat/webapps/idp [root@idp3 bin]# ./build.sh Installation Directory: [/opt/shibboleth-idp] Rebuilding /opt/shibboleth-idp/war/idp.war ... ...done BUILD SUCCESSFUL Total time: 4 seconds [root@idp3 bin]# [root@idp3 bin]# systemctl start tomcat.service un nouveau test sur https://test.federation.renater.fr/test/ressource montre maintenant plus d'attributs . ==== script attibute definition entitlement ==== l'attribut "entitlement" est construit a partir d'un script , cela change entre idp v2 et v3 sur plusieurs points en terme de schema et moteur de script java 1.7 (Rhino) vs 1.8 (Nashorn) ref : https://wiki.shibboleth.net/confluence/display/SHIB2/IdPJava1.8 https://wiki.shibboleth.net/confluence/display/IDP30/ScriptedAttributeDefinition exemple ===== newcerts ===== nouvelle generation de certificats de metadata (autosignés) en cas de changement de hostname et/ou de clonage de VM afin de publier des metadata avec les bon certificats internes pour SAML . ref * https://shib.kuleuven.be/docs/ssl_commands.shtml * https://www.switch.ch/aai/guides/idp/certificate-rollover/ * https://wiki.umbc.edu/display/MW/Updating+the+Shibboleth+IdP's+SSL+Certificate [root@idp3 credentials]# openssl req -x509 -new -out idp3-signing.crt -keyout idp3-signing.key -days 3650 writing new private key to 'idp3-signing.key' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: Country Name (2 letter code) [XX]:FR State or Province Name (full name) []:Essonne Locality Name (eg, city) [Default City]:Evry Organization Name (eg, company) [Default Company Ltd]:IMT Organizational Unit Name (eg, section) []:DISI Common Name (eg, your name or your server's hostname) []:idp3.int.eu Email Address []:admin@int.eu retrait passphrase [root@idp3 credentials]# openssl rsa -in idp3-signing.key -out idp3-signing-np.key Enter pass phrase for idp3-signing.key: writing RSA key idem avec l'encryption et backchannel [root@idp3 credentials]# openssl req -x509 -new -out idp3-encryption.crt -keyout idp3-encryption.key -days 3650 # openssl rsa -in idp3-encryption.key -out idp3-encryption-np.key [root@idp3 credentials]# openssl req -x509 -new -out idp3-backchannel.crt -keyout idp3-backchannel.key -days 3650 # openssl rsa -in idp3-backchannel.key -out idp3-backchannel-np.key retrait de passphrase du p12 : http://blog.armbruster-it.de/2010/03/remove-the-passphrase-from-a-pkcs12-certificate/ [root@idp3 credentials]# openssl pkcs12 -in idp3-backchannel.p12 -nodes -out idp3-p12-p-temp.pem Enter Import Password: MAC verified OK [root@idp3 credentials]# openssl pkcs12 -export -in idp3-p12-p-temp.pem -out idp3-backchannel-np.p12 Enter Export Password: rien Verifying - Enter Export Password: rien bien que cela ne semble pas tres utile dans le cadre de la federation, il convient de mettre a jour le fichier local metadata/idp-metadata.xml afin d'etre consistent avec ces nouveau certificat et entityID + hostname d'URL de services