Shibboleth sur NetBSD

Il est indispensable de potasser un minimum avant de se lancer ; voir :

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.

Commencer par installer via pkgsrc :

  • security/openssl (en premier)
  • www/apache22 et www/curl (veiller à avoir $SSLBASE=/usr/pkg)
  • textproc/xerces-c et textprox/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.

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
$ sudo cp -rp cxxtest /usr/local

et éditer cxxtestgen.pl et cxxtestgen.py pour changer le shebang.

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

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.

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>

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 !

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).

  • user/pc/sysadmin/shibboleth-netbsd.txt
  • Dernière modification : 2009/04/05 19:25
  • de 127.0.0.1