- 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 ======
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**.
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.
===== Key-Rollover automatisieren =====
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]]).
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]]).
#!/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:
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.
{{tag>idp4 tutorial not-included-in-ansible}}