Chiffrement des assertions par l'IDP
Problématique
Documentation officielle :
Le comportement par défaut de l'IDP Shibboleth est de chiffrer les assertions SAML. Jusqu'à la version 3.x, l'algorithme utilisé par défaut était AES-CBC. Mais cet algorithme est vulnérable, et un attaquant pourrait être en mesure de déchiffrer les assertions.
A partir de la version 4, l'algorithme utilisé par défaut est AES-GCM dans le cas d'une nouvelle installation de l'IDP. Dans le cas d'une migration, l'algorithme AES-CBC est conservé.
Le problème est que tous les SP ne supportent pas AES-GCM. La conséquence de cette situation est qu'un SP qui ne supporte pas AES-GCM ne pourra pas déchiffrer les assertions fournies par un IDP 4.
Sélection de l'algorithme de chiffrement
Cette section décrit plusieurs manières de modifier le comportement de chiffrement de l'IDP. Notre préconisation est de conserver l'algorithme de chiffrement AES-CBC, qui va permettre de maximiser l'interopérabilité de votre IDP dans la fédération.
Néanmoins, rien de vous interdit de mettre en place des comportements plus évolués :
- Conserver l'algorithme par défaut de l'IDP3, et mettre en place des exceptions pour les SP ne supportant le chiffrement AES-GCM - moins vulnérable
- Conserver l'algorithme par défaut de l'IDP4, et mettre en place des exceptions pour les SP ne supportant pas ce chiffrement
Paramétrage global
L'algorithme par défaut est configuré dans le fichier idp.properties
:
- Configuration par défaut de l'IDP 4 :
# The new install default for encryption is now AES-GCM. idp.encryption.config = shibboleth.EncryptionConfiguration.GCM
- Configuration pour utiliser AES-CBC (meilleure compatibilité) :
idp.encryption.config = shibboleth.EncryptionConfiguration.CBC
Paramétrage par SP
Le paramétrage par SP se fait dans la configuration des méta-données metadata-providers.xml
.
L'intérêt de cette configuration est que les modifications peuvent être prises en compte sans redémarrage :
/opt/shibboleth-idp/bin/reload-service.sh -id shibboleth.MetadataResolverService
Chiffrement AES-CBC (idp3) par défaut et AES-GCM (idp4) pour certains SP
Pour paramétrer le plus haut niveau de chiffrement pour certains SP seulement, voici la configuration à appliquer dans le fichier metadata-providers.xml
:
<MetadataProvider id="RenaterMetadata" xsi:type="FileBackedHTTPMetadataProvider" backingFile="%{idp.home}/metadata/sps-renater-metadata.xml" metadataURL="https://pub.federation.renater.fr/metadata/renater/main/main-sps-renater-metadata.xml"> <MetadataFilter xsi:type="SignatureValidation" requireSignedRoot="true" certificateFile="%{idp.home}/credentials/renater-metadata-signing-cert-2016.pem"> </MetadataFilter> <MetadataFilter xsi:type="Algorithm"> <!-- GCM-supporting SPs. --> <md:EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes128-gcm" /> <Entity>https://tested.example.org/sp</Entity> <Entity>https://also-tested.example.org/sp</Entity> <!-- Tag everything with CBC. --> <md:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" /> <ConditionRef>shibboleth.Conditions.TRUE</ConditionRef> </MetadataFilter> </MetadataProvider>
Chiffrement AES-GCM (idp4) par défaut et AES-CBC (idp3) pour certains SP
Pour paramétrer le niveau de chiffrement le plus vulnérable pour certains SP seulement, voici la configuration à appliquer dans le fichier metadata-proviers.xml
:
<MetadataProvider id="RenaterMetadata" xsi:type="FileBackedHTTPMetadataProvider" backingFile="%{idp.home}/metadata/sps-renater-metadata.xml" metadataURL="https://pub.federation.renater.fr/metadata/renater/main/main-sps-renater-metadata.xml"> <MetadataFilter xsi:type="SignatureValidation" requireSignedRoot="true" certificateFile="%{idp.home}/credentials/renater-metadata-signing-cert-2016.pem"> </MetadataFilter> <!-- Affectation d'un algo de chiffrement en fonction du SP --> <MetadataFilter xsi:type="Algorithm"> <!-- CBC-only SPs. --> <md:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" /> <Entity>https://fedregistry.renater.fr</Entity> <Entity>https://un.autre.sp.fr</Entity> </MetadataFilter> </MetadataProvider>