Ασφαλείς Υπηρεσίες Ιστού (Web Services) ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ Ασφαλείς Υπηρεσίες Ιστού (Web Services) Χασιώτης Τηλέμαχος (Μ401) Σιάνας Παναγιώτης (Μ436) Αθήνα Σεπτέμβριος 2003
Υπηρεσίες Ιστού (Web Services) Τα WS είναι αυτόνομες, αρθρωτές εφαρμογές που μπορούν να δημοσιευθούν, να εντοπισθούν και να κληθούν μέσω του Internet και οι οποίες βασίζονται σε πρότυπα όπως XML, HTTP, WSDL, UDDI και SOAP. Τα WS είναι η λογική εξέλιξη των αντικειμενοστραφών συστημάτων σε συστήματα υπηρεσιών. Όπως στα αντικειμενοστραφή συστήματα, μερικές από τις θεμελιώδεις έννοιες στα WS είναι ενθυλάκωση, πέρασμα μηνυμάτων και δυναμική σύνδεση. Εντούτοις, τα WS επεκτείνονται πέρα από τις υπογραφές των μεθόδων (method signatures), σε πληροφορίες σχετικές με το τι κάνει η υπηρεσία, που βρίσκεται, πώς είναι δυνατό να κληθεί ποια η ποιότητα της υπηρεσίας και ποια είναι η πολιτική ασφάλειας σχετική με αυτήν την υπηρεσία, οι οποίες πληροφορίες είναι δυνατό να δημοσιευθούν στην διεπαφή των WS. Tα WS, είναι δυνατό να θεωρηθούν εξέλιξη της προσανατολισμένης στα συστατικά προσέγγισης (component-based approach). Τα WS είναι lightweight, χαλαρά συνδεδεμένα (loosely coupled), ανεξάρτητα πλατφόρμας και γλώσσας προγραμματισμού συστατικά.
Λόγοι Χρησιμοποίησης WS Διαλειτουργικότητα μεταξύ των κατανεμημένων εφαρμογών που είναι εγκαταστημένες σε διαφορετικά συστήματα και διαφορετικές πλατφόρμες λογισμικού. Εύκολη, διαδεδομένη πρόσβαση στις εφαρμογές μέσω των τοίχων προστασίας χρησιμοποιώντας πρωτόκολλα του Παγκόσμιου Ιστού. Ένα ανεξάρτητο πλατφόρμας, διαγλωσσικό πρότυπο δεδομένων (XML) που διευκολύνει την ανάπτυξη ετερογενών κατανεμημένων εφαρμογών. Επειδή η πρόσβαση στα WS γίνεται με την χρήση τυποποιημένων πρωτοκόλλων του Παγκόσμιου Ιστού όπως το XML και το HTTP, οι διαφορετικές και ετερογενείς εφαρμογές στον Ιστό (οι οποίες ήδη κατανοούν το XML και το HTTP) μπορούν αυτόματα να έχουν πρόσβαση στα WS, και έτσι να επικοινωνούν η μία με την άλλη.
Μοντέλο WS(1)
Μοντέλο WS(2) Οι ρόλοι που διακρίνονται στο διάγραμμα είναι οι εξής: Service Provider (Παροχέας της Υπηρεσίας): Ο παροχέας της υπηρεσίας είναι η οντότητα η οποία δημιουργεί το WS. Ένας παροχέας υπηρεσίας θα πρέπει να δημοσιεύσει (publish) το WS σε μία κεντρική registry που είναι προσπελάσιμη από οποιοδήποτε πιθανό χρήστη. Service Consumer (Καταναλωτής της Υπηρεσίας): Κάθε οργανισμός ή οποιαδήποτε οντότητα που χρησιμοποιεί ένα WS δημιουργημένο από ένα παροχέα υπηρεσίας καλείται καταναλωτής της υπηρεσίας. Ο καταναλωτής της υπηρεσίας επιτελεί μία διεργασία αναζήτησης (find) στη registry, στην οποία ο παροχέας της υπηρεσίας δημοσίευσε (publish) την περιγραφή του WS και από την περιγραφή του WS είναι δυνατό να ανακτήσει έναν μηχανισμό για να πραγματοποιήσει την διεργασία (bind) στο WS. Service Registry: Μία registry υπηρεσιών, είναι μία κεντρική τοποθεσία, όπου ο παροχέας υπηρεσιών, μπορεί να δημοσιεύσει (publish) τα WS που παρέχει και ο καταναλωτής υπηρεσιών μπορεί να τα αναζητήσει (find) και στη συνέχεια να δεσμευθούν (bind) με αυτά.
Βασική Στοίβα WS πρωτοκολλων Service Publication/Discovery UDDI Service Description WSDL XML Messaging SOAP Transport Network HTTP, SMTP, FTP, Https over TCP/IP Σε ένα WS περιβάλλον υπάρχουν τρεις θεμελιώδεις διαδικασίες, ‘find’, ‘bind’ και ‘publish’. Για να γίνουν οι διαδικασίες αυτές εφικτές υπάρχει η αναγκαιότητα μίας βασικής στοίβας WS πρωτοκόλλων τα οποία θα είναι παρών σε κάθε εφαρμογή που επιθυμεί να παίξει κάποιο ρόλο σε ένα σύστημα WS
SOAP(Simple Object Access Protocol ) To SOAP είναι ένα πρωτόκολλο βασισμένο στην XML για την ανταλλαγή πληροφορίας μεταξύ εφαρμογών ανεξαρτήτως του λειτουργικού συστήματος, της γλώσσας προγραμματισμού ή το μοντέλο αντικειμένων (object model). Μερικά από τα χαρακτηριστικά του SOAP είναι τα εξής: Το SOAP είναι ένα «ελαφρύ» και απλό πρωτόκολλο επειδή το μοναδικό που απαιτείται είναι η μεταφορά XML δεδομένων πάνω από HTTP. Το SOAP δεν εξαρτάται από κανένα πρωτόκολλο μεταφοράς και αυτό γιατί το επίπεδο XML Messaging «χτίζεται» πάνω από το επίπεδο μεταφοράς όπως φαίνεται και στο Σχήμα 2. Μία αφαίρεση είναι ότι το SOAP είναι XML πάνω από HTTP αλλά το SOAP μπορεί να «δεθεί» με κάθε άλλο πρωτόκολλο μεταφοράς όπως το SMTP και το FTP. Το SOAP είναι εύκολα επεκτάσιμο μέσω της XML προσθέτοντας χαρακτηριστικά όπως δοσοληψίες (transactions), ασφάλεια και λοιπά. Το SOAP καθορίζει δύο τύπους μηνυμάτων, αίτηση (Request) και απόκριση (Response), για να επιτρέψει στους αιτούντες υπηρεσιών να ζητήσουν μια μεμακρυσμένη υπηρεσία και για να επιτρέψει στους φορείς παροχής υπηρεσιών να ανταποκριθούν σε τέτοια αιτήματα.
SOAP 1.2 Messages with Attachments SOAP Envelope (Primary MIME part) Attachment SOAP Header SOAP Body Header Entry Body Entry Το SOAP μήνυμα είναι ένα XML κείμενο που μπορεί να περιέχει τα εξής τμήματα: Το SOAP envelope (υποχρεωτικό). Το SOAP header (προαιρετικό). Το SOAP body (υποχρεωτικό). Τα Attachments (προαιρετικό).
Πλεονεκτήματα-Μειονεκτήματα του SOAP Μπορεί να υπερβεί τα firewalls (μπορεί να φανεί και σαν μειονέκτημα αν δεν έχει εφαρμοστεί καλή πολιτική ασφαλείας). Τα δεδομένα του είναι δομημένα με την χρήση της XML, πράγμα που τα κάνει κατανοητά από οποιαδήποτε πλατφόρμα ανεξαρτήτως λογισμικού. Μπορεί να χρησιμοποιηθεί σε συνδυασμό με διάφορα πρωτόκολλα μεταφοράς. Αυτό του δίνει μεγάλη ευελιξία αλλά και ευρεία υποστήριξη. Ταιριάζει απόλυτα με το πρότυπο αίτησης απάντησης του HTTP. Είναι αρκετά ελαφρύ πρωτόκολλο. Το υποστηρίζουν οι μεγαλύτεροι παραγωγοί λογισμικού στην αγορά. Μειονεκτήματα Έλλειψη διαλειτουργικότητας μεταξύ των διαφόρων εργαλείων ανάπτυξης. Μη ώριμοι μηχανισμοί ασφαλείας: Το πρωτόκολλο δεν περιγράφει μηχανισμούς για πιστοποίηση του μηνύματος πριν την επεξεργασία του, ούτε μηχανισμούς κρυπτογράφησης για την αποφυγή μη εξουσιοδοτημένης προσπέλασης. Δεν υπάρχει μηχανισμός που να μπορεί να εγγυηθεί ποιότητα υπηρεσίας ή παράδοση μηνύματος. Δεν υπάρχει μηχανισμός δημοσίευσης. Ο πελάτης δεν έχει τη δυνατότητα να στείλει μια αίτηση σε πολλαπλούς αποδέκτες χωρίς να χρειαστεί να στείλει την αίτηση στον καθένα ξεχωριστά.
WSDL(Web Services Definition Language ) Υπάρχει η ανάγκη ύπαρξης ενός τρόπου περιγραφής των εξωτερικών υπηρεσιών, διεπαφών (interfaces), που μία εφαρμογή παρέχει έτσι ώστε μία άλλη εφαρμογή να μπορεί δυναμικά να συνδεθεί με μία υπηρεσία. Αυτός ο τρόπος περιγραφής θα πρέπει να είναι ανεξάρτητος από κάθε πλατφόρμα και γλώσσα προγραμματισμού. Η WSDL (Web Services Definition Language) παρέχει ένα τέτοιο τρόπο περιγραφής WS. Η προδιαγραφή της γλώσσας περιέχει ένα XML Schema το οποίο περιγράφει την δομή που πρέπει να έχει το κάθε WSDL έγγραφο (http://www.w3.org/XML/Schema/). H WSDL είναι μία XML γραμματική για τον καθορισμό των ιδιοτήτων ενός WS όπως τι κάνει, που βρίσκεται και πώς αυτό είναι δυνατό να κληθεί. Ένα έγγραφο WSDL καθορίζει τις υπηρεσίες ως συλλογές από τελικά σημεία δικτύων (network endpoints), ή από ports.
Δομή WSDL Εγγράφου Η δομή ενός WSDL εγγράφου αποτελείται λοιπόν από τα εξής στοιχεία (elements): Το στοιχείο <types> ορίζει τους τύπους δεδομένων που χρησιμοποιούνται. Το στοιχείο <message> ορίζει τα μηνύματα τα οποία χρησιμοποιούνται από το WS. Το στοιχείο <operation> ορίζει τα μηνύματα αίτησης-απάντησης (request-response) που χρησιμοποιούνται από κάθε λειτουργία που παρέχεται από το WS. Το στοιχείο <portType> ορίζει μία συλλογή από operations. Το στοιχείο <binding> περιγράφει πως ένα portType αντιστοιχίζεται σε ένα πρωτόκολλο πρόσβασης σε ένα WS όπως το SOAP. Το στοιχείο <service> και το στοιχείο <port> που περιέχει ορίζουν την τοποθεσία που βρίσκεται στο δίκτυο η υπηρεσία.
UDDI(Universal Description, Discovery, and Integration ) Η επικοινωνία με το UDDI βασίζεται στο SOAP UDDI προδιαγραφή: XML schema για SOAP μηνύματα και UDDI APIs XML Schema: 5 κύριες δομές δεδομένων (business entities, business service, binding templates, tModels και publisherAssertions) UDDI APIs προδιαγραφή: Inquiry API και Publishing API
Σχέσεις Μεταξύ των UDDI Δομών Δεδομένων(1)
Σχέσεις Μεταξύ των UDDI Δομών Δεδομένων(2)
Αλληλεπίδραση SOAP,UDDI,WSDL
WS Αρχιτεκτονική Για J2EE Σύστημα(1)
WS Αρχιτεκτονική Για J2EE Σύστημα(2) Business Functionality (Επιχειρηματική Λειτουργικότητα): Είναι η λειτουργικότητα την οποία ο παροχέας του WS θα εκθέσει ως WS. Πολλές επιχειρήσεις έχουν υιοθετήσει την J2EE πλατφόρμα για την ανάπτυξη εφαρμογών καθώς παρουσιάζει ένα πλήθος πλεονεκτημάτων. Σύστημα WS: Η έννοια του WS συστήματος είναι παρόμοια με την έννοια του container στη J2EE πλατφόρμα. Παρέχει ένα περιβάλλον για την εκτέλεση των WS σε πραγματικό χρόνο. Τo περιβάλλον αυτό λαμβάνει SOAP αιτήσεις και τις αντιστοιχεί στα κατάλληλα Java συστατικά τα οποία μπορεί να είναι μία Java κλάση ή ένα EJB. Εξυπηρέτης Διαδικτύου: O Web Server, είναι η κύρια πύλη μέσω της οποίας, οι SOAP αιτήσεις των πελατών των WS λαμβάνονται από τον παροχέα των WS. Ένας Web Server επικοινωνεί μέσω του HTTP πρωτοκόλλου και συνήθως «ακούει» στην πόρτα 80, με αποτέλεσμα να ταιριάζει απολύτως με τα επίπεδα XML messaging και Μεταφοράς καθώς, όπως αναφέρθηκε παραπάνω, τα SOAP μηνύματα μεταφέρονται συνήθως πάνω από το πρωτόκολλο HTTP, χωρίς όμως να καθίσταται αδύνατη και η χρήση και άλλων πρωτοκόλλων μεταφοράς. Πελάτης WS: Ο WS πελάτης είναι ο καταναλωτής του WS . Επειδή η τεχνολογία των WS είναι ανεξάρτητη πλατφόρμας, μία εφαρμογή πελάτη μπορεί να είναι γραμμένη σε οποιαδήποτε από τις διαθέσιμες γλώσσες προγραμματισμού η οποία μάλιστα μπορεί να είναι διαφορετική από εκείνη που χρησιμοποίησε ο πάροχος του WS για την ανάπτυξη του. Το πρώτο βήμα που κάνει συνήθως ένας πελάτης WS είναι να βρει σε μία UDDI registry πληροφορίες για την επιχείρηση που παρέχει το WS για το οποίο ενδιαφέρεται.
Ολοκλήρωση των WS στο περιβάλλων J2EE1.4 Η πιο ορατή αλλαγή στην πλατφόρμα J2EE 1.4 είναι η ισχυρή ολοκλήρωση (integration) των WS. Τα J2EE συστατικά μπορούν τώρα να αλληλεπιδράσουν με τα WS και να εφαρμόσουν αυτά με ένα τυποποιημένο, φορητό τρόπο. Οι προδιαγραφές που περιλαμβάνονται είναι: WS-I (Web Services Interoperability Organization) Basic Profile Java Διεπαφή Προγραμματισμού (API) για XML RPC (JAX-RPC) Java Διεπαφή Προγραμματισμού (API) για την ανάλυση (parsing) XML (JAXP 1.2) SOAP με συνημμένα αντικείμενα, Διεπαφή Προγραμματισμού (API) για Java (SAAJ 1.1) Java Διεπαφή Προγραμματισμού (API) για XML registries (JAXR) Εφαρμογή Επιχειρηματικών WS (JSR 109).
WS για το περιβάλλoν J2EE (JSR 109) Ενώ το JAX-RPC, το SAAJ είναι οι Διεπαφές Προγραμματισμού (API)s που κάνουν δυνατή την ύπαρξη των WS,το JSR 109, επίσης γνωστό ως Web Services για J2EE, είναι το σχέδιο που καθορίζει πώς αυτές οι προδιαγραφές συνδέονται με το J2EE πρότυπο προγραμματισμού. Συγκεκριμένα, το JSR 109 καλύπτει διάφορες σημαντικές περιοχές: Client-side μοντέλο προγραμματισμού: πώς οι εφαρμογές J2EE μπορούν να έχουν πρόσβαση σε WS σαν ήταν «παραδοσιακά» μεμακρυσμένα αντικείμενα. Server-side μοντέλο προγραμματισμού: πώς τα WS μπορούν να αναπτυχθούν ως servlets και stateless session EJBs και o κύκλος της ζωής τους. WS Deployment και deployment descriptors: πώς τα WS εγκαθίστανται σε έναν συμβατό με την πλατφόρμα J2EE 1.4 application server.
Η αρχιτεκτονική του JSR 109
Ασφάλεια στα WS Κατά την διάρκεια των περασμένων ετών αναπτύχθηκαν πολλά σχήματα ασφαλείας βασισμένα στο XML ώστε να παράσχουν ένα κατανοητό και ενοποιημένο μοντέλο ασφαλείας για τα WS. Αυτά τα σχήματα φαίνονται παρακάτω: XML digital signature XML encryption XKMS (XML key management specification) XACML (Extensible Access Control Markup Language) SAML (Secure Assertion Markup Language) WS-Security (Web Services Security) ebXML Message Service The Liberty Alliance Project
Λειτουργία Συστημάτων Τα SAML assertions μπορούν να υπογραφτούν ψηφιακά χρησιμοποιώντας XML digital signature. Τα ίδια SAML assertions μπορούν να κρυπτογραφηθούν χρησιμοποιώντας το XML Encryption προκειμένου να εξασφαλιστεί εμπιστευτικότητα. Τα δημόσια κλειδιά που χρησιμοποιούνται για τις ψηφιακές υπογραφές και τις κρυπτογραφήσεις μπορούν να αξιολογηθούν και να καταχωρηθούν με την χρήση του XKMS. Όσο για τα XACML και SAML, τα συμμετέχοντα μέρη μπορούν να τα χρησιμοποιήσουν για προσδιορισμό μιας πολιτικής ασφαλείας που θα αποτελεί την βάση επεξεργασίας των SAML assertion μηνυμάτων.