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-*
© BME IIT, Simon Balázs
2
Integrációs követelmények
3
© BME IIT, Simon Balázs
Vállalati integráció Vállalatirányítási rendszer SAP Termékek .NET
SQL Server
?
Ügyfelek JEE
Web-portál PHP
Oracle DB
MySQL © BME IIT, Simon Balázs
4
Közigazgatási integráció APEH Linux, Oracle
Ügyfélkapu Linux, JBoss
?
OEP Windows, .NET
MÁK Solaris, Sun
© BME IIT, Simon Balázs
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
© BME IIT, Simon Balázs
6
WS-* szabványok
7
© BME IIT, Simon Balázs
Security
Reliable Messaging
Transactions
Metadata
Web-Service szabványok
Messaging XML titkosítás, digitális aláírás Transport pl. HTTP, HTTPS, TCP, UDP, JMS, SMTP, ...
© BME IIT, Simon Balázs
8
Messaging Üzenetkezelés WS-Addressing: címzés
SOAP
fejlécek:
Action To From ReplyTo FaultTo MessageId RelatesTo
Messaging MTOM
WS-Addressing SOAP
© BME IIT, Simon Balázs
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 hitel-lekérdézés – sok érdekeltnek a válasz valamelyik visszaválaszol (ha megfelelő az adat) egy
© BME IIT, Simon Balázs
10
MTOM (Message Transfer Optimization Mechanism)
Base64-átvitel
<soap:Body>
JVBERi0xLjYNJeLjz9MNCjE+DQpzdGFyNCjEx0YNCg==
MTOM-átvitel: xop = XML-binary Optimization Package
<soap:Envelope> <soap:Body>
<xop:Include href="cid:[email protected]"/> --MIMEBoundary000000 content-id: <
[email protected]> content-type: application/octet-stream content-transfer-encoding: binary ... --MIMEBoundary000000--
© BME IIT, Simon Balázs
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:
[email protected] Content-type: application/xop+xml; charset=utf-8 Content-transfer-encoding: binary <SOAP-ENV:Envelope ...> ... --MIMEBoundary000000 content-id: <
[email protected]> content-type: application/octet-stream content-transfer-encoding: binary ... --MIMEBoundary000000--
© BME IIT, Simon Balázs
12
Security
WS-Security: tiktosítás,
digitális aláírás
WS-SecureConversation: szimmetrikus
kulcs generálása, titkosított adatcsere
Security WS-Federation
WS-Trust
WS-SecureConversation
analógia: SSL
WS-Trust: tokenek
WS-Security
kérése, kibocsátása
analógia: Kerberos
WS-Federation trusted
domain-eken túli azonosítás single sign-on © BME IIT, Simon Balázs
13
WS-Federation példa Népességnyilvántartás
1. Bor vásárlás
Vásárló 2. Nagykorú?
Web-shop
© BME IIT, Simon Balázs
14
Reliable messaging analógia: TCP WS-Reliability:
eredeti
változat nem veszi figyelembe a többi protokollt
Reliable messaging WSReliability
WSReliable Messaging
WS-ReliableMessaging: jobban
támogatott figyelembe veszi a többi protokollt is © BME IIT, Simon Balázs
pl. transactions, security, ... 15
WS-ReliableMessaging
© BME IIT, Simon Balázs
16
Transactions
WS-Coordination: tranzakció
Transactions WSAtomic Transaction
WSBusiness Activity
WS-Coordination
levezénylése
WS-AtomicTransaction: rövid
lejáratú tranzakciók
2PC
WS-BusinessActivity: hosszú
lejáratú tranzakciók rollback: kompenzáció © BME IIT, Simon Balázs
17
Metadata
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:
Metadata
WS-MetadataExchange
WS-Policy WSDL
© BME IIT, Simon Balázs
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
© BME IIT, Simon Balázs
19
WS-Security-Policy
Kiegészítés security-policy elemmel
© BME IIT, Simon Balázs
20
WS-Security-Policy
A security-policy elem
© BME IIT, Simon Balázs
21
WS-Security-Policy
Alapok
Alkalmazás
© BME IIT, Simon Balázs
<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 <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:UsernameToken/> <sp:SignedParts/> <sp:EncryptedParts> <sp:Body/> <sp:TransportBinding> <sp:IncludeTimeStamp/>
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/> <sp:RecipientToken> <wsp:Policy> <sp:X509Token sp:IncludeToken="http://.../IncludeToken/Never"> <wsp:Policy> <sp:RequireThumbprintReference/> ...
szimmetrikus © BME IIT, Simon Balázs
aszimmetrikus
<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/> 23 ...
WS-* szabványok összesítés Security
Reliable Messaging
Transactions
Metadata
WS-Federation WS-Trust
WSAtomic Transaction
WS-Reliability
WS-SecureConversation WS-Security
WS-ReliableMessaging
WSBusiness Activity
WS-Coordination
Messaging
WSMetadata Exchange
WS-Transfer
WS-Enumeration
WS-EventNotification
WS-Policy
MTOM
WS-Addressing
WSDL
SOAP
XML XML Encryption XML
XML Digitial Signature XML Schema
XML Namespaces
Transport HTTP
HTTPS
SMTP
TCP
…
24
Aszimmetrikus kulcsú kriprográfia
25
© BME IIT, Simon Balázs
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: © BME IIT, Simon Balázs
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
© BME IIT, Simon Balázs
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 © BME IIT, Simon Balázs
28
X.509 tanúsítvány: publikus kulcs
© BME IIT, Simon Balázs
29
X.509 tanúsítvány: privát kulcs
© BME IIT, Simon Balázs
30
Tanúsítványok hierarchiája önaláíró
elegendő ebben megbízni
Root CA aláírás
Intermediate CA
Intermediate CA aláírás
aláírás
Personal certificate
© BME IIT, Simon Balázs
Personal certificate
Intermediate CA aláírás
Personal certificate
31
XML titkosítás, digitális aláírás
32
© BME IIT, Simon Balázs
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/
© BME IIT, Simon Balázs
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
© BME IIT, Simon Balázs
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
http://www.abccompany.com/logo.gif
Weben
lévő XML-beli elemre való referencia:
http://www.abccompany.com/xml/po.xml#sender1
Az
lévő kép:
aktuális XML fájlon belüli hivatkozás:
#elem20
© BME IIT, Simon Balázs
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
© BME IIT, Simon Balázs
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)
© BME IIT, Simon Balázs
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">
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/>
j6lwx3rvEPO0vKtMup4NbeVu8nk= UrXLDLBIta6skoV5/A8Q38GEw44= 38
Kanonizálás A SignedInfo elem normalizálása aláírás előtt Miért?
és ugyanazok White-space problémák (pl. vagy < a />) Névtérdeklarációk és prefixek Kommentek
© BME IIT, Simon Balázs
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
© BME IIT, Simon Balázs
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
© BME IIT, Simon Balázs
41
Objektuminformációk hozzáadása Opcionális információk hozzáadása Pl. időbélyeg az aláíráshoz:
42
Összesítés
Az elkészült elemek összerendezése:
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ó. © BME IIT, Simon Balázs
43
Digitális aláírás folyamata URI erőforrás transzformációk transzformált erőforrás hash-elés ujjlenyomat
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 © BME IIT, Simon Balázs
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
© BME IIT, Simon Balázs
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
© BME IIT, Simon Balázs
46
Digitális aláírás ellenőrzése URI erőforrás
Signature SignedInfo URI transzformációk hash-függvény ujjlenyomat kanonizálási algoritmus hash+aláíró algoritmus
transzformációk transzformált erőforrás
hash-elés 1. egyezik?
kanonizálás
aláíró kulcs aláírás
normalizált SignedInfo
kibontás ujjlenyomat
ujjlenyomat
hash-elés 2. egyezik?
ujjlenyomat
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/
© BME IIT, Simon Balázs
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
© BME IIT, Simon Balázs
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
© BME IIT, Simon Balázs
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
© BME IIT, Simon Balázs
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/>? A titkosításhoz használt kulcs. <xenc:EncryptedKey/>? <xenc:AgreementMethod/>? ? ? ? ? A titkosított adat. <xenc:CipherData> <xenc:CipherValue/>? <xenc:CipherReference URI=""?/>? <xenc:EncryptionProperties/>? 54
Titkosítás folyamata
adat
EncryptedData titkosítási algoritmus
titkosítás
titkosított adat
© BME IIT, Simon Balázs
titkosító kulcs
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
kibontás adat
© BME IIT, Simon Balázs
titkosított adat
57
Windows és Java tanúsítványkezelés
58
© BME IIT, Simon Balázs
Tanúsítványok hierarchiája önaláíró
elegendő ebben megbízni
Root CA aláírás
Intermediate CA
Intermediate CA aláírás
aláírás
Personal certificate
© BME IIT, Simon Balázs
Personal certificate
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
© BME IIT, Simon Balázs
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
© BME IIT, Simon Balázs
61
DEMO: WS-*
62
© BME IIT, Simon Balázs