Sicherheit in verteilten Systemen mit Java und SAML Karlsruher Entwicklertag 2012 Jürgen Groothues 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Vorstellung Jürgen Groothues (juergen@groothues.icw.de) Fa. InterComponentWare AG (Walldorf/Baden) Senior Software Developer Technical Lead Application Security 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Agenda Sicherheit in verteilten Systemen mit Java und SAML Was ist das Problem? Wie hilft SAML bei der Lösung? Exkursion: Digitale Signatur Wie hilft Java bei der Lösung? Lösungs-Beispiele (Code und Demos) 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Anwendungsfälle Was ist das Problem? 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML / x
Anwendungsfälle Authentifizierung von Web Services Krankenhaus A Krankenhaus B Internet Web Service Aufruf Identitäts- Information Arzt 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Anwendungsfälle Attribut-basierte Autorisierung Krankenhaus A Krankenhaus B Internet Web Service Aufruf Autorisierungs- Information Arzt 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 6
Anwendungsfälle Web Single Sign-On Airline.com Benutzer Information Identitäts- Benutzer Authentifizierung Browser 1 2 CarRental.com Zugriff auf geschützte Resource 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Saml Architektur Wie hilft SAML bei der Lösung? 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
SAML Architektur Was ist SAML? Entwickelt vom Security Services Technical Committee der „Organisation for the Advancement of Structured Information Standards“ (Sponsoren z.Bsp.: IBM, Microsoft, Oracle, SAP, HP, US DoD, viele andere... ) Ein offener, XML-basierter Standard zur Beschreibung und zum Austausch von Identitäts- und Autorisierungs-Daten Identity Provider Service Provider Identitäts- Daten Autorisierungs- Daten SAML SAML 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
SAML Architektur Assertion Assertion Issuer „ Der Aussteller (Issuer) versichert, daß der Eigentümer (Subject) dieser Assertion sich mit einem Password erfolgreich authentifiziert hat (AuthnStatement). Diese Assertion ist gültig unter diesen Bedingungen (Conditions): ...“ Signature des Issuer Subject Conditions AuthnStatement Signature 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
SAML Architecture Assertion 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
SAML Architektur Assertion mit Attributen Assertion Issuer „... Der Eigentümer(Subject) hat die folgenden Rollen:... und arbeitet in der folgenden Abteilung:... (Attributes).“ Signature des Issuer Subject Conditions AuthnStatement AttributeStatement Signature 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
SAML Architecture Assertion with Attributes 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
SAML Architektur Konzepte Beispiele: Profiles Web Browser SSO Profile benutzt Web Browser SSO Profile HTTP Post Binding Authentication Request Protocol Authentication Statement Profiles Kombiniert Bindings, Protocols und Assertions um einen konkreten Anwendungsfall abzubilden Bindings Mapping von SAML Protocols auf Standardprotokolle Protocols Kommunikation von Assertions Assertions Authentifizierung, autorisierungsrelevante Attribute 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
SAML Architektur Sicherheit von Assertions Wie wird eine Assertion gegen Fälschung geschützt? Digitale Signatur des Assertion-Ausstellers (Signature) Wie wird eine Assertion gegen Mißbrauch geschützt? Verwendung eines Gültigkeits-Zeitraums (NotBefore/NotOnOrAfter) Einschränkung des Empfänger-Kreises (Audience) Verhinderung der Wiederverwendung (durch Service-Provider) Bindung der Assertion an die Nachricht (HolderOfKey) Wie wird die Vertraulichkeit der Assertion geschützt? Verwendung von verschlüsselter Assertion (EncryptedAssertion) Verwendung von SSL (TLS) als Transport-Level Sicherheit (durch Infrastruktur) Warum kann man einer Assertion überhaupt trauen? Weil man dem Aussteller der Assertion vertraut (PKI/Trust-Relationship, Signature) 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Digitale Signatur Exkursion 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Exkursion: Digitale Signatur Grundlage: Asymmetrische Verschlüsselung Alice Bob Original Original Encrypted Bob‘s Private Key Bob‘s Public Key Encrypter Decrypter Das Original wird mit dem Public Key des Empfängers verschlüsselt und kann nur mit dem Private Key des Empfängers entschlüsselt werden 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Exkursion: Digitale Signatur Signatur Erstellung Alice Digest Message Digester Signed Message Alices‘s Private Key Bob Encrypter Signature Der Sender hängt einen mit seinem Private Key verschlüsselten Digest an die Nachricht an. 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Exkursion: Digitale Signatur Signatur Verifikation Bob Message Signature Message Integrity and Authenticity Verification successful failed Alices‘s Public Key Digester Decrypter yes no Computed Digest Equal? Decrypted Digest Der Empfänger verwendet den Public Key des Senders um den Digest zu entschlüsseln und vergleicht diesen Wert mit dem selbst berechneten Digest. 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Exkursion: Digitale Signatur Anforderungen an XML Signatur Gesamtes XML Dokument oder einzelne XML Elemente sollen signiert werden können Aufgrund von Geschäftsregeln Aus Performance Gründen Signatur-Metadaten müssen kommuniziert werden Welche Schlüssel wurden für die Signatur verwendet Welche XML Elemente wurden signiert Signatur muß selbst als XML Element dargestellt werden können (http://www.w3.org/TR/xmldsig-core/) Problem: Syntaktisch äquivalente XML Dokumente können unterschiedliche Signaturen produzieren... 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Exkursion: Digitale Signatur Problem XML Signatur Herausfoderung XML Signatur: Syntaktisch äquivalente XML Dokumente können unterschiedliche Signaturen produzieren: Signature Signature 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Exkursion: Digitale Signatur XML Canonicalization XML Canonicalization (c14n): Wohlgeformte XML Dokumente werden in ein „Standard-Format“ transformiert (http://www.w3.org/TR/xml-c14n) Universum aller XML Dokumente Syntaktisch äquivalente XML Dokumente c14n c14n c14n c14n Canonical Form 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Exkursion: Digitale Signatur XML Signatur und SAML Assertion Assertion Signature SignedInfo SignedInfo: Was wurde wie signiert CanonicalizationMethod SignatureMethod Reference Assertion Reference: Welches Element bzw. Dokument wurde signiert Transforms DigestMethod DigestValue DigestValue: Digest des referenzierten Elements (base64) SignatureValue SignatureValue: Verschlüsselter Digest des SignedInfo Elements (base64) KeyInfo KeyInfo: Informationen über den verwendeten Signatur-Schlüssel 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Exkursion: Digitale Signatur XML Signatur - Beispiel 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
JaVA XML Digital SignaturE API Wie hilft Java bei der Lösung? JaVA XML Digital SignaturE API 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Java XML Digital Signature API Übersicht JSR 105 http://jcp.org/en/jsr/detail?id=105 Seit Java SE 6 Erlaubt Erzeugung und Validierung von XML Signaturen Unterstützt die W3C XML Digital Signature Spezifikation (http://www.w3.org/TR/xmldsig-core/) Erlaubt die Signierung von XML- und Binär-Daten Basiert auf der Java Cryptography Service Provider Architecture (JCA) Relevante Java SE Packages: javax.xml.crypto javax.xml.crypto.dsig javax.xml.crypto.dsig.keyinfo javax.xml.crypto.dsig.spec javax.xml.crypto.dom javax.xml.crypto.dsig.dom 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Java XML Digital Signature API Erzeugung einer XML Signatur (1/3) Signature SignedInfo CanonicalizationMetho SignatureMethod Reference Assertion Transforms DigestMethod DigestValue SignatureValue KeyInfo 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Java XML Digital Signature API Erzeugung einer XML Signatur (2/3) Signature SignedInfo CanonicalizationMetho SignatureMethod Reference Assertion Transforms DigestMethod DigestValue SignatureValue KeyInfo 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Java XML Digital Signature API Erzeugung einer XML Signatur (3/3) Signature SignedInfo CanonicalizationMetho SignatureMethod Reference Assertion Transforms DigestMethod DigestValue SignatureValue KeyInfo 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Java Architecture for XML Binding (JAXB 2.x) Wie hilft Java bei der Lösung? Java Architecture for XML Binding (JAXB 2.x) 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
JAXB 2.x Übersicht JSR 222 http://jcp.org/en/jsr/detail?id=222 Referenzimplementierung: JAXB Project (http://jaxb.java.net) Seit Java 5 Bestandteil Java SE Bindet (bidirektional) XML an Java Beans (POJOs) Generiert Java Beans aus einem bestehenden XML Schema Generiert XML Schemas aus einem bestehenden Java Beans Datenmodell Verwendet Java-Annotationen als Bindungs-Informationen Relevante Java SE Packages: javax.xml.bind javax.xml. bind.annotation javax.xml. bind.annotation.adapters javax.xml. bind.attachment javax.xml. bind.util 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
JAXB 2.x Architektur Compile-Zeit Laufzeit XML-Schema Generator Dokument Bindungs- Deklarationen Unmarshal Schema- Generator Marshal Binding-Framework (JAXB-API) Schema- Compiler Marshal Unmarshal JAXB- Annotationen Java Beans Java Beans Instanzen 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
JAXB 2.x Schema-Compiler Der Schema-Compiler generiert aus einem XML Schema Java Klassen mit JAXB- Annotationen: XML-Schemakomponente Java-Komponente Namespace Package oasis.names.tc.saml._2_0.assertion Datentyp Java-Klasse Element Instanz-Variable ... 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
JAXB 2.x Schema-Compiler Das Default-Verhalten des Schema-Compilers kann mit Bindungs-Deklarationen überschrieben werden: Package-Name überschreiben: Klassen-Name überschreiben: 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
JAXB 2.x Schema-Compiler mit Maven 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
MySAML Lösungs-Beispiel 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
MySaml Architektur 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
https://github.com/groothues/mysaml MySaml API <Demo> https://github.com/groothues/mysaml 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
WS-Security, SSO Beispiel-Anwendungen 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Beispiel-Anwendung Web Service Security 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Beispiel-Anwendung Web Service Security – SOAP Request soap:Envelope soap:Header wsse:Security WS-Security Core Specification saml:Assertion WS-Security SAML Token Profile http://www.oasis- open.org/committees/tc_home.php?wg_abbrev=wss soap:Body my:currentTime 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Beispiel-Anwendung Web Service Security – Trust Relationship 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
https://github.com/groothues/mysaml Beispiel-Anwendung Web Service Security <Demo> https://github.com/groothues/mysaml 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Beispiel-Anwendung Web Single Sign-On (SSO) 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Beispiel-Anwendung Web Single Sign-On – Trust Relationship 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Beispiel-Anwendung <Demo> Web Single Sign-On (SSO) 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
Ressourcen 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML / x
Resourcen JAXB 2.0, Samuel Michaelis u. Wolfgang Schmiesing, Hanser Verlag SOA Security, Ramarao Kanneganti u. Prasad Chodavarapu, Manning Verlag SAML (Knowledgebase für SAML Specs, Profile, Tutorials und Implementierungen: http://saml.xml.org/wiki/saml-wiki-knowledgebase OASIS SAML Übersichtsseite: http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=security IHE XUA (Cross Enterprise User Assertion, ab Seite 88): http://www.ihe.net/Technical_Framework/upload/IHE_ITI_TF_Rev7- 0_Vol2b_FT_2010-08-10.pdf JAXB http://jaxb.java.net/ Java XML Digital Signatures http://java.sun.com/developer/technicalArticles/xml/dig_signatures/ Programming with the Java XML Digital Signature API http://java.sun.com/developer/technicalArticles/xml/dig_signature_api/ 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML
09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML / x