Ab Shibboleth IdP 3.4 wurde eine Einstellung aufgenommen, mit der der Algorithmus eingestellt werden kann, mit dem die Assertions verschlüsselt werden. Der alte Standard-Algorithmus AES-CBC gilt nicht mehr als sicher, daher ist bei neu installierten IdPs ab Version 4.x die Voreinstellung AES-GCM.
Als IdP-Betreiber*in müssen Sie sich daher überlegen, welchen Weg Sie beschreiten wollen:
<EncryptionMethod>
) deklariert werden. Der Shibboleth IdP ist z.B. anhand dieser Angabe in der Lage, eine Assertion gemäß AES-CBC zu verschlüsseln, auch wenn AES-GCM als Default gesetzt ist. Bislang wird dieses Element noch nicht von der DFN-AAI Metadatenverwaltung unterstützt. Wir arbeiten daran, die Metadatenverwaltung entsprechend zu erweitern. In den von der DFN-AAI verteilten eduGAIN-Metadaten ist das Element <EncryptionMethod>
bereits fallweise enthalten und wird von IdPs dann auch ausgewertet (z.B. bei cat.eduroam.org).Wir bemühen uns, die Liste der diesbezüglichen Entity IDs möglichst aktuell zu halten. Hinweise an hotline@aai.dfn.de sind sehr willkommen!
shibboleth.EncryptionConfiguration.CBC
shibboleth.EncryptionConfiguration.GCM
In der Datei ./conf/idp.properties
gibt es eine neue Einstellung, um global, also für alle Service Provider, die Verwendung eines einheitlichen Verschlüsselungsalgorithmus festzulegen. (Verwenden Sie nur eine der beiden Zeilen!)
# alter Algorithmus AES-CBC: idp.encryption.config=shibboleth.EncryptionConfiguration.CBC # oder neuer Algorithmus AES-GCM: idp.encryption.config=shibboleth.EncryptionConfiguration.GCM
Die folgenden zwei Beispiele zeigen, wie Sie für einen oder mehrere SPs den alten Algorithmus erlauben (Quelle: Shibboleth Wiki).
<util:list id="shibboleth.RelyingPartyOverrides"> <bean parent="RelyingPartyByName" c:relyingPartyIds="#{{'HIER-DIE-ENTITYID-EINES-SP', 'ENTITYID-EINES-WEITEREN-SP', '...usw....'}}"> <property name="profileConfigurations"> <list> <bean parent="SAML2.SSO" p:securityConfiguration-ref="shibboleth.SecurityConfiguration.CBC" /> <bean parent="SAML2.ECP" p:securityConfiguration-ref="shibboleth.SecurityConfiguration.CBC" /> <bean parent="SAML2.Logout" p:securityConfiguration-ref="shibboleth.SecurityConfiguration.CBC" /> <bean parent="SAML2.AttributeQuery" p:securityConfiguration-ref="shibboleth.SecurityConfiguration.CBC" /> <bean parent="SAML2.ArtifactResolution" p:securityConfiguration-ref="shibboleth.SecurityConfiguration.CBC" /> </list> </property> </bean> </util:list>
Hier ein Beispiel, bei dem die abweichende Profil-Konfiguration über die Entity Category http://aai.dfn.de/category/no-aes-gcm-support gesteuert wird. Die Zuordnung zu dieser Entity Category wird zentral über eine Liste gesteuert, die die o.g. Entity IDs enthält. Hierbei werden auch SPs erfasst, die über die eduGAIN Downstream-Metadaten in die DFN-AAI kommen.
Die sonstigen Einstellungen/Parameter müssen den lokalen Bedürfnissen bzw. Gegebenheiten angepasst werden!
<util:list id="shibboleth.RelyingPartyOverrides"> <bean parent="RelyingPartyByTag"> <constructor-arg name="candidates"> <list> <bean parent="TagCandidate" c:name="http://macedir.org/entity-category" p:values="http://aai.dfn.de/category/no-aes-gcm-support"/> </list> </constructor-arg> <property name="profileConfigurations"> <list> <bean parent="SAML2.SSO" p:securityConfiguration-ref="shibboleth.SecurityConfiguration.CBC" p:postAuthenticationFlows="#{ {'terms-of-use', 'attribute-release'} }" p:nameIDFormatPrecedence="#{ {'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient'} }" /> <bean parent="SAML2.Logout" p:securityConfiguration-ref="shibboleth.SecurityConfiguration.CBC"/> <bean parent="SAML2.ArtifactResolution" p:securityConfiguration-ref="shibboleth.SecurityConfiguration.CBC"/> </list> </property> </bean> </util:list>
Der Algorithmus kann im IDP 5.x auch in der metadata-providers.xml Datei gesetzt werden. In manchen Konfigurationen kann das zur Übersichtlichkeit beitragen, z.B. wenn die relying-party.xml sowieso schon umfangreich ist.
<!-- Metadaten aller SPs der DFN-AAI Produktivföderation --> <MetadataProvider id="DFN_AAI" xsi:type="FileBackedHTTPMetadataProvider" backingFile="%{idp.home}/metadata/DFN-AAI-sp-metadata.xml" metadataURL="https://www.aai.dfn.de/metadata/dfn-aai-sp-metadata.xml" maxRefreshDelay="PT2H"> <MetadataFilter xsi:type="SignatureValidation" requireSignedRoot="true" certificateFile="%{idp.home}/credentials/dfn-aai.g2.pem"/> <MetadataFilter xsi:type="Algorithm"> <md:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" /> <Entity>https://auth.brockhaus.de/samlauth</Entity> <Entity>https://auth.brockhaus.at/samlauth</Entity> <Entity>https://citaviweb.citavi.com/shibboleth</Entity> <Entity>https://www.degruyter.com/shibboleth</Entity> <Entity>https://dropbox.com/sp</Entity> <Entity>https://fiori.fhhrz.net</Entity> <Entity>https://test-fiori.fhhrz.net</Entity> <Entity>https://shibboleth.highwire.org/entity/secure-sp</Entity> <Entity>https://elibrary.hirzel.de</Entity> <Entity>https://elibrary.hogrefe.de</Entity> <Entity>https://ticket.iop.org/shibboleth</Entity> <Entity>https://login.rlp.net/adfs/services/trust</Entity> <Entity>https://meiner-elibrary.de</Entity> <Entity>https://secure.nature.com/shibboleth</Entity> <Entity>https://www.service4mobility.com/europe</Entity> <Entity>https://elibrary.steiner-verlag.de</Entity> <Entity>https://prd.thieme.de/shibboleth-sp</Entity> <Entity>https://sp.tshhosting.com/shibboleth</Entity> <Entity>https://sp.onlinelibrary.wiley.com/shibboleth</Entity> </MetadataFilter> </MetadataProvider>
Die Reihenfolge der <MetadataFilter/> ist hierbei wichtig. <MetadataFilter/> vom Typ „SignatureValidation“ müssen immer vor <MetadataFilter/> vom Typ „Algorithm“ definiert werden.
Ein neu installierter IdP 5.x loggt den verwendeten Algorithmus ins idp-audit.log
:
127.0.0.2|2020-11-25T09:18:42.067973Z|2020-11-25T09:18:53.319425Z|pingel|https://sp2.local/shibboleth|_f3f9070c525b2e7898b61e4a9c0e3a4b|password|2020-11-25T09:18:47.055896Z|eduPersonEntitlement,samlSubjectID,samlPairwiseID,mail,eduPersonScopedAffiliation|||false|false|AES128-GCM|Redirect|POST||Success||759afa9ead212d7d7f928be18669ff55af4009d6309491145bfcd8c74c5200d8|Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:82.0) Gecko/20100101 Firefox/82.0
Um dieses Logging-Verhalten auch in einem von 3.x aktualisierten IdP zu bekommen, können Sie die Datei conf/audit.xml
durch die Datei dist/conf/audit.xml
ersetzen.
Außerdem loggt der IdP im Loglevel DEBUG für idp.loglevel.messages
die verschlüsselten Assertions. Dort finden Sie den verwendeten Algorithmus (Ausschnitt gekürzt):
[...] <saml2:EncryptedAssertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"> <xenc:EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes128-gcm" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"/>
Bei Shibboleth SPs finden Sie die Liste der unterstützten Verschlüsselungsalgorithmen über den Metadata Handler (/Shibboleth.sso/Metadata) in den Elementen namens <EncryptionMethod>.
Bei anderen SP-Implementierungen existieren i.d.R. ähnliche Mechanismen. Ansonsten hilft ein Blick in die Dokumentation der betreffenden SP-Software oder eine Anfrage beim Customer Support des Herstellers bzw. Plattformbetreibers.