Secret Key Management
Datenbank?
Wenn Sie Sessions und User Consent in einer IdP-seitigen Datenbank ablegen, können Sie diesen Schritt überspringen.In der Standardeinstellung speichert der Shibboleth IdP Informationen zu Sitzungen und User Consent clientseitig im Browser, in Cookies und ggf. HTML Local Storage (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.
Key-Rollover automatisieren
secrets.properties
Die folgende Version des Skriptes geht davon aus, dass Sie sensible IdP-interne Informationen in der Dateicredentials/secrets.properties
liegen, wie es im IdP 4.x als Standard eingeführt wurde (Doku).
Laden Sie das Beispiel-Skript herunter und legen es nach /opt/shibboleth-idp/bin/update-sealer.sh
(Quelle: Shibboleth Wiki).
#!/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
Machen Sie das Skript ausführbar:
root@idp:~# chmod 755 /opt/shibboleth-idp/bin/update-sealer.sh
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:
- /etc/cron.d/shibboleth-idp
01 01 * * * root /opt/shibboleth-idp/bin/update-sealer.sh >/dev/null
Manuelle Neuvergabe von Sealer-Passwörtern
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
).
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.