Einbettung einer lokalen Software eines
Föderationsmitgliedes zur Bereitstellung in einem Föderationsumfeld (DFN-AAI)
Bachelorarbeit im Studiengang Informatik
Fabian Mangels <fabian@mangels.it>
Bremerhaven, 20.02.2019
Gliederung
1
Einleitung
2
Grundlagen
3
Vorhandene Komponenten
4
Praktische Umsetzung
5
Fazit und Ausblick
Einleitung
Herausforderungen
• Zunehmende Menge an digitalen Forschungsdaten – viele sogar einzigartig
• Bedarf an Rechenleistung steigt
• Daten- und Informationsaustausch in einem internationalen Forschungsumfeld
• Lösung: International vernetzte Forschungsdateninfrastruktur
• Helmholtz-Datenföderation (HDF)
• Deutsches Forschungsnetz (DFN)
• Vertrauensvolle Infrastruktur bzw. Föderation – DFN-AAI
• Föderatives Identitätsmanagement (FIM)
Herausforderungen
• Zunehmende Menge an digitalen Forschungsdaten – viele sogar einzigartig
• Bedarf an Rechenleistung steigt
• Daten- und Informationsaustausch in einem internationalen Forschungsumfeld
• Lösung: International vernetzte Forschungsdateninfrastruktur
• Helmholtz-Datenföderation (HDF)
• Deutsches Forschungsnetz (DFN)
• Vertrauensvolle Infrastruktur bzw. Föderation – DFN-AAI
• Föderatives Identitätsmanagement (FIM)
Fabian Mangels Hochschule Bremerhaven 2
Szenario
• Bereitstellung einer lokalen Ressource in einer Föderation (DFN-AAI)
• „Benötigte Komponente“ wurde im Zuge der Ausarbeitung erstellt
• SP-IdP-Proxy als Einstiegspunkt für den Fremdnutzer
Abbildung 1: Vereinfachter Überblick des Szenarios
Grundlagen
Identitätsmanagement (IdM)
„Identitätsmanagement liefert die notwendigen Grundlagen zu jedweder Form von personalisiertem und berechtigtem Zugriff auf schützenswerte Ressourcen, Dienste und Systeme und bildet somit einen elementaren Baustein des IT-Sicherheitsmanagements“
[JD08, S. 225].
Grundlegende Konzepte:
• Authentifizierung
• Autorisierung
Zentrale Bestandteile des IdMs:
• Digitale Identitäten einer Entität
• Identitätsspeicher
• Integration von Identitätsspeichern
• Identitätsmanagement-Prozesse
Identitätsmanagement (IdM)
„Identitätsmanagement liefert die notwendigen Grundlagen zu jedweder Form von personalisiertem und berechtigtem Zugriff auf schützenswerte Ressourcen, Dienste und Systeme und bildet somit einen elementaren Baustein des IT-Sicherheitsmanagements“
[JD08, S. 225].
Grundlegende Konzepte:
• Authentifizierung
• Autorisierung
Zentrale Bestandteile des IdMs:
• Digitale Identitäten einer Entität
• Identitätsspeicher
• Integration von Identitätsspeichern
• Identitätsmanagement-Prozesse
Fabian Mangels Hochschule Bremerhaven 4
Identitätsmanagement (IdM)
„Identitätsmanagement liefert die notwendigen Grundlagen zu jedweder Form von personalisiertem und berechtigtem Zugriff auf schützenswerte Ressourcen, Dienste und Systeme und bildet somit einen elementaren Baustein des IT-Sicherheitsmanagements“
[JD08, S. 225].
Grundlegende Konzepte:
• Authentifizierung
• Autorisierung
Zentrale Bestandteile des IdMs:
• Digitale Identitäten einer Entität
• Identitätsspeicher
• Integration von Identitätsspeichern
• Identitätsmanagement-Prozesse
Identitätsverteilung
• Verwirklichung organisationsübergreifender Geschäftsprozesse
• Sicherer und vertrauensvoller Austausch von Daten und digitaler Identitäten
• Föderatives Identitätsmanagement (FIM)
„Lokal authentifizieren, global autorisieren“ [ABB
+18, vgl. S. 4f.].
Kernkomponenten des verteilten Ansatzes:
• Entität
• Client
• Identitätsanbieter (IdP)
• Diensteanbieter (SP)
• Single Sign-on , Single Log-out
• Nutzerzentriertes Identitätsmanagement
Fabian Mangels Hochschule Bremerhaven 5
Identitätsverteilung
• Verwirklichung organisationsübergreifender Geschäftsprozesse
• Sicherer und vertrauensvoller Austausch von Daten und digitaler Identitäten
• Föderatives Identitätsmanagement (FIM)
„Lokal authentifizieren, global autorisieren“ [ABB
+18, vgl. S. 4f.].
Kernkomponenten des verteilten Ansatzes:
• Entität
• Client
• Identitätsanbieter (IdP)
• Diensteanbieter (SP)
• Single Sign-on , Single Log-out
• Nutzerzentriertes Identitätsmanagement
Identitätsverteilung
• Verwirklichung organisationsübergreifender Geschäftsprozesse
• Sicherer und vertrauensvoller Austausch von Daten und digitaler Identitäten
• Föderatives Identitätsmanagement (FIM)
„Lokal authentifizieren, global autorisieren“ [ABB
+18, vgl. S. 4f.].
Kernkomponenten des verteilten Ansatzes:
• Entität
• Client
• Identitätsanbieter (IdP)
• Diensteanbieter (SP)
• Single Sign-on , Single Log-out
• Nutzerzentriertes Identitätsmanagement
Fabian Mangels Hochschule Bremerhaven 5
Vorhandene Komponenten
SAML i
• Security Assertion and Markup Language
• Transport von Authentifikations- und Autorisierungsinformationen im browserbasierten Umfeld
• XML-Standard, der von OASIS im Mai 2002 spezifiziert wurde
• Bestandteile des XML- Frameworks :
•
Assertions– Authentisierungs-, Autorisierungs- oder Attributaussagen
•
Protocols– Anfrage- und Antwortprotokolle für die Übermittlung der Assertions
•
Bindings– Abbildung des SAML-Protokolls auf Nachrichten- und Kommunikationsprotokolle
•
Profiles– Zusammenspiel von
Assertions,
Protocolsund
Bindings(Randbedingungen)
Fabian Mangels Hochschule Bremerhaven 6
SAML i
• Security Assertion and Markup Language
• Transport von Authentifikations- und Autorisierungsinformationen im browserbasierten Umfeld
• XML-Standard, der von OASIS im Mai 2002 spezifiziert wurde
• Bestandteile des XML- Frameworks :
• Assertions – Authentisierungs-, Autorisierungs- oder Attributaussagen
• Protocols – Anfrage- und Antwortprotokolle für die Übermittlung der Assertions
• Bindings – Abbildung des SAML-Protokolls auf Nachrichten- und Kommunikationsprotokolle
• Profiles – Zusammenspiel von Assertions , Protocols und Bindings (Randbedingungen)
SAML ii
1 < s a m l 2 : A t t r i b u t e S t a t e m e n t >
< s a m l 2 : A t t r i b u t e FriendlyName ="cn" Name="urn:oid:2.5.4.3" NameFormat="
urn:oasis:names:tc:SAML:2.0:attrname -format:uri">
3 < s a m l 2 : A t t r i b u t e V a l u e > Fabian Mangels </ s a m l 2 : A t t r i b u t e V a l u e >
</ s a m l 2 : A t t r i b u t e >
5 < s a m l 2 : A t t r i b u t e FriendlyName ="mail" Name="urn:oid:0.9.2342.19200300.100.1.3"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname -format:uri">
< s a m l 2 : A t t r i b u t e V a l u e > f a b i a n . mangels@awi . de</ s a m l 2 : A t t r i b u t e V a l u e >
7 </ s a m l 2 : A t t r i b u t e >
< s a m l 2 : A t t r i b u t e FriendlyName ="sn" Name="urn:oid:2.5.4.4" NameFormat="
urn:oasis:names:tc:SAML:2.0:attrname -format:uri">
9 < s a m l 2 : A t t r i b u t e V a l u e > Mangels </ s a m l 2 : A t t r i b u t e V a l u e >
</ s a m l 2 : A t t r i b u t e >
11 </ s a m l 2 : A t t r i b u t e S t a t e m e n t >
Listing 1: SAML-Assertion – AttributeStatement
Fabian Mangels Hochschule Bremerhaven 7
LDAP
• Lightweight Directory Access Protocol
• Protokoll um mit Verzeichnisdiensten (Identitätsspeicher) zu operieren
• Internetstandard, wird von der IETF fortlaufend weiterentwickelt
• RFC 4510, 4511
Abbildung 2: Verwendeter LDAP-Namensraum (DIT)
DFN-AAI i
• Authentication and Authorization Infrastructure
• Infrastruktur für Attributaustausch und Identitätsfeststellungen jener Entität
• DFN-Verein als Föderationsbetreiber
• Aktive Teilnahme erfordert mind. einen IdP und die Einhaltung der Policies (Verlässlichkeitsklassen)
• Shibboleth als IdP / SP
• Vetrauen durch signierte Metadaten an zentraler Stelle
Fabian Mangels Hochschule Bremerhaven 9
DFN-AAI ii
Abbildung 3: Grundlegende SSO-Interaktion in der DFN-AAI [Pem18b, vgl. S. 11]
DFN-AAI iii
Abbildung 4: SAML 2.0 — Single Sign-on [HCH
+05, WC08, vgl. S. 15, S. 8]
Shibboleth
• Open Source -Software
• IdP / SP im SAML-Kontext
• Entwicklung erfolgt durch das Internet2 -Projekt und OASIS seit 2000
• Shibboleth als Synonym für SAML-basiertes Web-SSO
• Bereitstellung von Attributen, Identifizierung des Nutzers, Autorisierung am SP
1. Produktivföderation ( Advanced ) + eduGAIN : https://shib-idp.awi.de/idp/shibboleth 2. Testföderation:
https://shib-idp2.awi.de/idp/shibboleth
Shibboleth
• Open Source -Software
• IdP / SP im SAML-Kontext
• Entwicklung erfolgt durch das Internet2 -Projekt und OASIS seit 2000
• Shibboleth als Synonym für SAML-basiertes Web-SSO
• Bereitstellung von Attributen, Identifizierung des Nutzers, Autorisierung am SP
1. Produktivföderation ( Advanced ) + eduGAIN : https://shib-idp.awi.de/idp/shibboleth 2. Testföderation:
https://shib-idp2.awi.de/idp/shibboleth
Fabian Mangels Hochschule Bremerhaven 12
Unity IdM
• Open Source -Software
• Vielseitige Identitätsmanagementlösung
• In Java geschrieben
• Verwendet einen Jetty HTTP-Server und standardmäßig die DB H2
• Unterstützt viele verschiedene Authentifizierungsprotokolle
• Ermöglicht „einfache“ Integration in ein bestehendes IdM
• Verwendung im Szenario als SP-IdP-Proxy :
• Admin-Endpunkt
• Nutzerprofil-Endpunkt
• RESTful API-Endpunkt
• SAML-Authentifizierungscontroller
Unity IdM
• Open Source -Software
• Vielseitige Identitätsmanagementlösung
• In Java geschrieben
• Verwendet einen Jetty HTTP-Server und standardmäßig die DB H2
• Unterstützt viele verschiedene Authentifizierungsprotokolle
• Ermöglicht „einfache“ Integration in ein bestehendes IdM
• Verwendung im Szenario als SP-IdP-Proxy :
• Admin-Endpunkt
• Nutzerprofil-Endpunkt
• RESTful API-Endpunkt
• SAML-Authentifizierungscontroller
Fabian Mangels Hochschule Bremerhaven 13
OpenLDAP
• Open Source -Software
• Referenzimplementierung des LDAP (RFC 4511)
• Entwicklung durch die OpenLDAP Foundation
• In der Programmiersprache C geschrieben
• Eigenständiger LDAP-Server bzw. -Daemon – slapd
• Diverse Bibliotheken und weitere nützliche Werkzeuge
• Agiert als Identitätsspeicher im Szenario
VMware vRealize Automation (vRA)
• Zentrale Plattform ( Marketplace )
• Anforderung von IT-Diensten durch Nutzer
• Verwaltung von Cloud- bzw. IT-Ressourcen durch Administratoren
• On-Demand -Dienste
• Kommerzielle SW des US-amerikanischen Unternehmens VMware
• Bereitstellung im Umfeld der DFN-AAI-Föderation
• Anmeldung an der Plattform durch Nutzer aus dem erwähnten LDAP-Verzeichnisdienst
Fabian Mangels Hochschule Bremerhaven 15
Praktische Umsetzung
Überblick der Umsetzung i
Abbildung 5: Kontextdiagramm des betrachteten Szenarios
Überblick der Umsetzung ii
Vorarbeiten – Shibboleth
1 < MetadataProvider i d ="LocalMetadata" x s i : t y p e ="FilesystemMetadataProvider"
m e t a d a t a F i l e ="%{idp.home}/metadata/local -unitysrv1.xml"/ >
Listing 2: Eintragung der lokalen Metadatendatei im Shibboleth IdP
1 < A t t r i b u t e F i l t e r P o l i c y i d ="unity">
< PolicyRequirementRule x s i : t y p e ="OR">
3 < Rule x s i : t y p e ="Requester" value ="https://unitysrv1.awi.de" / >
</ PolicyRequirementRule >
5 < A t t r i b u t e R u l e a t t r i b u t e I D ="mail" permitAny ="true" / >
< A t t r i b u t e R u l e a t t r i b u t e I D ="surname" permitAny ="true" / >
7 < A t t r i b u t e R u l e a t t r i b u t e I D ="givenName" permitAny ="true" / >
< A t t r i b u t e R u l e a t t r i b u t e I D ="commonName" permitAny ="true" / >
9 < A t t r i b u t e R u l e a t t r i b u t e I D ="displayName" permitAny ="true" / >
</ A t t r i b u t e F i l t e r P o l i c y >
Listing 3:
Angewandte Filterrichtlinie im
ShibbolethIdP
Fabian Mangels Hochschule Bremerhaven 18
Vorarbeiten – Shibboleth
< MetadataProvider i d ="LocalMetadata" x s i : t y p e ="FilesystemMetadataProvider"
m e t a d a t a F i l e ="%{idp.home}/metadata/local -unitysrv1.xml"/ >
Listing 2: Eintragung der lokalen Metadatendatei im Shibboleth IdP
1 < A t t r i b u t e F i l t e r P o l i c y i d ="unity">
< PolicyRequirementRule x s i : t y p e ="OR">
3 < Rule x s i : t y p e ="Requester" value ="https://unitysrv1.awi.de" / >
</ PolicyRequirementRule >
5 < A t t r i b u t e R u l e a t t r i b u t e I D ="mail" permitAny ="true" / >
< A t t r i b u t e R u l e a t t r i b u t e I D ="surname" permitAny ="true" / >
7 < A t t r i b u t e R u l e a t t r i b u t e I D ="givenName" permitAny ="true" / >
< A t t r i b u t e R u l e a t t r i b u t e I D ="commonName" permitAny ="true" / >
9 < A t t r i b u t e R u l e a t t r i b u t e I D ="displayName" permitAny ="true" / >
</ A t t r i b u t e F i l t e r P o l i c y >
Listing 3: Angewandte Filterrichtlinie im Shibboleth IdP
Vorarbeiten – Unity IdM
# (Issuer field). This should be unique URI which identifies the server.
2 u n i t y . saml . r e q u e s t e r . r e q u e s t e r E n t i t y I d = h t t p s : / / u n i t y s r v 1 . awi . de
4 #Federation metadata configured trusted IdPs:
u n i t y . saml . r e q u e s t e r . metadataSource . f e d e r a t i o n . u r l = h t t p : / /www . a a i . dfn . de/ f i l e a d m i n /metadata/ dfn−aai−t e s t−metadata . xml
6 u n i t y . saml . r e q u e s t e r . metadataSource . f e d e r a t i o n . p e r M e t a d a t a T r a n s l a t i o n P r o f i l e = s y s : samlShib
Listing 4: Einstellungen des SAML-Authentifizierungscontrollers [UT16]
• Grundeinstellungen an SW
• Weitere Konfigurationen an den benötigten Endpunkten
Fabian Mangels Hochschule Bremerhaven 19
Vorarbeiten – Hashverfahren i
ID KDF SALT (#Zeichen) HASH (#Zeichen)
DES (Data Encryption Stan- dard)
2 11
1 MD5 (Message Digest 5) ≤ 16 22
5 SHA-256 (seit glibc 2.7) ≤ 16 43
6 SHA-512 (seit glibc 2.7) ≤ 16 86
Tabelle 1: Unterstützte KDFs in der crypt(3) -Funktion [Lin18]
• userPassword: {CRYPT}$ ID $rounds= X $ SALT $ HASH
• Dabei gilt: ID ∈ {1,5,6}, 1000 ≤ X ≤ 999999999,
SALT , HASH ∈ {[a-z]
∗,[A-Z]
∗,[0-9]
∗,[.]
∗,[/]
∗}
Vorarbeiten – Hashverfahren i
ID KDF SALT (#Zeichen) HASH (#Zeichen)
DES (Data Encryption Stan- dard)
2 11
1 MD5 (Message Digest 5) ≤ 16 22
5 SHA-256 (seit glibc 2.7) ≤ 16 43
6 SHA-512 (seit glibc 2.7) ≤ 16 86
Tabelle 1: Unterstützte KDFs in der crypt(3) -Funktion [Lin18]
• userPassword: {CRYPT}$ ID $rounds= X $ SALT $ HASH
• Dabei gilt: ID ∈ {1,5,6}, 1000 ≤ X ≤ 999999999, SALT , HASH ∈ {[a-z]
∗,[A-Z]
∗,[0-9]
∗,[.]
∗,[/]
∗}
Fabian Mangels Hochschule Bremerhaven 20
Vorarbeiten – Hashverfahren ii
• Apache-Library „commons-codec-1.11.jar“
• „org.apache.commons.codec.digest.Crypt“
p r i v a t e S t r i n g [ ] c r y p t ( S t r i n g password , CryptParams params ) {
2 S t r i n g s a l t C r y p t = g e n S a l t C r y p t ( params . g e t S a l t L e n g t h ( ) ) ; S t r i n g c r y p t = C r y p t . c r y p t ( password ,
4 "$" + params . g e t I d H a s h i n g A l g o r i t h m ( ) + "$rounds=" + params . getRounds ( ) + "$" + s a l t C r y p t ) ;
r e t u r n c r y p t . s p l i t ("\\$") ;
6 }
Listing 5: Java – Erzeugung eines crypt(3)-Passworthashes
Vorarbeiten – Hashverfahren iii
p r i v a t e Random random = new SecureRandom ( ) ;
2 p r i v a t e s t a t i c f i n a l S t r i n g B64T = "./0123456789
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
4 p r i v a t e S t r i n g g e n S a l t C r y p t (f i n a l i n t num) {
f i n a l S t r i n g B u i l d e r s a l t S t r i n g = new S t r i n g B u i l d e r ( ) ;
6 f o r (i n t i = 1 ; i <= num ; i + + ) {
s a l t S t r i n g . append ( B64T . c h a r A t ( random . n e x t I n t ( B64T . l e n g t h ( ) ) ) ) ;
8 }
r e t u r n s a l t S t r i n g . t o S t r i n g ( ) ;
10 }
Listing 6: Java – Erzeugung eines crypt(3) - Salts
Fabian Mangels Hochschule Bremerhaven 22
Vorarbeiten – Hashverfahren iv
p r i v a t e s t a t i c f i n a l i n t CRYPT_HASH_POS = 4 ;
2
p r i v a t e boolean v e r i f y C r y p t ( PasswordInfo stored , S t r i n g password ) {
4 CryptParams params = new CryptParams ( s t o r e d . getMethodParams ( ) ) ;
S t r i n g c r y p t = C r y p t . c r y p t ( password , "$" + params . g e t I d H a s h i n g A l g o r i t h m ( ) + "
$rounds=" + params . getRounds ( )
6 + "$" + new S t r i n g ( s t o r e d . g e t S a l t ( ) , StandardCharsets . UTF_8 ) ) ; S t r i n g [ ] c r y p t P a r t s = c r y p t . s p l i t ("\\$") ;
8 byte[ ] testedHash = c r y p t P a r t s [ CRYPT_HASH_POS ] . g e t B y t e s ( StandardCharsets . UTF_8 ) ; r e t u r n A r r a y s . areEqual ( testedHash , s t o r e d . getHash ( ) ) ;
10 }
Listing 7: Java – Verifikation eines crypt(3) -Passworts
Überblick der Umsetzung ii
Abbildung 6: Bausteinsicht der benötigten Komponente
Implementierung
• Zwei Bash -Skripte auf zwei separaten VMs (flexibel)
• Properties -Dateien, Variablen- und Methodennutzung
• Kommunikation über verschlüsselten Transportkanal (SSH, SCP, HTTPS)
• Sichtbarkeit von Passwörtern
• Protokollierung
• init -Skripte für beide Prozesse („ /etc/init.d/ “)
• Eigene Systembenutzer zur Ausführung
• Verschlüsselung der LDIF-Dateien via One-time Password (OTP) – „ openssl “
Implementierung – Benutzer-Entitätensynchronisation I
u n i t y S e r v e r . core . enableLowLevelEvents = t r u e
2 u n i t y S e r v e r . core . s c r i p t . n . f i l e =$ { CONF } / s c r i p t s / myGroovy_basicEvents . groovy u n i t y S e r v e r . core . s c r i p t . n . t r i g g e r = methodInvocation . submitEnquiryResponse
Listing 8: Aktivierung der „ Low Level Events “ in Unity IdM [UT18]
• entityId_<entityId>_methodInvocation.submitEnquiryResponse_<timestamp>.unity
• entityId_<entityId>_methodInvocation.setEntityCredential_<timestamp>.unity
• entityId_<entityId>_methodInvocation.removeEntity_<timestamp>.unity
• entityId_<entityId>_methodInvocation.createAttribute_<attributeName>_
<timestamp>.unity
• entityId_<entityId>_methodInvocation.setAttribute_<attributeName>_
<timestamp>.unity
• entityId_<entityId>_methodInvocation.removeAttribute_<attributeName>_
<timestamp>.unity
Fabian Mangels Hochschule Bremerhaven 26
Implementierung – Benutzer-Entitätensynchronisation I
1 u n i t y S e r v e r . core . enableLowLevelEvents = t r u e
u n i t y S e r v e r . core . s c r i p t . n . f i l e =$ { CONF } / s c r i p t s / myGroovy_basicEvents . groovy
3 u n i t y S e r v e r . core . s c r i p t . n . t r i g g e r = methodInvocation . submitEnquiryResponse
Listing 8: Aktivierung der „ Low Level Events “ in Unity IdM [UT18]
• entityId_<entityId>_methodInvocation.submitEnquiryResponse_<timestamp>.unity
• entityId_<entityId>_methodInvocation.setEntityCredential_<timestamp>.unity
• entityId_<entityId>_methodInvocation.removeEntity_<timestamp>.unity
• entityId_<entityId>_methodInvocation.createAttribute_<attributeName>_
<timestamp>.unity
• entityId_<entityId>_methodInvocation.setAttribute_<attributeName>_
<timestamp>.unity
• entityId_<entityId>_methodInvocation.removeAttribute_<attributeName>_
<timestamp>.unity
Implementierung – Benutzer-Entitätensynchronisation I
1 i n o t i f y w a i t −mq−e c r e a t e −e a t t r i b −−format %f $MONITORING_DIR | while read F I L E
Listing 9: Überwachung eines Verzeichnisses mit „inotifywait“
1 c u r l −s −k−−n e t r c−f i l e $CONF_DIR / . n e t r c −X PUT −H "Content -Type: application/json
" −d "{\"values\":[\"$uid\"],\"name\": \"userName\",\"groupPath\": \"/\"}" "
https://unitysrv1.awi.de/rest-admin/v1/entity/$entityId/attribute"
3 c u r l −s −k−−n e t r c−f i l e $CONF_DIR / . n e t r c "https://unitysrv1.awi.de/rest-admin/v1/
entity/$entityId/attributes" | sed −e 's/\\//g'−e 's/"{/{/g'−e 's/}"/}/g' >
$ { WORK_DIR } / $ F I L E . tmp
Listing 10:
HTTP-Anfragen an die
RESTful APImit „curl“
Fabian Mangels Hochschule Bremerhaven 27
Implementierung – Benutzer-Entitätensynchronisation I
1 i n o t i f y w a i t −mq−e c r e a t e −e a t t r i b −−format %f $MONITORING_DIR | while read F I L E
Listing 9: Überwachung eines Verzeichnisses mit „inotifywait“
1 c u r l −s −k−−n e t r c−f i l e $CONF_DIR / . n e t r c −X PUT −H "Content -Type: application/json
" −d "{\"values\":[\"$uid\"],\"name\": \"userName\",\"groupPath\": \"/\"}" "
https://unitysrv1.awi.de/rest-admin/v1/entity/$entityId/attribute"
3 c u r l −s −k−−n e t r c−f i l e $CONF_DIR / . n e t r c "https://unitysrv1.awi.de/rest-admin/v1/
entity/$entityId/attributes" | sed −e 's/\\//g'−e 's/"{/{/g'−e 's/}"/}/g' >
$ { WORK_DIR } / $ F I L E . tmp
Listing 10: HTTP-Anfragen an die RESTful API mit „curl“
Implementierung – Benutzer-Entitätensynchronisation I
1 r e s u l t =$ (cat $ { WORK_DIR } / $ F I L E . tmp | j q −c '.[] | select(.["name"] == "surname") | .["values"][0]' | sed 's/"//g')
Listing 11: „surname“ – Parsen der JSON-Datei mit „jq“
1 w r i t e I n L d i f "dn:" "uid=$uid,ou=People ,dc=unity ,dc=awi,dc=de"
w r i t e I n L d i f "changetype:" "modify"
3 w r i t e I n L d i f "replace:" "userPassword"
passwdHash=$ ( g e t J s o n V a l u e "hash")
5 passwdSalt =$ ( g e t J s o n V a l u e "salt")
w r i t e I n L d i f "userPassword:" '{CRYPT}$5$rounds=5000$'$passwdSalt'$'$passwdHash Listing 12:
LDIF-Erstellung aufgrund neuer
Credentialseiner Entität
Fabian Mangels Hochschule Bremerhaven 28
Implementierung – Benutzer-Entitätensynchronisation I
r e s u l t =$ (cat $ { WORK_DIR } / $ F I L E . tmp | j q −c '.[] | select(.["name"] == "surname") | .["values"][0]' | sed 's/"//g')
Listing 11: „surname“ – Parsen der JSON-Datei mit „jq“
1 w r i t e I n L d i f "dn:" "uid=$uid,ou=People ,dc=unity ,dc=awi,dc=de"
w r i t e I n L d i f "changetype:" "modify"
3 w r i t e I n L d i f "replace:" "userPassword"
passwdHash=$ ( g e t J s o n V a l u e "hash")
5 passwdSalt =$ ( g e t J s o n V a l u e "salt")
w r i t e I n L d i f "userPassword:" '{CRYPT}$5$rounds=5000$'$passwdSalt'$'$passwdHash
Listing 12: LDIF-Erstellung aufgrund neuer Credentials einer Entität
Implementierung – Benutzer-Entitätensynchronisation I
openssl rand −base64−out $ { WORK_DIR } / $ F I L E . otp 128
2
openssl enc −aes−256−cbc −s a l t −i n $ { WORK_DIR } / $ F I L E . l d i f −out $ { WORK_DIR } / $ F I L E . l d i f . enc−pass f i l e : $ { WORK_DIR } / $ F I L E . otp
4
openssl r s a u t l −e n c r y p t −i n k e y $ { CONF_DIR } / p u b l i c _ k e y . pem−pubin −i n $ { WORK_DIR } /
$ F I L E . otp −out $ { WORK_DIR } / $ F I L E . otp . enc
Listing 13: Verschlüsselung der zu übertragenden Dateien mit „ openssl “ [OT18]
1 scp $ { WORK_DIR } / $ F I L E . otp . enc openldap : ~ / work / . scp $ { WORK_DIR } / $ F I L E . l d i f . enc openldap : ~ / monitoring / .
Listing 14:
Übertragung der kryptographischen Dateien mit „
scp“
Fabian Mangels Hochschule Bremerhaven 29
Implementierung – Benutzer-Entitätensynchronisation I
openssl rand −base64−out $ { WORK_DIR } / $ F I L E . otp 128
2
openssl enc −aes−256−cbc −s a l t −i n $ { WORK_DIR } / $ F I L E . l d i f −out $ { WORK_DIR } / $ F I L E . l d i f . enc−pass f i l e : $ { WORK_DIR } / $ F I L E . otp
4
openssl r s a u t l −e n c r y p t −i n k e y $ { CONF_DIR } / p u b l i c _ k e y . pem−pubin −i n $ { WORK_DIR } /
$ F I L E . otp −out $ { WORK_DIR } / $ F I L E . otp . enc
Listing 13: Verschlüsselung der zu übertragenden Dateien mit „ openssl “ [OT18]
1 scp $ { WORK_DIR } / $ F I L E . otp . enc openldap : ~ / work / . scp $ { WORK_DIR } / $ F I L E . l d i f . enc openldap : ~ / monitoring / .
Listing 14: Übertragung der kryptographischen Dateien mit „ scp “
Implementierung – Benutzer-Entitätensynchronisation II
openssl r s a u t l −d e c r y p t −i n k e y $ { CONF_DIR } / p r i v a t e _ k e y . pem−i n $ { WORK_DIR } / $ F I L E . otp . enc −out $ { WORK_DIR } / $ F I L E . otp
2
openssl enc −d−aes−256−cbc −i n $ { WORK_DIR } / $ F I L E . l d i f . enc −out $ { WORK_DIR } / $ F I L E . l d i f −pass f i l e : $ { WORK_DIR } / $ F I L E . otp
Listing 15: Entschlüsselung der empfangenen Dateien mit „openssl“ [OT18]
1 ldapmodify −x −D cn =admin , dc= u n i t y , dc= awi , dc=de−y $CONF_DIR / . passwd −f $WORK_DIR/
$ F I L E . l d i f
Listing 16:
Ausführung von „ldapmodify“
Fabian Mangels Hochschule Bremerhaven 30
Implementierung – Benutzer-Entitätensynchronisation II
1 openssl r s a u t l −d e c r y p t −i n k e y $ { CONF_DIR } / p r i v a t e _ k e y . pem−i n $ { WORK_DIR } / $ F I L E . otp . enc −out $ { WORK_DIR } / $ F I L E . otp
3 openssl enc −d−aes−256−cbc −i n $ { WORK_DIR } / $ F I L E . l d i f . enc −out $ { WORK_DIR } / $ F I L E . l d i f −pass f i l e : $ { WORK_DIR } / $ F I L E . otp
Listing 15: Entschlüsselung der empfangenen Dateien mit „openssl“ [OT18]
1 ldapmodify −x −D cn =admin , dc= u n i t y , dc= awi , dc=de−y $CONF_DIR / . passwd −f $WORK_DIR/
$ F I L E . l d i f
Listing 16: Ausführung von „ldapmodify“
Fazit und Ausblick
Fazit
• Verteiltes FIM als logische Weiterentwicklung
• IdP als zentrale Schnittstelle des IdM der Heimateinrichtung (Authentifizierung)
• Autorisierung erfolgt vermehrt an einem SP-IdP-Proxy
• Lokale Referenz (Benutzerkonto) wird gebraucht – kein „wirkliches“ SSO
• Funktionstüchtige Umsetzung im Testumfeld
Ausblick
• Kleinere Verbesserungen / Maßnahmen, weitere Tests
• Größere Probleme:
1. Laufzeit eines lokalen Kontos ( Session-Timeout ) 2. Gruppenberechtigungen ( eduPerson , Policies )
• Nutzung des zentralen SP-IdP-Proxys im HDF-Umfeld
• Verbesserungen durch OpenID Connect (OIDC) in der DFN-AAI?
Fabian Mangels Hochschule Bremerhaven 32
Vielen Dank für Ihre Aufmerksamkeit!
Einbettung einer lokalen Software eines Föderationsmitgliedes zur Bereitstellung in einem Föderationsumfeld (DFN-AAI)
Bachelorarbeit im Studiengang Informatik
Fabian Mangels <fabian@mangels.it>
Bremerhaven, 20.02.2019
Anhang
Alfred-Wegener-Institut (AWI)
• Deutsche Forschungseinrichtung in der Polar- und Meeresforschung
• Hauptsitz in Bremerhaven
• > 1000 Mitarbeiter
• Außenstellen: Potsdam, Helgoland und Sylt
• Fachbereiche: Geo-, Bio- und Klimawissenschaften
• Leistungsfähige Infrastruktur:
Stationen in der Arktis und Antarktis, Schiffe und Flugzeuge
• Rechenzentrum
Abbildung 7: AWI Campus Bremerhaven [AT18]
Alfred-Wegener-Institut (AWI)
• Deutsche Forschungseinrichtung in der Polar- und Meeresforschung
• Hauptsitz in Bremerhaven
• > 1000 Mitarbeiter
• Außenstellen: Potsdam, Helgoland und Sylt
• Fachbereiche: Geo-, Bio- und Klimawissenschaften
• Leistungsfähige Infrastruktur:
Stationen in der Arktis und Antarktis, Schiffe und Flugzeuge
• Rechenzentrum
Abbildung 7: AWI Campus Bremerhaven [AT18]
Fabian Mangels Hochschule Bremerhaven
LDAP
Objektklasse Zuständigkeit
top(abstrakt) Alle Einträge gehören zur abstrakten Objektklasse „top“.
organizationalUnit (struktu- rell)
Definiert die Basis eines Eintrags, der eine Organisationseinheit darstellt.
organizationalPerson(struktu- rell)
Grundlage für einen Eintrag, der eine Person in Bezug auf eine Organisa- tion repräsentiert.
inetOrgPerson (unterstützend)
Erweiterung der Objektklasse „organizationalPerson“, um den heu- tigen Anforderungen der Bereitstellung von Internet- und Intranet- Verzeichnisdiensten gerecht zu werden.
eduPerson (unterstützend)
Unterstützt den Austausch zwischen Bildungs- und Forschungseinrich- tungen mit vordefinierten Attributen über Personen.
Tabelle 2: Grundlegende LDAP-Objektklassen [Smi00, Zei06, Sci06, IT16, RFC 2798, RFC 4512, RFC
4519]
LDAP
Operation Erklärung
Bind Beginn einer Sitzung.
Unbind Beenden einer Sitzung.
Search Suche nach Einträgen ab einer übergebenen Stelle, demBase DN, im DIT.
Modify Änderung eines Eintrags.
Add Hinzufügen eines Eintrags an einer beliebigen Stelle im DIT.
Delete Löschen eines Eintrags.
Compare Vergleich eines Attributwertes mit einem spezifizierten Wert.
Tabelle 3: Zugriffsoperationen auf ein LDAP-Verzeichnis [JD08, vgl. S. 235]
Fabian Mangels Hochschule Bremerhaven
DFN-AAI
Abbildung 8: DFN-AAI – Produktive Entities [Pem18b, vgl. S. 35]
DFN-AAI
Abbildung 9: eduGAIN – beteiligte Föderationen [Pem18b, vgl. S. 37]
Fabian Mangels Hochschule Bremerhaven
DFN-AAI
Abbildung 10: eduGAIN – Beteiligung je Föderation [Pem18b, S. 38]
DFN-AAI
Abbildung 11: SAML 2.0 — Single Log-out [HCH
+05, vgl. S. 33]
Fabian Mangels Hochschule Bremerhaven
DFN-AAI
Verläss- lichkeits- klasse
Identifizierung durch Hei- mateinrichtung
Verfahren zum Ausweis ei- ner Identität
Datenhaltung und Prozesse zur Pflege der Identitäten
Test Verfahren freigestellt. Verfahren freigestellt. Verfahren freigestellt.
Basic Rückantwort von eindeuti- ger Adresse (E-Mail, Tel.-Nr., Postanschrift, etc.).
Anhand eindeutig zuzuord- nender digitalen Adresse.
Verpflichtung bzgl. Aktuali- tät innerhalb von 3 Mona- ten.
Advanced Pers. Vorsprechen gegen- über Vertrauensinstanz unter Vorlage amtlicher Dokumente (alternativ:
Post-Ident, eID / nPA).
Die an den Hochschulen etablierten Einschreibungs- und Einstellungsprozesse werden als gleichwertig akzeptiert.
Pers. Account bzw. digitales Zertifikat (sichere Vergabe- richtlinie).
Verpflichtung bzgl. Aktuali- tät innerhalb von 2 Wochen.
Shibboleth
Abbildung 12: Attribut-Management in Shibboleth [Pem18a, vgl. S. 4]
Fabian Mangels Hochschule Bremerhaven
Unity IdM
Abbildung 13: Systemaufbau von Unity IdM [UT18]
Vorarbeiten – OpenLDAP
1 dn : cn = c o n f i g changetype : modify
3 add : olcPasswordHash olcPasswordHash : { CRYPT }
5 −
add : o l c P a s s w o r d C r y p t S a l t F o r m a t
7 o l c P a s s w o r d C r y p t S a l t F o r m a t : $5$rounds =5000$ %.16 s
Listing 17: LDIF – Änderung des Standard-Passwortschemas
Fabian Mangels Hochschule Bremerhaven
LDIF – create entity
1 dn : uid = awiFed2 , ou= People , dc= u n i t y , dc= awi , dc=de changetype : add
3 o b j e c t C l a s s : ine tOr gPe rs on o b j e c t C l a s s : posixAccount
5 o b j e c t C l a s s : shadowAccount uid : awiFed2
7 l o g i n S h e l l : / bin /bash homeDirectory : /home/ awiFed2
9 gidNumber : 5000 uidNumber : 10002
11 d e s c r i p t i o n : uid = awiFed2 , ou= People , dc= u n i t y , dc = awi , dc =de sn : Mangels
13 givenName : Fabian cn : Fabian Mangels
15 displayName : Fabian Mangels mail : f a b i a n . mangels@awi . de
17 userPassword : { CRYPT } $5$rounds =5000$SVb/TG . 2
e9PnJLDJ$hsW4EChqtxFTb9clt6wAxN5P1azYKfo1ig . JgkoU4P .
Listing 18: entityId_2_methodInvocation.submitEnquiryResponse_1542024212.unity.ldif
LDIF – remove entity / new credentials
1 dn : uid = awiFed2 , ou= People , dc= u n i t y , dc= awi , dc=de changetype : d e l e t e
Listing 19: entityId_2_methodInvocation.removeEntity_1542024374.unity.ldif
dn : uid = awiFed2 , ou= People , dc= u n i t y , dc= awi , dc=de
2 changetype : modify r e p l a c e : userPassword
4 userPassword : { CRYPT } $5$rounds =5000 $1xFq0 /GHmt4QTkIm$zo7XVwNH30VhPPq7aEA . miJ7LxWpwk3wYZa8oBH . / N3
Listing 20: entityId_2_methodInvocation.setEntityCredential_1542024274.unity.ldif
Fabian Mangels Hochschule Bremerhaven
LDIF – set attribute / remove attribute
dn : uid = awiFed2 , ou= People , dc= u n i t y , dc= awi , dc=de
2 changetype : modify r e p l a c e : mail
4 mail : f a b i a n . mangels@awi . de
Listing 21: entityId_2_methodInvocation.setAttribute_email_1542024325.unity.ldif
dn : uid = awiFed2 , ou= People , dc= u n i t y , dc= awi , dc=de
2 changetype : modify d e l e t e : mail
Listing 22: entityId_2_methodInvocation.removeAttribute_email_1542024343.unity.ldif
Literaturverzeichnis i
Atherton, Christopher J. ; Barton, Thomas ; Basney, Jim ; Broeder, Daan ; Costa, Alessandro ; Daalen, Mirjam V. ; Dyke, Stephanie ; Elbers, Willem ; Enell,
Carl-Fredrik ; Fasanelli, Enrico Maria V. ; Fernandes, João ; Florio, Licia ; Gietz, Peter
; Groep, David L. ; Junker, Matthias B. ; Kanellopoulos, Christos ; Kelsey, David ; Kershaw, Philip ; Knapic, Cristina ; Kollegger, Thorsten ; Koranda, Scott ; Linden, Mikael ; Marinic, Filip ; Matyska, Ludek ; Nyrönen, Tommi H. ; Paetow, Stefan ; Paglione, Laura A D. ; Parlati, Sandra ; Phillips, Christopher ; Prochazka, Michal ; Rees, Nicholas ; Short, Hannah ; Stevanovic, Uros ; Tartakovsky, Michael ;
Venekamp, Gerben ; Vitez, Tom ; Wartel, Romain ; Whalen, Christopher ; White, John
; Zwölf, Carlo M.:
Federated Identity Management For Research Collaborations.
In: FIM4R (2018), Juli.
http://dx.doi.org/10.5281/zenodo.1307551. –
Fabian Mangels Hochschule Bremerhaven
Literaturverzeichnis ii
DOI 10.5281/zenodo.1307551. – abgerufen am 10.10.2018 AWI-Team:
AWI Bremerhaven.
https://www.awi.de/ueber-uns/standorte/bremerhaven.html.
Version: November 2018. – abgerufen am 03.01.2019 Höllrigl, Thorsten:
Informationskonsistenz im föderativen Identitätsmanagement: Modellierung und Mechanismen, Karlsruher Institut für Technologie (KIT), Diss., 2011.
http://dx.doi.org/10.5445/IR/1000022470. – DOI 10.5445/IR/1000022470. –
abgerufen am 15.10.2018
Literaturverzeichnis iii
Hughes, John ; Cantor, Scott ; Hodges, Jeff ; Hirsch, Frederick ; Mishra, Prateek ; Philpott, Rob ; Maler, Eve:
Profiles for the OASIS Security Assertion Markup Language (SAML) V2.0 / OASIS.
Version: März 2005.
https://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf.
2005. – techreport. –
abgerufen am 25.10.2018 Internet2-Team:
eduPerson Object Class Specification (201602) / Internet2.
Version: März 2016.
http:
//software.internet2.edu/eduperson/internet2-mace-dir-eduperson-201602.html.
Fabian Mangels Hochschule Bremerhaven
Literaturverzeichnis iv
2016. –
Forschungsbericht. – abgerufen am 26.10.2018 Jochen Dinger, Hannes H.:
Netzwerk- und IT-Sicherheitsmanagement : eine Einführung.
Universitätsverlag Karlsruhe, Karlsruhe, 2008
https://publikationen.bibliothek.kit.edu/1000007400/142064. – ISBN 978–3–86644–209–2. –
abgerufen am 06.10.2018
Literaturverzeichnis v
Linux Programmer’s Manual:
crypt, crypt_r - password and data encryption.
man-page.
http://man7.org/linux/man-pages/man3/crypt.3.html.
Version: April 2018. – abgerufen am 06.10.2018 Mangels, Fabian:
Einbettung einer lokalen Software eines Föderationsmitgliedes zur Bereitstellung in einem Föderationsumfeld (DFN-AAI).
http://epic.awi.de/48571/.
Version: December 2018
Fabian Mangels Hochschule Bremerhaven
Literaturverzeichnis vi
OpenSSL-Team:
openssl manpage – commands.
https://www.openssl.org/docs/man1.1.0/apps/.
Version: September 2018. – abgerufen am 27.10.2018 Pempe, Wolfgang:
Attribute: Attribut-Schemata, -Generierung, -Übertragung und Verarbeitung am SP.
https://download.aai.dfn.de/ws/2018_fhdo/attributes.pdf.
Version: August 2018. –
abgerufen am 19.10.2018
Literaturverzeichnis vii
Pempe, Wolfgang:
Grundlagen: AAI, Web-SSO, Metadaten und Föderationen.
https://download.aai.dfn.de/ws/2018_fhdo/grundlagen.pdf.
Version: August 2018. – abgerufen am 19.10.2018 Sciberras, Andrew:
Lightweight Directory Access Protocol (LDAP): Schema for User Applications.
RFC 4519.
http://dx.doi.org/10.17487/RFC4519.
Version: Juni 2006 (Request for Comments). – abgerufen am 21.10.2018
Fabian Mangels Hochschule Bremerhaven
Literaturverzeichnis viii
Smith, Mark C.:
Definition of the inetOrgPerson LDAP Object Class.
RFC 2798.
http://dx.doi.org/10.17487/RFC2798.
Version: April 2000 (Request for Comments). – abgerufen am 21.10.2018
Unity-Team ; Unity (Hrsg.):
Unity SAML HowTo Manual.
Unity, April 2016.
http://www.unity-idm.eu/documentation/unity-1.9.0/saml-howto.html. –
abgerufen am 01.10.2018
Literaturverzeichnis ix
Unity-Team ; Unity (Hrsg.):
Unity Manual.
Unity, August 2018.
http://www.unity-idm.eu/documentation/unity-2.6.2/manual.html. – abgerufen am 01.10.2018
Widdowson, Rod ; Cantor, Scott:
Identity Provider Discovery Service Protocol and Profile / OASIS.
Version: März 2008.
http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-idp-discovery.pdf.
2008. – techreport. –
abgerufen am 25.10.2018
Fabian Mangels Hochschule Bremerhaven