Sicherheit in verteilten Systemen mit Java und SAML Karlsruher Entwicklertag 2012 Jürgen Groothues Public 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML /x Vorstellung Jürgen Groothues ([email protected]) Fa. InterComponentWare AG (Walldorf/Baden) Senior Software Developer Technical Lead Application Security 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 2/x 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 3/x Was ist das Problem? ANWENDUNGSFÄLLE 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 4/x Anwendungsfälle Authentifizierung von Web Services Krankenhaus A Krankenhaus B Internet Web Service Aufruf Arzt IdentitätsInformation 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 5/x Anwendungsfälle Attribut-basierte Autorisierung Krankenhaus A Krankenhaus B Internet Web Service Aufruf Arzt AutorisierungsInformation 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 66/ x Anwendungsfälle Web Single Sign-On Airline.com Benutzer Authentifizierung IdentitätsInformation Browser 1 2 CarRental.com Zugriff auf geschützte Resource 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 7/x Wie hilft SAML bei der Lösung? SAML ARCHITEKTUR 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 8/x 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 IdentitätsDaten Service Provider AutorisierungsDaten SAML SAML 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 9/x SAML Architektur Assertion Assertion Issuer Subject Conditions AuthnStatement Signature 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML „ 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 10 / x SAML Architecture Assertion 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 11 / x SAML Architektur Assertion mit Attributen Assertion Issuer Subject Conditions AuthnStatement AttributeStatement „... Der Eigentümer(Subject) hat die folgenden Rollen:... und arbeitet in der folgenden Abteilung:... (Attributes).“ Signature des Issuer Signature 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 12 / x SAML Architecture Assertion with Attributes 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 13 / x SAML Architektur Konzepte Beispiele: Profiles Kombiniert Bindings, Protocols und Assertions um einen konkreten Anwendungsfall abzubilden Bindings benutzt Mapping von SAML Protocols auf Standardprotokolle Protocols Kommunikation von Assertions Web Browser SSO Profile HTTP Post Binding Authentication Request Protocol Assertions Authentifizierung, autorisierungsrelevante Attribute 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML Authentication Statement 14 / x 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 15 / x Exkursion DIGITALE SIGNATUR 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 16 / x Exkursion: Digitale Signatur Grundlage: Asymmetrische Verschlüsselung Alice Bob Original Original Encrypted Bob‘s Public Key Encrypter Bob‘s Private Key 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 17 / x Exkursion: Digitale Signatur Signatur Erstellung Alice Message Digest Digester Alices‘s Private Key Signed Message 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 18 / x Exkursion: Digitale Signatur Signatur Verifikation Bob Message Message Integrity and Authenticity Verification Signature failed successful Alices‘s Public Key Digester Decrypter yes Computed Digest no 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 19 / x 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 20 / x Exkursion: Digitale Signatur Problem XML Signatur • Herausfoderung XML Signatur: Syntaktisch äquivalente XML Dokumente können unterschiedliche Signaturen produzieren: Signature 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML Signature 21 / x 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 Canonical Form 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML c14n 22 / x Exkursion: Digitale Signatur XML Signatur und SAML Assertion Assertion Signature SignedInfo SignedInfo: Was wurde wie signiert CanonicalizationMethod SignatureMethod Reference Assertion Transforms Reference: Welches Element bzw. Dokument wurde signiert DigestMethod DigestValue SignatureValue KeyInfo 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML DigestValue: Digest des referenzierten Elements (base64) SignatureValue: Verschlüsselter Digest des SignedInfo Elements (base64) KeyInfo: Informationen über den verwendeten Signatur-Schlüssel 23 / x Exkursion: Digitale Signatur XML Signatur - Beispiel 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 24 / x Wie hilft Java bei der Lösung? JAVA XML DIGITAL SIGNATURE API 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 25 / x 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 26 / x 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 27 / x 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 28 / x 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 29 / 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 30 / x 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 31 / x JAXB 2.x Architektur Compile-Zeit Laufzeit XMLDokument XML-Schema BindungsDeklarationen SchemaGenerator SchemaCompiler JAXBAnnotationen Unmarshal Marshal Binding-Framework (JAXB-API) Unmarshal Marshal obj ect Class Model Assertion Issuer Java Beans 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML Signature Java Beans Instanzen 32 / x JAXB 2.x Schema-Compiler • Der Schema-Compiler generiert aus einem XML Schema Java Klassen mit JAXBAnnotationen: 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 33 / x 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 34 / x JAXB 2.x Schema-Compiler mit Maven 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 35 / x Lösungs-Beispiel MYSAML 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 36 / x MySaml Architektur class MySAML SamlContextFactory use DefaultProperties + createSamlContext(Map) :SamlContext create SamlContext create + create create AssertionBuilder AssertionValidator build(Map) :Document + create validate(Document) :void use ResponseBuilder + 09.05.2012 build(Map) :Document Sicherheit in verteilten Systemen mit Java und SAML ResponseExtractor + extractAssertion() :Document 37 / x MySaml API <Demo> https://github.com/groothues/mysaml 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 38 / x Beispiel-Anwendungen WS-SECURITY, SSO 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 39 / x Beispiel-Anwendung Web Service Security cmp WS-Security Sample «ws client» soapUI 2. sende WS Request mit SAML Assertion «ws server» TimeServ ice «SOAPHandler» SamlAuthenticator «WebService» Timer 1. hole SAML Assertion (manuell) «tokenservice» mySAML Sample 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 40 / x 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.oasisopen.org/committees/tc_home.php?wg_abbrev=wss soap:Body my:currentTime 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML /x Beispiel-Anwendung Web Service Security – Trust Relationship w eb WS Security Sample Trust Relationship «ws server» TimeServ ice «tokenservice» mySAML Sample trust Key Store 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML Trust Store 42 / x Beispiel-Anwendung Web Service Security <Demo> https://github.com/groothues/mysaml 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 43 / x Beispiel-Anwendung Web Single Sign-On (SSO) 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 44 / x Beispiel-Anwendung Web Single Sign-On – Trust Relationship w eb SSO Sample Trust Relationship «Identity Provider» Web Anw endung 1 «Service Provider» Web Anw endung 2 trust Trust Store 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML Key Store 45 / x Beispiel-Anwendung Web Single Sign-On (SSO) <Demo> 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 46 / x RESSOURCEN 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML 47 / 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_Rev70_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 48 / x Vielen Dank für Ihre Aufmerksamkeit 09.05.2012 Sicherheit in verteilten Systemen mit Java und SAML InterComponentWare AG InterComponentWare Inc. Altrottstraße 31 / Partner-Port 69190 Walldorf, Germany Tel.: +49 (0) 6227 385 100 Fax: +49 (0) 6227 385 199 650 East Swedesford Road - Suite 180 Wayne, PA 19087, USA Tel.: +1 610 947 6500 Fax: +1 610 947 6519 E-mail: [email protected] E-mail: [email protected] www.icw-global.com www.icw-global.com 49 / x