Szolgáltatásorientált rendszerintegráció SOA-alapú rendszerintegráció Web-szolgáltatás szabványok
Tartalom Követelmények WS-* szabványok Aszimmetrikus kulcsú kriptográfia XML titkosítás, digitális aláírás Windows és Java tanúsítványkezelés DEMO: WS-* 2
Integrációs követelmények 3
Vállalati integráció Vállalatirányítási rendszer SAP Termékek.NET? Ügyfelek JEE SQL Server Web-portál PHP Oracle DB MySQL 4
Közigazgatási integráció APEH Linux, Oracle Ügyfélkapu Linux, JBoss? OEP Windows,.NET MÁK Solaris, Sun 5
Követelmények Vállalaton belüli integráció: tranzakciókezelés E-Közigazgatási integráció, vállalatok közti integráció: biztonság: titkosítás, digitális aláírás megbízhatóság: üzenet nem veszik el Szabványos megoldás 6
WS-* szabványok 7
Metadata Web-Service szabványok Security Reliable Messaging Transactions Messaging XML titkosítás, digitális aláírás Transport pl. HTTP, HTTPS, TCP, UDP, JMS, SMTP,... 8
Messaging Messaging MTOM WS-Addressing SOAP Üzenetkezelés WS-Addressing: címzés SOAP fejlécek: Action To From ReplyTo FaultTo MessageId RelatesTo MTOM: bináris adatok küldése byte-folyamként külön MIME részben 9
WSA (WS-Addressing) Általában a válasz oda megy vissza, ahonnan hívták Ellenpéldák egy hitel-lekérdézés sok érdekeltnek a válasz valamelyik visszaválaszol (ha megfelelő az adat) 10
MTOM (Message Transfer Optimization Mechanism) Base64-átvitel <soap:body> <tns:byteecho> <tns:data>jvberi0xljynjeljz9mncje+dqpzdgfyncjex0yncg==</tns:data> </tns:byteecho> </soap:body> MTOM-átvitel: xop = XML-binary Optimization Package <soap:envelope> <soap:body> <tns:byteecho> <tns:data><xop:include href="cid:1.633335845875937500@example.org"/></tns:data> </tns:byteecho> </soap:body> </soap:envelope> --MIMEBoundary000000 content-id: <1.633335845875937500@example.org> content-type: application/octet-stream content-transfer-encoding: binary... --MIMEBoundary000000-- 11
MTOM-request A forma módosul: POST /xxx/inventorychck.jws HTTP/1.1 Host: localhost Content-Type: multipart/related; type= application/xop+xml ; boundary=mimeboundary0000; SOAPAction: urn:check --MIMEBoundary0000 Content-id: 0.0000@crosschecknet.com Content-type: application/xop+xml; charset=utf-8 Content-transfer-encoding: binary <?xml version 1.0 encoding= UTF-8?> <SOAP-ENV:Envelope...>... </SOAP-ENV:Envelope> --MIMEBoundary000000 content-id: <1.633335845875937500@example.org> content-type: application/octet-stream content-transfer-encoding: binary... --MIMEBoundary000000-- 12
Security Security WS-Federation WS-Trust WS-SecureConversation WS-Security WS-Security: tiktosítás, digitális aláírás WS-SecureConversation: szimmetrikus kulcs generálása, titkosított adatcsere analógia: SSL WS-Trust: tokenek kérése, kibocsátása analógia: Kerberos WS-Federation trusted domain-eken túli azonosítás single sign-on 13
WS-Federation példa Népességnyilvántartás Vásárló 1. Bor vásárlás 2. Nagykorú? Web-shop 14
Reliable messaging Reliable messaging WS- Reliability WS- Reliable Messaging analógia: TCP WS-Reliability: eredeti változat nem veszi figyelembe a többi protokollt WS-ReliableMessaging: jobban támogatott figyelembe veszi a többi protokollt is pl. transactions, security,... 15
WS-ReliableMessaging 16
Transactions WS- Atomic Transaction Transactions WS-Coordination WS- Business Activity WS-Coordination: tranzakció levezénylése WS-AtomicTransaction: rövid lejáratú tranzakciók 2PC WS-BusinessActivity: hosszú lejáratú tranzakciók rollback: kompenzáció 17
Metadata Metadata WS-MetadataExchange WS-Policy WSDL WS-Policy: egy szolgáltatás képességeit és követelményeit írja le kibővíti a WSDL leírást példák: WS-Security Policy WS-ReliableMessaging Policy WS-AtomicTransaction Policy WS-MetadataExchange: WSDL dokumentumok felderítése Policy-információk cseréje dinamikus protokollfelismeréshez 18
WS-Security-Policy Auth-WS alap 19
WS-Security-Policy Kiegészítés security-policy elemmel 20
WS-Security-Policy A security-policy elem 21
WS-Security-Policy Alapok Alkalmazás <wsp:policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext"> <wsp:exactlyone> <wsp:all> <sp:securitytoken> <sp:tokentype>sp:x509v3</sp:tokentype> </sp:securitytoken> </wsp:all> </wsp:exactlyone> </wsp:policy> <wsp:policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext"> <wsp:exactlyone> <wsp:all>... </sp:securitytoken> <sp:usernametoken/> <sp:signedparts/> <sp:encryptedparts> <sp:body/> </sp:encryptedparts> <sp:transportbinding> <sp:includetimestamp/> </sp:transportbinding> </wsp:all> </wsp:exactlyone> </wsp:policy> 22
WS-Security-Policy <wsp:exactlyone> <wsp:all> <sp:asymmetricbinding> <wsp:policy> <sp:initiatortoken> <wsp:policy> <sp:x509token sp:includetoken="http://.../includetoken/alwaystorecipient"> <wsp:policy> <sp:requirethumbprintreference/> </wsp:policy> </sp:x509token> </wsp:policy> </sp:initiatortoken> <sp:recipienttoken> <wsp:policy> <sp:x509token sp:includetoken="http://.../includetoken/never"> <wsp:policy> <sp:requirethumbprintreference/> </wsp:policy>... aszimmetrikus szimmetrikus <wsp:exactlyone> <wsp:all> <sp:symmetricbinding> <wsp:policy> <sp:protectiontoken> <wsp:policy> <sp:x509token sp:includetoken="http://.../includetoken/never"> <wsp:policy> <sp:requirederivedkeys/> <sp:requirethumbprintreference/> <sp:wssx509v3token10/> </wsp:policy> </sp:x509token> </wsp:policy> </sp:protectiontoken>... 23
WS-* szabványok összesítés Security Reliable Messaging Transactions Metadata WS-Federation WS-Trust WS-SecureConversation WS-Reliability WS- Atomic Transaction WS- Business Activity WS-Security WS-ReliableMessaging Messaging WS-Coordination WS- Metadata Exchange WS-Transfer WS-Enumeration WS-EventNotification MTOM WS-Policy WS-Addressing WSDL SOAP XML XML Encryption XML Digitial Signature XML XML Schema XML Namespaces Transport HTTP HTTPS SMTP TCP 24
Aszimmetrikus kulcsú kriprográfia 25
Aszimmetrikus kulcsú kriptográfia Két különböző kulcsra (egy kulcspárra) épül: privát: csak a tulajdonosa ismeri publikus: mindenki ismeri A publikus kulcsból nehéz kideríteni a privát kulcsot Példa: RSA publikus kulcs: két nagy prím szorzata + egy modulus alapelv: a prímfaktorizáció nehéz feladat 26
Aszimmetrikus kulcsú kriptográfia Privát kulccsal titkosított adat csak a megfelelő publikus kulccsal bontható ki felhasználás: digitális aláírás az aláíró fél a saját privát kulcsával titkosítja az adatot a publikus kulccsal bárki ellenőrizheti ezt Publikus kulccsal titkosított adat csak a megfelelő privát kulccsal bontható ki felhasználás: titkosítás bárki tud titkosítani a publikus kulccsal csak a privát kulcs tulajdonosa tudja kibontani a tartalmat 27
X.509 tanúsítvány Tartalma: Subject: a tanúsítvány tulajdonosa, aki számára a tanúsítványt kiállították Issuer: kibocsátó, aki a tanúsítványt aláírta (hitelesítette) Serial number: sorozatszám, a kibocsátó rendeli hozzá Valid from/to: érvényességi idő Thumbprint: ujjlenyomat, ezt írja alá a kibocsátó Public key: publikus kulcs Private key: privát kulcs 28
X.509 tanúsítvány: publikus kulcs 29
X.509 tanúsítvány: privát kulcs 30
Tanúsítványok hierarchiája elegendő ebben megbízni Root CA önaláíró aláírás Intermediate CA Intermediate CA Personal certificate aláírás Personal certificate aláírás Intermediate CA aláírás Personal certificate 31
XML titkosítás, digitális aláírás 32
XML digital signature XML szintű digitális aláírás Névtér: http://www.w3.org/2000/09/xmldsig# Specifikáció helye: http://www.w3.org/tr/xmldsig-core/ 33
XML digitális aláírás lépései 1. aláírandó erőforrások meghatározása 2. opcionális transzformációk 3. hash (message digest) készítés 4. referenciák összegyűjtése, kanonizációs és aláíró algoritmus választása 5. kanonizálás 6. aláírás 7. kulcsinformációk hozzáadása 8. objektuminformációk hozzáadása 9. elemek összesítése 34
Aláírandó erőforrások összegyűjtése Mit szeretnénk aláírni? Példák: Web-oldal: http://www.abccompany.com/index.html Weben lévő kép: http://www.abccompany.com/logo.gif Weben lévő XML-beli elemre való referencia: http://www.abccompany.com/xml/po.xml#sender1 Az aktuális XML fájlon belüli hivatkozás: #elem20 35
Opcionális transzformációk Az aláírandó elemek transzformációja Példák: bináris adat BASE64-be konvertálása XML transzformálása XSLT-vel A transzformáció eredménye lesz aláírva 36
Hash (message digest) készítés Cél: az aláírt dokumentum kicsi legyen Megoldás: A nagy dokumentumból egy egyirányú, ütközésmentes függvény segítségével rövid ujjlenyomatot generálni, majd ezt aláírni Egyirányú: az ujjlenyomatból nehéz olyan dokumentumot előállítani, amelynek ugyanez az ujjlenyomata Ütközésmentes: nehéz két különböző dokumentumot készíteni, amelyeknek ugyanaz az ujjlenyomata Hash algoritmusok: SHA1, SHA256, SHA512, (az MD5 használata már nem ajánlott) 37
Referenciák összegyűjtése Az eddig elkészített elemek összeszedése: SignedInfo Ez a SignedInfo elem lesz aláírva (tartalmazza a hash értékeket) Példa: <SignedInfo Id="foobar"> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/> <Reference URI="#element4"> <Transforms> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#base64"/> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <DigestValue>j6lwx3rvEPO0vKtMup4NbeVu8nk=</DigestValue> </Reference> <Reference URI="#ref20"> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <DigestValue>UrXLDLBIta6skoV5/A8Q38GEw44=</DigestValue> </Reference> </SignedInfo> 38
Kanonizálás A SignedInfo elem normalizálása aláírás előtt Miért? <a><a/> és <a/> ugyanazok White-space problémák (pl. <a/> vagy < a />) Névtérdeklarációk és prefixek Kommentek 39
Aláírás A normalizált SignedInfo aláírása ez már tartalmazza a referenciák hash-eit is! Módszer: még egy hash képzése a SignedInfo-ból a hash aláírása (titkosítása) Algoritmusok: DSA with SHA1 RSA with SHA1 40
Kulcsinformációk hozzáadása Opcionális: ha hiányzik, a fogadónak tudnia kell a kulcsot Kulcsok fajtái: aszimmetrikus kulcs (pl. RSA) X.509 tanúsítvány egyéni 41
Objektuminformációk hozzáadása Opcionális információk hozzáadása Pl. időbélyeg az aláíráshoz: <Object> <SignatureProperties> <SignatureProperty Id="AMadeUpTimeStamp" Target="#MySecondSignature"> <timestamp xmlns="http://www.ietf.org/rfcxxxx.txt"> <date>19990914</date> <time>14:34:34:34</time> </timestamp> </SignatureProperty> </SignatureProperties> </Object> 42
Összesítés Az elkészült elemek összerendezése: <ds:signature ID=""?> <ds:signedinfo> <ds:canonicalizationmethod/> <ds:signaturemethod/> <ds:reference URI=""? > <ds:transforms/>? <ds:digestmethod/> <ds:digestvalue/> </ds:reference>+ </ds:signedinfo> <ds:signaturevalue/> <ds:keyinfo/>? <ds:object ID=""?/>* </ds:signature> Minden aláírt erőforrásra egy-egy. Transzformációk rendezett listája, amelyek a hash-képzés előtt végrehajtásra kerültek. A hash értéke. Az aláírás értéke (a titkosított hash). Az aláírás ellenőrzéséhez szükséges kulcsra való hivatkozás. A hivatkozás lehet tanúsítvány, kulcsnév vagy kulcscsere algoritmus és -információ. 43
Digitális aláírás folyamata URI erőforrás transzformált erőforrás ujjlenyomat transzformációk hash-elés SignedInfo URI transzformációk hash-függvény ujjlenyomat kanonizálási algoritmus hash+aláíró algoritmus kanonizálás normalizált SignedInfo hash-elés ujjlenyomat aláírás aláírás 44
Digitális aláírás eredménye Signature SignedInfo URI erőforrás URI transzformációk hash-függvény ujjlenyomat kanonizálási algoritmus hash+aláíró algoritmus aláíró kulcs aláírás 45
Aláírás ellenőrzése 1. Minden referenciára a transzformációk alkalmazása, majd a hash kiszámítása ha a kiszámított és az aláírásban szereplő hash különbözik, a validálás meghiúsul 2. A SignedInfo elem normalizálása a kanonizálási algoritmusnak megfelelően 3. A SignedInfo hash-ének elkészítése 4. A SignatureValue helyességének ellenőrzése a hash és a publikus kulcs alapján 46
Digitális aláírás ellenőrzése Signature SignedInfo URI transzformációk hash-függvény ujjlenyomat kanonizálási algoritmus hash+aláíró algoritmus 1. egyezik? transzformációk URI erőforrás transzformált erőforrás hash-elés kanonizálás ujjlenyomat aláíró kulcs aláírás kibontás ujjlenyomat normalizált SignedInfo hash-elés ujjlenyomat 2. egyezik? 47
XML encryption XML szintű titkosítás Névtér: http://www.w3.org/2001/04/xmlenc# Specifikáció helye: http://www.w3.org/tr/xmlenc-core/ 48
XML titkosítás lépései 1. Titkosító algoritmus kiválasztása 2. Kulcs kiválasztása/megszerzése 3. Titkosítandó adat kiválasztása 4. Titkosítás 5. Kulcsinformációk hozzáadása 6. Összesítés 7. Titkosítatlan adat lecserélése titkosítottra 49
Titkosító algoritmus kiválasztása Szabványos stream alapú nincs, de bővítményekkel készíthető ilyen Négy fajta blokkos: 3DES AES-128 AES-256 AES-192 50
Kulcs kiválasztása/megszerzése Kulcsok megadásának módja: nincs: a fogadó oldalnak kell tudnia EncryptedKey: titkosított kulcs AgreementMethod: kulcscsere algoritmussal X509-es tanúsítvány Egyéb módon csatolva 51
Kulcsok titkosítása/cseréje Kulcs titkosítása aszimmetrikus kulccsal: RSA-v1.5 Kulcscsere algoritmusok aszimmetrikus kulcsból származatott információ alapján: Diffie-Hellman kulcscsere Szimmetrikus kulccsal titkosított kulcs: 3DES AES-128 AES-256 AES-192 52
Titkosított adat Típusai: XML elem XML elem tartalma lehet text vagy gyerek elemek Tetszőleges adat Titkosító kulcs Helye: helyben tárolt (tipikusan Base64-ben kódolva) hivatkozás 53
Összesítés <xenc:encrypteddata Id=""? Type=""? MimeType=""? Encoding=""?> <xenc:encryptionmethod/>? <ds:keyinfo> A titkosításhoz használt kulcs. <xenc:encryptedkey/>? <xenc:agreementmethod/>? <ds:keyname/>? <ds:retrievalmethod/>? <ds:*/>? </ds:keyinfo>? <xenc:cipherdata> A titkosított adat. <xenc:ciphervalue/>? <xenc:cipherreference URI=""?/>? </xenc:cipherdata> <xenc:encryptionproperties/>? </xenc:encrypteddata> 54
Titkosítás folyamata adat titkosítás EncryptedData titkosítási algoritmus titkosító kulcs titkosított adat titkosított adat 55
Kibontás 1. Az algoritmus, a paraméterek és a kibontáshoz szükséges kulcsinformáció azonosítása 2. A kulcs meghatározása (ha ez is titkosított, akkor rekurzívan ) 3. A CypherData tartalmának kibontása 56
Kibontás folyamata EncryptedData titkosítási algoritmus titkosító kulcs adat kibontás titkosított adat 57
Windows és Java tanúsítványkezelés 58
Tanúsítványok hierarchiája elegendő ebben megbízni Root CA önaláíró aláírás Intermediate CA Intermediate CA Personal certificate aláírás Personal certificate aláírás Intermediate CA aláírás Personal certificate 59
Windows tanúsítványtár Personal certificates: privát kulcsú saját tanúsítványok Root Certificate Authorities: publikus kulcsú gyökértanúsítványok 60
Java tanúsítványtár Formátum: JKS Tipikusan két darab fájl (bár nem kötelező szétválasztani): cacerts.jks: megbízható RootCA-k publikus kulcsú tanúsítványai keystore.jks: saját privát kulcsú tanúsítványok Kezelés: publikus kulcsok: keytool a JDK-ban privát kulcsok: nincs támogatás a JDK-ban de: letölthető egy pkcs12import nevű segédeszköz 61
DEMO: WS-* 62