Shibboleth sur NetBSD
Il est indispensable de potasser un minimum avant de se lancer ; voir :
- tutoriel aux JRES 2005 :
- papier aux JRES 2007 :
- les pages du CRU sur le sujet :
Après un moment d'intense doute sur la santé mentale des concepteurs mais en relisant quelques paragraphes bien choisis dans la prose ci-dessus (en particulier dans le dernier lien), il s'avère que c'est relativement simple. À installer aussi finalement.
Installation
Commencer par installer via pkgsrc :
security/openssl
(en premier)www/apache22
etwww/curl
(veiller à avoir$SSLBASE=/usr/pkg
)textproc/xerces-c
ettextprox/xalan-c
Si vous voulez la documentation des paquetages, installez aussi devel/doxygen
.
Suite à la main. Il nous manque (dans cet ordre) : log4cpp et log4shib, xmlsecurity-c et xmltooling-c, cxxtest et enfin OpenSAML et Shibboleth-SP. À la fin, on veut un service provider dans sa version 1.3.
Tous les paquetages suivants utilisent les GNU tools, il suffit de lancer le script configure
avec -
-help
pour trouver les options kivonbien.
- log4cpp : ça se passe là http://log4cpp.sourceforge.net/ (prendre la release 1.0)
- log4shib : ça se passe ici http://shibboleth.internet2.edu/downloads/log4shib/ (prendre la release 1.0)
- xmlsecurity-c : projet de l'Apache Foundation, ici : http://xml.apache.org/security/c/ (prendre la release 1.4.0) ; indiquer à
configure
ou sont xalan-c, xerces-c et OpenSSL. - xmltooling-c : autre projet Apache Foundation, là : http://shibboleth.internet2.edu/downloads/opensaml/cpp/2.0/xmltooling-1.0.tar.gz (release 1.0 donc). Le
configure
m'a fait des misères :
checking XML-Security version... OK configure: error: unable to link with XML-Security
Le config.log
est explicite :
ld: warning: libxalan-c.so, needed by /usr/local/lib/libxml-security-c.so, not found (try using -rpath or -rpath-link) ld: warning: libxalanMsg.so, needed by /usr/local/lib/libxml-security-c.so, not found (try using -rpath or -rpath-link)
J'ai donc dû aider un peu ld(1) avec un $LDFLAGS
bien senti :
$ env LDFLAGS="-L/usr/pkg/lib -L/usr/lib -L/lib -lxalan-c -lxalanMsg" \ ? ./configure --with-log4shib=/usr/local --with-xerces=/usr/pkg \ ? --with-xalan=/usr/pkg --with-xmlsec=/usr/local --with-openssl=/usr/pkg \ ? --with-curl=/usr/pkg && gmake && sudo gmake install
- cxxtest : prendre la version 3.10.1 ici http://cxxtest.sourceforge.net/
$ sudo cp -rp cxxtest /usr/local
et éditer cxxtestgen.pl
et cxxtestgen.py
pour changer le shebang.
- Pour avoir un Shibboleth SP 1.3, il faut prendre OpenSAML en 1.1.1, par exemple ici : ftp://ftp.cru.fr/pub/shibboleth/opensaml/cpp/1.1.1/opensaml-1.1.1.tar.gz
Voilà, on a des bibliothèques dans /usr/local/lib
, un module Apache /usr/local/libexec/mod_shib_22.so
et un daemon /usr/local/sbin/shibd
. On a aussi des fichiers de config dans /usr/local/etc
.
Penser à peupler /etc/ld.so.conf
avec :
/usr/pkg/lib /usr/local/lib
Configuration
Fichiers de configuration et scripts
On va rejoindre la fédération de test du CRU. Charger les exemples http://federation.cru.fr/test/exemples/conf-sp13-cru.tar.gz Dans la tarball, on trouve des fichiers de configuration et plusieurs scripts.
Le serveur a besoin de 2 certificats :
- l'un pour les clients HTTPS, celui de votre serveur Apache donc
- un autre pour discuter avec l'IdP
Dans les fichiers du CRU, dans le script metadatarefresh.sh
, changer le shebang pour utiliser /usr/pkg/bin/bash
(le script utilise une syntaxe spécifique à bash(1) qui n'est pas exécutable par le sh(1) Bourne).
metadatarefres.sh
appelle /usr/local/sbin/siterefresh
; ce binaire (qui ne connaît pas la notion de proxy apparemment) charge en HTTP le fichier $METADATA_URL
; pour nous c'est http://federation.cru.fr/deploiement
. Ça n'est dit nulle-part mais ouvrir en sortie tcp/80
.
Ce script doit tourner régulièrement, l'ajouter en crontab(5) ; la doc dit :
30 4 * * * /usr/local/etc/shibboleth/metadatarefresh.sh SP
Pour durcir on ajoute un wrapper qui vérifie que federation.cru.fr
a bien l'IP 195.220.94.183
et on restreint en sortie sur tcp/80
à cette IP (ipf(8) est votre ami). En cas de changement d'adresse, email à netadmin@
et erreur syslog(3). C'est notre wrapper /usr/local/eila/shib-md-refresh.sh
qu'on met en crontab(5) à la place.
Le daemon
La documentation recommande de surveiller le dameon shibd
. Monit fait très bien l'affaire (pkgsrc : sysutils/monit
).
On crée un petit script /usr/local/eila/shibd.sh
(qui accepte les arguments start
, stop
, restart
et status
) et on l'appelle /etc/rc.local
pour qu'il soit lancé au démarrage du système.
Bien faire attention à avoir un certificat auto-signé pour discuter entre le SP et l'IdP (sans quoi, si le certificat est signé par une AC non-reconnue, voir avec le CRU pour que l'AC soit intégrée aux métadonnées).
Le daemon shibd
se configure avec le fichier /usr/local/etc/shibboleth/shibboleth.xml
. En particulier, configurer :
... <UnixListener address="/var/run/shib-shar.sock"/> ... <Host name="shibboleth.eila.univ-paris-diderot.fr"> <!-- requireSession = false car ShibRequireSession vaut On dans la conf' apache --> <!-- malgre cette note, ca marche bien avec true --> <Path name="tests" authType="shibboleth" requireSession="true"/> ... <Applications id="default" providerId="https://shibboleth.eila.univ-paris-diderot.fr/tests" homeURL="https://shibboleth.eila.univ-paris-diderot.fr/tests/index.html" ... <Sessions lifetime="7200" timeout="3600" checkAddress="false" consistentAddress="true" handlerURL="/tests/Shibboleth.sso" handlerSSL="false" idpHistory="true" idpHistoryDays="7"> ... <SessionInitiator isDefault="true" id="example" Location="/WAYF/idp.example.org" wayfURL="http://federation.cru.fr/wayftest/" ... supportContact="netadmin@eila.univ-paris-diderot.fr" ... <MetadataProvider type="edu.internet2.middleware.shibboleth.metadata.provider.XMLMetadata" uri="/usr/local/etc/shibboleth/cru-test-metadata.xml" /> ... <Key> <Path>/usr/local/etc/shibboleth/shib-sp-idp.key</Path> </Key> <Certificate> <Path>/usr/local/etc/shibboleth/shib-sp-idp.crt</Path> </Certificate>
Apache
Passons à Apache : ajoutons :
Include "/usr/local/etc/shibboleth/apache22.config"
dans le virtual host concerné (pensez à gérer votre /cgi-bin
au passage pour le CGI de test shibenv.cgi
que vous trouverez ici : http://shib.kuleuven.be/download/sp/test_scripts/shibenv.pl.txt dans /users/htdocs/web/cgi-bin
; changer le shebang, les droits, etc…).
Dans /usr/local/etc/shibboleth/apache22.config
, modifier :
<Location /tests> AuthType shibboleth ShibRequireSession On require valid-user </Location>
En principe vous devez aussi avoir :
LoadModule mod_shib /usr/local/libexec/mod_shib_22.so
...
ShibSchemaDir /usr/local/share/xml/shibboleth
ShibConfig /usr/local/etc/shibboleth/shibboleth.xml
Configurez /etc/newsyslog.conf
en reprenant les journaux de shibd
et Apache.
C'est prêt, plus qu'à tester !
La fédération de test
S'inscrire à la liste federation-utilisateurs@cru.fr
sur le site du CRU http://listes.cru.fr/sympa puis se connecter à https://federation.cru.fr/test/gestion/enregistrement/sp pour s'enregistrer dans la fédération de test.
Bien noter l'URL de votre formulaire pour pouvoir modifier des paramètres par la suite.
Pour choisir les attributs : http://federation.cru.fr/cru/attributs.html
Lancer les daemons shibd
puis httpd
et testons avec notre CGI, pour moi : https://shibboleth.eila.univ-paris-diderot.fr/tests/cgi-bin/shibenv.cgi
On peut consulter les journaux sur l'IdP :
Voilà, plus qu'à jouer avec les variables d'environnement dans le code de votre application, par exemple $ENV{REMOTE_USER}
(Perl) aka $_SERVER['REMOTE_USER']
(PHP).