490 likes | 616 Views
Sicherheit in verteilten Systemen mit Java und SAML. Karlsruher Entwicklertag 2012. Jürgen Groothues. Vorstellung. Jürgen Groothues ( juergen@groothues.icw.de ) Fa . InterComponentWare AG (Walldorf/Baden) Senior Software Developer Technical Lead Application Security. Agenda.
E N D
Sicherheit in verteilten Systemen mit Java und SAML KarlsruherEntwicklertag 2012 JürgenGroothues 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 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) Sicherheit in verteilten Systemen mit Java und SAML
Was ist das Problem? Anwendungsfälle 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 Sicherheit in verteilten Systemen mit Java und SAML
Anwendungsfälle • Attribut-basierte Autorisierung Krankenhaus A Krankenhaus B Internet Web Service Aufruf Autorisierungs- Information Arzt Sicherheit in verteilten Systemen mit Java und SAML 6
Anwendungsfälle • Web Single Sign-On Airline.com Identitäts- Information Authentifizierung Benutzer Browser 1 2 CarRental.com Zugriff auf geschützte Resource Sicherheit in verteilten Systemen mit Java und SAML
Wie hilft SAML bei der Lösung? Saml Architektur 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 Service Provider Identity Provider Identitäts- Daten Autorisierungs- Daten SAML SAML Sicherheit in verteilten Systemen mit Java und SAML
SAML Architektur • Assertion Assertion „ 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): ...“ Signaturedes Issuer Issuer Subject Conditions AuthnStatement Signature Sicherheit in verteilten Systemen mit Java und SAML
SAML Architecture • Assertion 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).“ Signaturedes Issuer Subject Conditions AuthnStatement AttributeStatement Signature Sicherheit in verteilten Systemen mit Java und SAML
SAML Architecture • Assertion with Attributes Sicherheit in verteilten Systemen mit Java und SAML
SAML Architektur • Konzepte Beispiele: 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 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) Sicherheit in verteilten Systemen mit Java und SAML
Exkursion Digitale Signatur Sicherheit in verteilten Systemen mit Java und SAML
Exkursion: Digitale Signatur • Grundlage: Asymmetrische Verschlüsselung Alice Bob • 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 Original Original Encrypted Bob‘s Private Key Bob‘s Public Key Encrypter Decrypter Sicherheit in verteilten Systemen mit Java und SAML
Exkursion: Digitale Signatur • Signatur Erstellung Alice • Der Sender hängt einen mit seinem Private Key verschlüsselten Digest an die Nachricht an. Message Digest Digester Signed Message Alices‘s Private Key Bob Encrypter Signature Sicherheit in verteilten Systemen mit Java und SAML
Exkursion: Digitale Signatur • Signatur Verifikation Bob • Der Empfänger verwendet den Public Key des Senders um den Digest zu entschlüsseln und vergleicht diesen Wert mit dem selbst berechneten Digest. Message Signature Message Integrity and Authenticity Verification failed successful Alices‘s Public Key Digester Decrypter yes no Computed Digest Decrypted Digest Equal? 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... 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 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 Sicherheit in verteilten Systemen mit Java und SAML
Exkursion: Digitale Signatur • XML Signatur und SAML Assertion Assertion • SignedInfo: Was wurde wie signiert Signature SignedInfo 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 Sicherheit in verteilten Systemen mit Java und SAML
Exkursion: Digitale Signatur • XML Signatur - Beispiel Sicherheit in verteilten Systemen mit Java und SAML
Wie hilft Java bei der Lösung? JaVA XML Digital SignaturE API 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 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 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 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 Sicherheit in verteilten Systemen mit Java und SAML
Wie hilft Java bei der Lösung? Java Architecture for XML Binding (JAXB 2.x) 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 Sicherheit in verteilten Systemen mit Java und SAML
JAXB 2.x • Architektur Compile-Zeit Laufzeit XML-Schema XML- Dokument Bindungs- Deklarationen Unmarshal Marshal Schema- Generator Binding-Framework (JAXB-API) Schema- Compiler Unmarshal Marshal JAXB- Annotationen Java Beans Java Beans Instanzen 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: 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: Sicherheit in verteilten Systemen mit Java und SAML
JAXB 2.x • Schema-Compiler mit Maven Sicherheit in verteilten Systemen mit Java und SAML
Lösungs-Beispiel MySAML Sicherheit in verteilten Systemen mit Java und SAML
MySaml • Architektur Sicherheit in verteilten Systemen mit Java und SAML
MySaml • API <Demo> https://github.com/groothues/mysaml Sicherheit in verteilten Systemen mit Java und SAML
Beispiel-Anwendungen WS-Security, SSO Sicherheit in verteilten Systemen mit Java und SAML
Beispiel-Anwendung • Web Service Security Sicherheit in verteilten Systemen mit Java und SAML
Beispiel-Anwendung • Web Service Security – SOAP Request • WS-Security Core Specification soap:Envelope soap:Header wsse:Security saml:Assertion • WS-Security SAML Token Profile • http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wss soap:Body my:currentTime Sicherheit in verteilten Systemen mit Java und SAML
Beispiel-Anwendung • Web Service Security – Trust Relationship Sicherheit in verteilten Systemen mit Java und SAML
Beispiel-Anwendung • Web Service Security <Demo> https://github.com/groothues/mysaml Sicherheit in verteilten Systemen mit Java und SAML
Beispiel-Anwendung • Web Single Sign-On (SSO) Sicherheit in verteilten Systemen mit Java und SAML
Beispiel-Anwendung • Web Single Sign-On – Trust Relationship Sicherheit in verteilten Systemen mit Java und SAML
Beispiel-Anwendung • Web Single Sign-On (SSO) <Demo> Sicherheit in verteilten Systemen mit Java und SAML
Ressourcen 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 • JAXBhttp://jaxb.java.net/ • Java XML Digital Signatureshttp://java.sun.com/developer/technicalArticles/xml/dig_signatures/ • Programming with the Java XML Digital Signature APIhttp://java.sun.com/developer/technicalArticles/xml/dig_signature_api/ Sicherheit in verteilten Systemen mit Java und SAML