Δίκτυα Υπολογιστών Κεφάλαιο 8 – Πρωτόκολλα HTTP και HTTPS

Δημοσιεύτηκε από τον/την codebrakes στις

Δίκτυα Υπολογιστών
Κεφάλαιο 8 - Πρωτόκολλα HTTP και HTTPS

Τι είναι το πρωτόκολλο HTTP

Το πρωτόκολλο μεταφοράς υπερκειμένου (HyperText Transfer Protocol – HTTP) βασίζεται στο μοντέλο πελάτη – εξυπηρετητή (client – server). Δηλαδή χωρίζεται σε δύο προγράμματα, που το ένα είναι του πελάτη (client) και το άλλο είναι του εξυπηρετητή (server). Τα δύο αυτά προγράμματα συνομιλούν μεταξύ τους ανταλλάσσοντας HTTP μηνύματα. Το HTTP ορίζει την δομή που θα έχουν αυτά τα μηνύματα. Οι περιηγητές (browsers) που «τρέχουν» σε έναν σταθμό εργασίας αναλαμβάνουν την δουλειά του HTTP πελάτη και την δουλειά του HTTP εξυπηρετητή αναλαμβάνει κάποιος απομακρυσμένος server στον οποίο ζητά πρόσβαση ο HTTP πελάτης. Συνήθως οι HTTP πελάτες που τρέχουν περιηγητές (browsers) είναι απλοί υπολογιστές οι οποίοι είτε βρίσκονται σε κάποια κατοικία είτε σε κάποιον οργανισμό (π.χ. εταιρίες, πανεπιστήμια, ιδρύματα έρευνας όπως το ΙΤΕ κλπ). Οι δε HTTP εξυπηρετητές όπως προαναφέραμε είναι απομακρυσμένοι servers οι οποίοι μπορεί να βρίσκονται σε κέντρα πληροφοριών (data centers) όπου φιλοξενούν αντικείμενα τα οποία μπορεί να ζητήσει ένας HTTP πελάτης.

Για παράδειγμα όταν ένας χρήστης ζητάει μια ιστοσελίδα πληκτρολογεί το αντίστοιχο σύνδεσμο (URL). Ο browser στέλνει ένα μήνυμα HTTP αίτησης για το αντικείμενο που έχει ο εξυπηρετητής. Ο εξυπηρετητής λαμβάνει αυτήν την αίτηση και απαντά με HTTP μηνύματα απόκρισης τα οποία περιέχουν τα αντικείμενα. Το HTTP χρησιμοποιεί το πρωτόκολλο TCP και την θύρα επικοινωνίας 80. Υπάρχει επίσης και το HTTPS το οποίο προσφέρει ασφαλής επικοινωνία μεταξύ client και server χρησιμοποιώντας την θύρα 443.

Παράδειγμα αίτησης και απόκρισης HTTP μηνυμάτων


Στο παραπάνω σχήμα έχουμε δύο HTTP πελάτες (HTTP clients) και ένα HTTP εξυπηρετητή (HTTP Server). Το πρωτόκολλο μεταφοράς που χρησιμοποιείται είναι το TCP διότι όπως αναφέραμε παραπάνω το HTTP υποστηρίζει το TCP ως πρωτόκολλο μεταφοράς δεδομένων. Θα αναφερθούμε εκτενέστερα γι’ αυτό στο επίπεδο μεταφοράς που θα δούμε στο επόμενο κεφάλαιο, προς το παρών ας συγκρατήσουμε ότι το HTTP χρησιμοποιεί TCP επικοινωνία και ότι αυτό προσφέρει αξιόπιστη μεταφορά δεδομένων. Ο πελάτης HTTP λοιπόν ξεκινάει πρώτος την σύνδεση με τον HTTP εξυπηρετητή. Όταν πραγματοποιηθεί η σύνδεση οι διεργασίες του browser και του εξυπηρετητή προσπελαύνουν το TCP μέσω των διεπαφών socket τους. Ο πελάτης στέλνει μήνυμα αιτήσεων HTTP στην διεπαφή socket και λαμβάνει μηνύματα απόκρισης HTTP από την διεπαφή socket. Με τον ίδιο τρόπο ο HTTP εξυπηρετητής λαμβάνει μηνύματα αιτήσεως από την διεπαφή του socket του και στέλνει απαντητικά μηνύματα στην ίδια διεπαφή του.

Υπάρχουν δύο τύποι HTTP συνδέσεων:

  • HTTP με μη παραμένουσες συνδέσεις (Non persistent HTTP): Όπου ένα και μόνο αντικείμενο μπορεί να σταλεί μόνο μέσω μιας σύνδεσης. Παράδειγμα το HTTP/1.0
  • HTTP με παραμένουσες συνδέσεις (persistent HTTP): Πολλά αντικείμενα μπορούν να σταλούν μέσω μιας TCP σύνδεσης. Παράδειγμα το HTTP/1.1
Σημαντική Παρατήρηση
Μια σημαντική παρατήρηση είναι ότι το πρωτόκολλο HTTP είναι ακαταστασιακό πρωτόκολλο (stateless protocol). Ο λόγος αυτός οφείλεται διότι ένας HTTP εξυπηρετητής (server) δεν κρατάει πληροφορίες για τους πελάτες του. Εξού κι ο λόγος για τον οποίον το HTTP είναι stateless

Δομή ενός HTTP μηνύματος αίτησης

Ας αναλύσουμε λίγο την δομή ενός HTTP μηνύματος αίτησης. Η πρώτη γραμμή που καλείται γραμμή κατάστασης (status line) περιέχει τρία πεδία:

  1. το πεδίο μεθόδου
  2. το πεδίο URL
  3. και το πεδίο έκδοσης HTTP
HTTP μήνυμα αίτησης

Το πεδίο μέθοδος μπορεί να έχει διαφορετικές τιμές οι οποίες μπορεί να είναι GET, POST, HEAD, PUT, DELETE κλπ. Η μέθοδος GET χρησιμοποιείται όταν ζητάμε ένα αντικείμενο ή μια πληροφορία από το URL. Στον πίνακα της παρακάτω διαφάνειας ακολουθεί η κάθε τιμή που μπορεί να πάρει το πεδίο μεθόδου.

  1. GET: Η τιμή GET χρησιμοποιείται όταν θέλουμε να ανακτήσουμε μια πληροφορία που περιέχεται στο πεδίο URL (που είναι ένας server). Οι αιτήσεις που έχουν την τιμή GET μπορούν μόνο να ανακτήσουν δεδομένα.
  2. HEAD: Λειτουργεί με τον ίδιο τρόπο όπως η GET, με την διαφορά ότι μεταφέρει μόνο την γραμμή κατάστασης status line και την γραμμή επικεφαλίδας (header section) στο πακέτο HTTP.
  3. POST: Η τιμή POST χρησιμοποιείται σε HTTP μηνύματα αίτησης για να στείλουμε πληροφορία στον server, για παράδειγμα, τις πληροφορίες που θέλει να στείλει ένας πελάτης, ανέβασμα αρχείων, κλπ μέσω μιας φόρμας HTML.
  4. PUT: Αντικαθιστά όλες τις τρέχουσες αναπαραστάσεις των πόρων προορισμού με το ανεβασμένο περιεχόμενο (uploaded content)
  5. DELETE: Διαγράφει όλες τις τρέχουσες αναπαραστάσεις των πόρων προορισμού που έχουν δοθεί από ένα URL.
  6. CONNECT: Εγκαθιδρύει ένα επικοινωνιακό κανάλι με τον εξυπηρετητή (server) το οποίο ταχτοποιείται από το δοθέν URL
  7. OPTIONS: Περιγράφει όλες τις ιδιότητες επικοινωνίας για τους πόρους προορισμού
  8. TRACE: Εκτελεί μια διαδικασία από τεστ βρόγχων επαναληπτικών μηνυμάτων (message loop-back test) σε όλη τη σύνδεση ως τους πόρους προορισμού.

Δομή ενός HTTP μηνύματος απάντησης

Η γραμμή κεφαλίδας (header section) καθορίζει τον υπολογιστή στον οποίο βρίσκεται το αντικείμενο που ζητάμε. Το σώμα οντότητας είναι κενό με την τιμή GET αλλά χρησιμοποιείται όταν αποδίδεται στο πεδίο μεθόδου η τιμή POST. Προηγουμένως αναλύσαμε την δομή απ’ την οποία αποτελείται ένα HTTP μήνυμα αίτησης τι γίνετε όμως αν ο Server επιθυμεί να δώσει μια απάντηση στον HTTP client ; Θα υπάρξουν διαφορές ως προς την δομή του πακέτου ;

Ας δούμε σε αυτό το σημείο την μορφή ενός HTTP μηνύματος απάντησης. Έχει τρία σημεία τα οποία είναι μια γραμμή κατάστασης (status line), έξι γραμμές επικεφαλίδας και μετά το σώμα οντότητας. Το σώμα οντότητας αφορά το περιεχόμενο του μηνύματος. Η γραμμή κατάστασης περιέχει τρία πεδία, το πεδίο έκδοσης πρωτοκόλλου έναν κωδικό κατάστασης και ένα αντίστοιχο μήνυμα κατάστασης. Η εικόνα της παρακάτω διαφάνειας δίνει μια σαφή απάντηση για την δομή ενός απαντητικού μηνύματος HTTP.

HTTP απαντητικό μήνυμα

Το πεδίο κωδικός κατάστασης μπορεί να έχει διαφορετικές τιμές οι οποίες μπορεί να είναι 200, 301, 400, 404, 505 κλπ. Κάθε ένας απ’ αυτούς τους κωδικούς ορίζει την απάντηση που θα δώσει στον client. Για παράδειγμα έστω ότι ένας HTTP πελάτης (client) στέλνει μια αίτηση στον HTTP εξυπηρετητή (server). Όταν λάβει ο HTTP εξυπηρετητής το αίτημα απ’ τον HTTP πελάτη (client) θα ελέγξει με την σειρά του αν όλα είναι εντάξει και αφού το επιβεβαιώσει θα στείλει πίσω στον HTTP πελάτη ένα HTTP απαντητικό μήνυμα με κωδικό 200 που σημαίνει ΟΚ.

Τι είναι το πρωτόκολλο HTTPS

Το HTTPS δεν αποτελεί ένα ξεχωριστό πρωτόκολλο αλλά έναν συνδυασμό του πρωτοκόλλου HTTP και των δυνατοτήτων κρυπτογράφησης που παρέχει το πρωτόκολλο Secure Sockets Layer (SSL).

Η κρυπτογράφηση που χρησιμοποιείται εξασφαλίζει ότι τα κρυπτογραφημένα δεδομένα δεν θα υποκλαπούν από άλλους κακόβουλους χρήστες. Για να χρησιμοποιηθεί το HTTPS σε κάποιο server θα πρέπει ο διαχειριστής του να δημιουργήσει ένα ζεύγος κλειδιών (δημόσιο/ιδιωτικόο). Στην συνέχεια το δημόσιο κλειδί θα πρέπει να υπογραφεί από μία αρχή πιστοποίησης (certificate authority), η οποία εκδίδει ένα ψηφιακό πιστοποιητικό και η οποία πιστοποιεί ότι ο server που εμφανίζεται στο πιστοποιητικό είναι νόμιμος και ότι το πιστοποιητικό είναι έγκυρο.

Με τον τρόπο αυτό οι χρήστες μπορούν να δουν την υπογραφή της αρχής πιστοποίησης και να βεβαιωθούν ότι το πιστοποιητικό είναι έγκυρο και ότι κανένας κακόβουλος χρήστης δεν το έχει πλαστογραφήσει. Το HTTPS χρησιμοποιείται κυρίως όταν απαιτείται μεταφορά ευαίσθητων προσωπικών δεδομένων (π.χ. υπηρεσίες cloud service όπως dropbox.com). Το επίπεδο προστασίας δεδομένων εξαρτάται από το αν έχει εφαρμοστεί σωστά η διαδικασία ασφάλειας και από το πόσο ισχυροί είναι οι αλγόριθμοι κρυπτογράφησης που χρησιμοποιούνται.

Πολλοί χρήστες πιστωτικών καρτών θεωρούν ότι το HTTPS προστατεύει ολοκληρωτικά τα στοιχεία της πιστωτικής τους κάρτας από κατάχρηση. Το HTTPS χρησιμοποιεί την κρυπτογράφηση για να μεταδώσει τον αριθμό από τον υπολογιστή του πελάτη προς τον server. Η μετάδοση είναι ασφαλής και τα δεδομένα φτάνουν στον server χωρίς κανείς να μπορέσει να τα υποκλέψει.

Οπότε από τα παραπάνω καταλαβαίνουμε ότι το HTTPS εγκαθιδρύει ένα ασφαλές κανάλι ανταλλαγής δεδομένων πάνω από ένα μη ασφαλές δίκτυο. Με αυτόν τον τρόπο καθορίζει ασφάλεια από συνακροάσεις και επιθέσεις man-in-the-middle παρέχοντας επαρκείς σουίτες κρυπτογράφησης (cipher suites) και ότι το πιστοποιητικό (certificate) του server είναι αξιόπιστο. Οπότε το HTTPS επί της ουσίας κρυπτογραφεί το ζητούμενο από τον client URL, τις παραμέτρους ουράς (queries), τις επικεφαλίδες (headers) και τα cookies (που συνήθως περιέχουν πληροφορίες για τον εντοπισμό του client). Παρόλα αυτά οι θύρες επικοινωνίας και η διεύθυνση του host δεν μπορούν να προστατευτούν από το HTTPS. Οι περιηγητές διαδικτύου (web browsers) γνωρίζουν ποιοι HTTPS servers είναι αξιόπιστοι με βάση το πιστοποιητικό που διαθέτουν. Επομένως, ένας χρήστης μπορεί να εμπιστευτεί μια HTTPS σύνδεση όταν ισχύουν τα εξής:

  1. Ο χρήστης εμπιστεύεται ότι ο browser του εκτελεί το HTTPS με σωστά προ εγκατεστημένα πιστοποιητικά εξουσιοδότησής.
  2. Ο χρήστης εμπιστεύεται το πιστοποιητικό μιας σελίδας η οποία είναι νόμιμη.
  3. Η ιστοσελίδα παρέχει ένα έγκυρο πιστοποιητικό, που σημαίνει ότι υπογράφτηκε από έναν έμπιστο οργανισμό.
  4. Το πιστοποιητικό εντοπίζει επιτυχώς την ιστοσελίδα
  5. Ο χρήστης εμπιστεύεται ότι το πρωτόκολλο κρυπτογράφησης (SSL/TSL) είναι επαρκώς ασφαλή ενάντια σε επιθέσεις από τρίτους.

Το HTTPS είναι πολύ χρήσιμο για τα μη ασφαλή δίκτυα (όπως δημόσια WiFi access points – hotspots) καθότι κάποιος που έχει συνδεθεί στο ίδιο δίκτυο μπορεί να παρακολουθεί την κίνηση των πακέτων (packet sniff) με αποτέλεσμα να ανακαλύψει σημαντικές πληροφορίες αν το HTTPS δεν χρησιμοποιείται. Επιπρόσθετα πολλά ελεύθερα WLAN δίκτυα εφαρμόζουν packet injection προκειμένου να «σερβίρουν» στον client τις διαφημίσεις τους σε ιστοσελίδες που επισκεπτόμαστε. Αυτό μπορεί να το εκμεταλλευτούν κάποιοι που θα κάνουν επίθεση σε ένα δίκτυο προσθέτοντας στο πακέτο αντί για τις διαφημίσεις κάποιο malware στις ιστοσελίδες και να υποκλέπτουν τα στοιχεία του εκάστοτε χρήστη. Το HTTPS είναι επίσης χρήσιμο σε συνδέσεις που παρέχουν ανωνυμία (όπως π.χ. Tor) καθότι κακόβολοι Tor κόμβοι μπορούν να καταστρέψουν ή να αλλοιώσουν το περιεχόμενο της πληροφορίας έτσι ώστε να «ρίξουν» malware στην Tor σύνδεση. Αυτός είναι ένας λόγος όπου το Electronic Frontier Foundation και η Tor project άρχισαν να αναπτύσσουν την ιδέα ότι όλες οι ιστοσελίδες οφείλουν να χρησιμοποιούν το πρωτόκολλο HTTPS.

Τελευταία ενημέρωση: 11/09/2016


0 σχόλια

Αφήστε μια απάντηση

Σύμβολο κράτησης θέσης avatar

Η ηλ. διεύθυνση σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *