| Nächste Überarbeitung | Vorhergehende Überarbeitung |
| de:shibidp:config-sealer [2020/04/14 09:48] – angelegt Silke Meyer | de:shibidp:config-sealer [2024/07/26 10:02] (aktuell) – [Secret Key Management] Link aktualisiert Doreen Liebenau |
|---|
| | <- de:shibidp:config-slo|Single Logout ^ de:shibidp:uebersicht|Überblick: Tutorial zur IdP-Inbetriebnahme ^ de:shibidp:config-encryption|Konfiguration des Verschlüsselungsalgorithmus -> |
| | |
| ====== Secret Key Management ====== | ====== Secret Key Management ====== |
| |
| In der Standardeinstellung speichert der Shibboleth IdP Informationen zu Sitzungen und User Consent client-seitig im Browser, in Cookies und ggf. HTML Local Storage ([[https://wiki.shibboleth.net/confluence/display/IDP4/SecretKeyManagement|siehe Shibboleth Wiki]]). Diese Daten werden durch Verschlüsselung geschützt. Die Keys, die dabei zum Einsatz kommen, sollten regelmäßig getauscht werden, **wenn Sie die oben genannten Informationen nicht in einer [[de:shibidp:config-storage#session-informationen_und_user_consent|IdP-seitigen Datenbank]] ablegen**. Wenn Sie sie in einer Datenbank speichern, können Sie diesen Schritt überspringen. | <callout color="#ff9900" title="Datenbank?"> |
| | Wenn Sie Sessions und User Consent in einer [[de:shibidp:config-storage#session-informationen_und_user_consent|IdP-seitigen Datenbank]] ablegen, können Sie diesen Schritt **überspringen**. |
| | </callout> |
| |
| Laden Sie das [[de:update-sealer-example|Beispiel-Script]] herunter und legen es nach | In der Standardeinstellung speichert der Shibboleth IdP Informationen zu Sitzungen und User Consent clientseitig im Browser, in Cookies und ggf. HTML Local Storage ([[https://shibboleth.atlassian.net/wiki/spaces/IDP5/pages/3199501624/SecretKeyManagement|siehe Shibboleth Wiki]]). Diese Daten werden durch Verschlüsselung geschützt. Die Keys, die dabei zum Einsatz kommen, sollten regelmäßig getauscht werden, wenn Sie die oben genannten Informationen //nicht// serverseitig speichern. |
| |
| <code> | ===== Key-Rollover automatisieren ===== |
| /opt/shibboleth-idp/bin/update-sealer.sh | |
| | <callout color="#ff9900" title="secrets.properties"> |
| | Die folgende Version des Skriptes geht davon aus, dass Sie sensible IdP-interne Informationen in der Datei ''credentials/secrets.properties'' liegen, wie es im IdP 4.x als Standard eingeführt wurde ([[de:shibidp:upgrade#auslagern_von_secrets|Doku]]). |
| | </callout> |
| | |
| | Laden Sie das Beispiel-Skript herunter und legen es nach ''/opt/shibboleth-idp/bin/update-sealer.sh'' (Quelle: [[https://shibboleth.atlassian.net/wiki/spaces/IDP5/pages/3199501624/SecretKeyManagement|Shibboleth Wiki]]). |
| | |
| | <code bash> |
| | #!/bin/bash |
| | |
| | set -e |
| | set -u |
| | |
| | # Default IDP_HOME if not already set |
| | if [ ! -d "${IDP_HOME:=/opt/shibboleth-idp}" ] |
| | then |
| | echo "ERROR: Directory does not exist: ${IDP_HOME}" >&2 |
| | exit 1 |
| | fi |
| | |
| | function get_config { |
| | # Key to lookup (escape . for regex lookup) |
| | local KEY=${1:?"No key provided to look up value"} |
| | # Passed default value |
| | local DEFAULT="${2:-}" |
| | # Lookup key, strip spaces, replace idp.home with IDP_HOME value |
| | local RESULT=$(sed -rn '/^'"${KEY//./\\.}"'\s*=/ { s|^[^=]*=(.*)\s*$|\1|; s|%\{idp\.home\}|'"${IDP_HOME}"'|g; p}' ${IDP_HOME}/conf/idp.properties) |
| | if [ -z "$RESULT" ] |
| | then |
| | local RESULT=$(sed -rn '/^'"${KEY//./\\.}"'\s*=/ { s|^[^=]*=(.*)\s*$|\1|; s|%\{idp\.home\}|'"${IDP_HOME}"'|g; p}' ${IDP_HOME}/credentials/secrets.properties) |
| | fi |
| | # Set if no result with default - exit if no default |
| | echo "${RESULT:-${DEFAULT:?"No value in config and no default defined for: '${KEY}'"}}" |
| | } |
| | |
| | # Get config values |
| | ## Official config items ## |
| | |
| | storefile=$(get_config idp.sealer.storeResource) |
| | versionfile=$(get_config idp.sealer.versionResource) |
| | storepass=$(get_config idp.sealer.storePassword) |
| | alias=$(get_config idp.sealer.aliasBase secret) |
| | ## Extended config items ## |
| | count=$(get_config idp.sealer._count 30) |
| | # default cannot be empty - so "self" is the default (self is skipped for syncing) |
| | sync_hosts=$(get_config idp.sealer._sync_hosts ${HOSTNAME}) |
| | # Run the keygen utility |
| | ${0%/*}/seckeygen.sh \ |
| | --storefile "${storefile}" \ |
| | --storepass "${storepass}" \ |
| | --versionfile "${versionfile}" \ |
| | --alias "${alias}" \ |
| | --count "${count}" |
| | # Display current version |
| | echo "INFO: $(tac "${versionfile}" | tr "\n" " ")" >&2 |
| | for EACH in ${sync_hosts} |
| | do |
| | if [ "${HOSTNAME}" == "${EACH}" ] |
| | then |
| | echo "INFO: Host '${EACH}' is myself - skipping" >&2 |
| | elif ! ping -q -c 1 -W 3 ${EACH} >/dev/null 2>&1 |
| | then |
| | echo "ERROR: Host '${EACH}' not reachable - skipping" >&2 |
| | else |
| | # run scp in the background |
| | scp "${storefile}" "${versionfile}" "${EACH}:${IDP_HOME}/credentials/" & |
| | fi |
| | done |
| </code> | </code> |
| |
| Vergessen Sie nicht das Script ausführbar zu machen: | Machen Sie das Skript ausführbar: |
| |
| <code sh> | <code bash> |
| root@idp:~# chmod 755 /opt/shibboleth-idp/bin/update-sealer.sh | root@idp:~# chmod 755 /opt/shibboleth-idp/bin/update-sealer.sh |
| </code> | </code> |
| |
| Dieses Script liest die Sealer-relevanten Einstellungen aus ./conf/idp-properties und | Dieses Skript liest die Sealer-relevanten Einstellungen aus ''./conf/idp-properties'' und erzeugt damit neue Schlüsselwerte. Dazu legen Sie am besten einen täglichen Cronjob an: |
| erzeugt damit neue Schlüsselwerte. Dazu legen Sie am besten einen täglichen Cron-Job an: | |
| |
| <file cron /etc/cron.d/shibboleth-idp> | <file cron /etc/cron.d/shibboleth-idp> |
| </file> | </file> |
| |
| Hinweis: falls Sie bei der IdP-Installation am Anfang ein zu einfaches Sealer-Passwort vergeben haben | ===== Manuelle Neuvergabe von Sealer-Passwörtern ===== |
| können Sie dieses problemlos ändern indem Sie die Dateien ./credentials/sealer.* löschen und in | Falls Sie bei der IdP-Installation am Anfang ein zu einfaches Sealer-Passwort vergeben haben, können Sie dieses problemlos ändern: Löschen Sie die Dateien ''./credentials/sealer.*'' und vergeben Sie in ''./conf/idp.properties'' neue Passwörter (''idp.sealer.storePassword'' und ''idp.sealer.keyPassword''). |
| ./conf/idp.properties neue Passwörter (idp.sealer.storePassword und idp.sealer.keyPassword) vergeben. | Danach rufen Sie einfach obigen Cronjob manuell auf. Das Skript erstellt die fehlenden Dateien unter Verwendung der neuen Passwörter neu. Achtung: **Sonderzeichen können in Javas .properties-Dateien zu Problemen führen**. Daher raten wir davon ab, bei den Passwörtern Sonderzeichen zu verwenden. |
| Danach rufen Sie einfach obigen Cron-Job manuell auf, das Script erstellt die fehlenden Dateien unter | |
| Verwendung der neuen Passwörter wieder neu. Achten Sie nur darauf dass Sie beim Passwort keine Sonderzeichen verwenden da diese erfahrungsgemäß in Java-properties-Dateien Probleme machen können. | |
| | |
| Referenz zum Shib-Wiki: https://wiki.shibboleth.net/confluence/display/IDP30/SecretKeyManagement | |
| | |
| === Aufnahme in DFN-AAI-Produktivumgebung === | |
| Die Basis-Konfiguration des IdPs ist damit abgeschlossen. Für die Inbetriebnahme des IdP beachten Sie bitte die Hinweise und Empfehlungen unter [[de:production|Produktivbetrieb]]. | |
| |
| ** Weiter geht es mit den [[de:shibidp3attributes|Attribut-Konfigurationen in der DFN-AAI]] ** | {{tag>idp4 tutorial not-included-in-ansible}} |