Skip to content

Image docker 🐳 permettant de mettre en place un fournisseur de service prĂ©-connectĂ© sur la FĂ©dĂ©ration d'identitĂ©s Education-Recherche (FER).

License

Notifications You must be signed in to change notification settings

abes-esr/docker-shibboleth-renater-sp

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

docker-shibboleth-renater-sp

Docker Pulls build-test-pubtodockerhub

Ce dĂ©pĂŽt propose une image docker 🐳 gĂ©nĂ©rique permettant de mettre en place un fournisseur de service prĂ©-connectĂ© sur la FĂ©dĂ©ration d'identitĂ©s Education-Recherche (FER).

Fonctionnement : ce fournisseur de service s'intĂ©gre sur une application tiers en se positionnant en amont des flux HTTP et en jouant le rĂŽle de reverse proxy authentifiant. C'est Ă  dire qu'une requĂȘte HTTP permettant d'accĂ©der Ă  l'application va tout d'abord transiter par cette brique pour ensuite ĂȘtre transmise Ă  l'application cible. L'avantage de cette approche c'est de pouvoir intĂ©grer une authentification SAML sur une application sans avoir Ă  la modifier en profondeur, c'est ce reverse proxy qui se charge de transmettre une preuve de l'authentification Ă  l'application. Cette preuve contient l'identifiant de l'utilisateur ainsi que les attributs fournits par le fournisseur d'identitĂ©s (ex: mail, nom, prĂ©nom, supannEtablissement, etc ...). A noter qu'il existe des avantages mais aussi des inconvĂ©niants Ă  utiliser ce type d'architecture, vous pouvez consulter la documentation qui explique tout cela plus en dĂ©tail.

Technologies : cette image docker utilise un serveur apache (basée sur son image docker officielle) et mod_shib (module Shibboleth s'intégrant dans apache). Ce sont les briques techniques préconisées par RENATER pour implémenter un fournisseur de service.

(le lien pour modifier le schéma)

Comment utiliser cette image ?

Configuration

Pour configurer le conteneur, vous devez lui passer des variables d'environnement, pour cela vous pouvez créer un fichier .env à coté de votre docker-compose.yml en prenant exemple sur les variables d'environnement du docker-compose.yml qui propose des exemples de valeurs en expliquant leur signification.

Si vous souhaitez injecter des configurations apache spécifiques dans la configuration du serveur apache, vous pouvez ajouter des fichiers de configuration via des volumes aux endroits suivants dans le conteneur :

  • /usr/local/apache2/conf/extra/httpd-vhosts-begin.inc.conf et /usr/local/apache2/conf/extra/httpd-vhosts-end.inc.conf : pour injecter de la configuration au niveau global du virtualhost (ici) et (ici)
  • /usr/local/apache2/conf/extra/httpd-vhosts.public_proxy.inc.conf : pour injecter de la configuration au niveau du ProxyPass des URL publiques (ici exactement)
  • /usr/local/apache2/conf/extra/httpd-vhosts.protected_proxy.inc.conf : pour injecter de la configuration au niveau du ProxyPass des URL protĂ©gĂ©es (ici exactement)

Configuration en TEST

  1. Vous avez uniquement besoin de personnaliser les valeurs du .env (cf section ci-dessus) en précisant RENATER_SP_TEST_OR_PROD="TEST", puis vous pouvez lancer votre conteneur puis consulter l'URL https://votre-ip/Shibboleth.sso/Metadata pour récupérer les métadonnées attendue dans l'étape 2 par le guichet RENATER.

  2. Vous devez ensuite enregistrer votre fournisseur de service dans la fédération d'identités Education-Recherche de test. Remarque : pour le certificat (couple clé privé/publique), vous pouvez utiliser celui qui est embarqué dans l'image docker.

  3. Vous pouvez alors tester votre fournisseur de service en naviguant sur l'URL suivante : https://votre-ip/my-protected-url/ (adapter en fonction de la valeur de RENATER_SP_HTTPD_PROTECTED_PATH)

Configuration en PROD

  1. Vous avez besoin de personnaliser les valeurs du .env (cf section ci-dessus) en précisant RENATER_SP_TEST_OR_PROD="PROD"

  2. Vous avez besoin de gĂ©nĂ©rer un couple de clĂ© SSH privĂ©e/publique dĂ©diĂ© pour le dĂ©mon shibboleth qui tournera dans le conteneur. Ces clĂ©s sont ici dans l'image : /etc/shibboleth/ssl/server-demo.key et /etc/shibboleth/ssl/server-demo.crt. Remarque : la clĂ© xxxxxx.key (privĂ©e) est critique et ne doit jamais ĂȘtre partagĂ©e mais pour des raison de dĂ©monstration, un couple de clĂ© server-demo.key et server-demo.crt est inclu dans cette image ce qui permet de tester facilement cette image sans avoir Ă  en gĂ©nĂ©rer une soit mĂȘme. En revanche, cette clĂ© ne doit jamais ĂȘtre utilisĂ©e en production car elle est accessible publiquement dans le code source ici. Pour votre passage en production, nous aurez besoin de gĂ©nĂ©rer un couple de clĂ© vous mĂȘme. Voici les lignes de commandes permettant de gĂ©nĂ©rer un couple de clĂ© auto-signĂ©es avec un long dĂ©lai d'expiration (7300 jours = 20 ans!) comme recommandĂ© par RENATER :

    cd docker-shibboleth-sp/volume/shibboleth/ssl/
    openssl genrsa -out server-prod.key 2048
    openssl req -new -key server-prod.key -out server-prod.csr
    openssl x509 -req -days 7300 -in server-prod.csr -signkey server-prod.key -out server-prod.crt
    
  3. Vous devez ensuite positionner les variables suivantes dans le fichier .env :

    RENATER_SP_CERTIFICATE_CRT=ssl/server-prod.crt
    RENATER_SP_CERTIFICATE_KEY=ssl/server-prod.key
    
  4. Vous devez ensuite lancer votre conteneur puis consulter l'URL https://votre-ip/Shibboleth.sso/Metadata pour récupérer les métadonnées attendue dans l'étape suivante par le guichet RENATER.

  5. Vous devez ensuite enregistrer votre fournisseur de service dans la fédération d'identités Education-Recherche de production

  6. Vous pouvez tester votre fournisseur de service en naviguant sur l'URL suivante : https://votre-ip/my-protected-url/

Port 443 et certificat SSL auto-signé

Le serveur apache du conteneur docker-shibboleth-renater-sp écoute sur le 433 en HTTPS mais utilise un certificat SSL auto-signé. Ce paramétrage est une contrainte de mod_shib qui a besoin que le serveur apache écoute en HTTPS et pas en HTTP.

En effet, HTTP pourrait ĂȘtre thĂ©oriquement plus intĂ©ressant dans le cadre d'une architecture avec deux reverse proxy : un premier (RP d'entreprise) qui gĂšre les URL publiques en HTTPS, puis un second (ce conteneur) qui gĂšre les URL interne d'une application. Dans ce type de configuration pour que le HTTPS auto-signĂ© fonctionne, il est nĂ©cessaire de configurer le premier reverse proxy pour qu'il puisse accepter les certificats ssl auto-signĂ©s. Voici un exemple de configuration avec un serveur apache :

SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off

DĂ©marrer l'application

Vous pouvez vous baser sur le docker-compose.yml exemple pour l'intégrer dans votre application comme un reverse proxy applicatif. A noter que la derniÚre version disponible de l'image est la suivante :

docker pull abesesr/docker-shibboleth-renater-sp:2.0.3

DĂ©veloppements

Comment construire cette image docker ?

Cette image est construite et publiée automatiquement sur dockerhub à l'aide de github action mais il est également possible de la construire localement avec cette commande (utile pour le développement de cette image) :

cd docker-shibboleth-sp/
docker-compose build

Démarrer l'application pour le développement

Pour démarrer l'application depuis le docker-compose exemple :

cd docker-shibboleth-renater-sp/
cp .env-dist .env
# personnalisez les valeurs de .env

docker-compose up

Puis se rendre sur (en ignorant les certificat invalides) :

Comment publier une nouvelle version de cette image ?

Il est nécessaire d'utiliser l'action github create-release.yml, merci de se référer à cette procédure : https://github.com/abes-esr/abes-politique-developpement/blob/main/01-Gestion%20du%20code%20source.md#publier-une-nouvelle-release-dune-application

Voir aussi

About

Image docker 🐳 permettant de mettre en place un fournisseur de service prĂ©-connectĂ© sur la FĂ©dĂ©ration d'identitĂ©s Education-Recherche (FER).

Resources

License

Stars

Watchers

Forks

Languages

  • Shell 59.5%
  • HTML 30.3%
  • Dockerfile 10.2%